私はディレクトリ内のすべてを削除するコマンドがなぜ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
私ができる最悪のことは空のディレクトリを削除することです。