回答:
どちらも、unlink()
システムコールである同じ基本機能のラッパーです。
ユーザーランドユーティリティ間の違いを比較検討する。
rm(1)
:
unlink(1)
:
rm(1)
複数の引数を指定する場合と比較すると、時間がかかります。次の方法で違いを実証できます。
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
ただし、システムunlink(2)
関数への純粋な呼び出しについて話している場合は、おそらくあなたが説明しているものではないことがわかります。
unlink()
同様にディレクトリとファイルでシステムを実行できます。ただし、ディレクトリが他のディレクトリおよびファイルの親である場合、その親へのリンクは削除されますが、子はぶら下がります。これは理想的とは言えません。
編集:
申し訳ありませんが、違いを明確にunlink(1)
してunlink(2)
。意味論はまだプラットフォーム間で異なるでしょう。
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
。親ディレクトリのリンクを解除すると、fsckが不一致を検出するまで、子によって消費されたスペースが失われます。