ディレクトリ内のすべてを削除するコマンドが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の方が少し満足できると思います。 そして、私がした最悪の事態は、空のディレクトリを削除することでした。