リンク解除はrmより高速ですか?
どちらも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)
の違いを明確にしました。意味論は依然としてプラットフォーム間で異なるでしょう。
削除の遅い部分は、ファイルシステムのコードとディスクに関するものであり、unlink()システムコールのユーザースペースの準備ではありません。
つまり、速度の違いが問題になる場合は、データをファイルシステムに保存しないでください。
unlinkはrm "light"です。 rmにはより多くの機能がありますが、同じことを行います。