ディレクトリ内のすべてを削除するコマンドがrm -rf
である理由をいつも知りたいと思っていました。 。
rmdir
で同じことを行うためのフラグがないのはなぜですか ?
rmdir
を使用する方が直感的ではないでしょうか ディレクトリ操作のために?
承認された回答:
初期のUnixファイルシステム(少なくとも1970年頃のV7時代)では、ディレクトリは特別なファイルとして実装され、rootのみがmknod(2)
を使用できました。 それらを作成し、rootのみがunlink(2)
できるシステムコール ディレクトリ特殊ファイル。
これらの保護は、ファイルシステム構造の一貫性を維持するために実施されました。たとえば、ユーザーがディレクトリ特殊ファイルへの書き込みを許可されている場合、その親ディレクトリを..
にすることができます。 それ自体(具体的にはそれ自体のiノード)を指します。これにより、ファイルシステムに循環参照が作成されますが、これは悪いことです。もちろん、他にも矛盾が生じる可能性がありますが、これは明確な例にすぎません。
一貫性は、mkdir(1)
などのユーザースペースプログラムによって維持されました。 およびrmdir(1)
これは、非特権ユーザーに代わって特権システムコールを実行できるようにSet-UIDルートでした。 rm(1)
に再帰が追加されたとき 、removeコマンドは現在のUIDとして実行され、rmdir(1)
を呼び出します。 空のディレクトリを削除するためだけに。これは、依然としてかなり標準的なアクセス許可の昇格方法です。必要以上のアクセス許可を使用しないでください。
しばらくしてからmkdir(2)
およびrmdir(2)
独自のシステムコールとして追加されましたが、rm(1)
間の関係 およびrmdir(1)
残ります。
個人的には、rmdir junk
の方が少し満足できると思います。 そして、私がした最悪の事態は、空のディレクトリを削除することでした。