rmdir -rfの代わりにrm -rfを使用する理由

rmdir -rfの代わりにrm -rfを使用する理由

私はディレクトリ内のすべてを削除するコマンドがなぜrm -rf

同じことをするフラグはなぜありませんかrmdir

rmdirディレクトリ操作で使用する方が直感的ではないでしょうか?

答え1

初期のUnixファイルシステム(少なくとも1970年頃のV7時代)では、ディレクトリは特別なファイルとして実装されており、ルートのみを生成したmknod(2)システムコールを使用でき、ルートのみのディレクトリunlink(2)特殊ファイルを作成できました。

これらの保護措置は、ファイルシステム構造の一貫性を維持するために行われます。たとえば、ユーザーがディレクトリ特殊ファイルを作成できる場合、ユーザーは自分..の親ディレクトリが自分(特に自分のiノード)を指すようにすることができます。これにより、ファイルシステムに循環参照が生成され、悪いことになります。もちろん、他の不一致が発生する可能性もあります。これはただ一つの明らかな例です。

一貫性は、権限のないユーザーに代わって特権システムコールを実行できるように、Set-UIDルートやmkdir(1)Set-UIDなどのユーザースペースプログラムによって維持されます。rmdir(1)再帰的に追加されると、rm(1)削除コマンドは現在のUIDで実行され、空のディレクトリを削除するrmdir(1)ためにのみ呼び出されます。これは特権の上昇に対するかなり標準的なアプローチです。必要以上の権限を使用しないでください。

しばらくすると、独自のmkdir(2)システムコールが追加されましたが、rmdir(2)間の関係はまだ存在します。rm(1)rmdir(1)

個人的には、私はこれがより満足していると思い、rmdir junk私ができる最悪のことは空のディレクトリを削除することです。

答え2

これは歴史的です。 rmファイルへの参照を削除し、rmdirディレクトリを削除しますmkdir。数年前は、Unixを呼び出さなければシステムコールがrmできrmdirませんでした。rmdir(2)rmdirunlink(2)

引用:

答え3

純粋にコメントの問題ですが、ディレクトリを削除するとrmファイルも削除されますrmdir。ディレクトリはファイルですが、特別な種類のファイルなので、rm削除するのは合理的ですが、特別に扱うことをお勧めします(機能を有効にするには追加のオプションが必要です)。一方、すべてのファイルがディレクトリ、IMHO、rmdirそこにないディレクトリを削除することは意味がありません。

関連情報