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