unlink と rm の違いは何ですか?

unlink と rm の違いは何ですか?

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

POSIX仕様レベルでは、rmより厳密に規定されているリンクを解除そうします。

スクリプトを複数の OS 間で実行する必要がある場合、rm を使用すると結果の移植性が向上する可能性があります。

答え3

削除が遅くなるのは、ファイルシステム コードとディスク関連であり、unlink() システム コールのユーザー空間の準備ではありません。

つまり、速度の違いが問題になる場合は、データをファイルシステムに保存しないでください。

unlink は単なる rm の「軽量版」です。rm にはより多くの機能がありますが、実行することは同じです。

関連情報