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


回答:


68

どちらも、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)。意味論はまだプラットフォーム間で異なるでしょう。


それは、Unixファイルシステムでディレクトリを削除し、その下にあるすべてのファイルを常に削除すると、それに含まれるファイル/ディレクトリの数に比例する操作になることを意味しますか?他のディレクトリ/ファイルの親であるディレクトリのリンクを解除するとどうなりますか?それは決して消されず、私はこのスペースを永遠に失いましたか?
マーチン

6
技術的には、すべてではないにしても、ほとんどのファイルシステムに孤立ディレクトリ/ファイルを残すことができます。これを修正することは、通常、ファイルシステム修復ツールを実行することを意味します。Unix / Linuxでは、これらのツールは「fsck」として知られており、ファイルシステムごとに特定のバリエーションがあります。何かを回復した場合、通常は「lost + found」という名前のディレクトリに残します
ConcernedOfTunbridgeWells

1
正しい。rmはツリーの下から上に向かって再帰します。次の方法でデモンストレーションできますmkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1。親ディレクトリのリンクを解除すると、fsckが不一致を検出するまで、子によって消費されたスペースが失われます。
ダンキャリー

1
あなたは何について話していますか?$ mkdir -p 1/2/3 $ unlink 1 unlink: `1 'のリンクを解除できません:ディレクトリユーザーがfsckを必要とする「メモリ」リークを引き起こしていますか?ありそうにない!
トーマス

1
LinuxとFreeBSDの両方のマンページには、ディレクトリでunlink()を実行しようとすると失敗することが明記されています。
トーマス

8

POSIX仕様レベルでは、rmが行うことは、unlinkが行うことよりもはるかに厳密に指定されます

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


4

削除の遅い部分は、unlink()システムコールのユーザー空間の準備ではなく、ファイルシステムコードとディスクに関するものです。

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

リンク解除は単なるrm「ライト」です。rmにはさらに機能がありますが、同じことをします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.