unlink は rm より速いですか?
答え1
どちらも、システム コールである同じ基本関数のラッパーですunlink()
。
ユーザーランドユーティリティ間の違いを比較検討します。
rm(1)
:
- より多くのオプション。
- さらなるフィードバック。
- 健全性チェック。
- 上記の結果、単一の呼び出しでは少し遅くなります。
- 複数の引数を同時に指定して呼び出すことができます。
unlink(1)
:
- 健全性チェックが少なくなります。
- ディレクトリを削除できません。
- 再帰できません。
- 一度に 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)
。意味はプラットフォームによって依然として異なります。
答え2
答え3
削除が遅くなるのは、ファイルシステム コードとディスク関連であり、unlink() システム コールのユーザー空間の準備ではありません。
つまり、速度の違いが問題になる場合は、データをファイルシステムに保存しないでください。
unlink は単なる rm の「軽量版」です。rm にはより多くの機能がありますが、実行することは同じです。