私はディレクトリ内のすべてを削除するコマンドがなぜ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)
rmdir
unlink(2)
引用:
答え3
純粋にコメントの問題ですが、ディレクトリを削除するとrm
ファイルも削除されますrmdir
。ディレクトリはファイルですが、特別な種類のファイルなので、rm
削除するのは合理的ですが、特別に扱うことをお勧めします(機能を有効にするには追加のオプションが必要です)。一方、すべてのファイルがディレクトリ、IMHO、rmdir
そこにないディレクトリを削除することは意味がありません。