rmdir -rfではなくrm -rfである理由


13

ディレクトリ内のすべてを削除するコマンドがなぜであるのか、私はいつも興味がありましたrm -rf

なぜ同じことをするフラグがないのrmdirですか?

rmdirディレクトリ操作に使用する方が直感的ではないでしょうか?


9
rmdirディレクトリをrm削除し、削除します。なぜrmdir非ディレクトリを削除するのは直感的ですか?
ステファンシャゼル

5
そうではないからです。あなたはこの質問をするのに40年遅れています、そしてあなたは間違った人々に尋ねています。
user207421

回答:


25

初期の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あり、最悪のことは空のディレクトリを削除することだったことを知っています。


1
最後の文について:おそらく、再帰的な削除操作がにあったrmdir場合、-rフラグが必要です。(のrmdir -r junk代わりにrm -r junkrmdir junkディレクトリが空の場合にのみ機能します)
user253751

7

歴史的です。 rmファイルへの参照を削除するためrmdirに作成され、ディレクトリを削除するために作成されましたmkdir。何年も前、Unix rmはを呼び出すことによってのみディレクトリを削除できましたrmdir。また、rmdir(2)システムコールではなく、を呼び出すrmdirプログラムがありましたunlink(2)

参照:


2

純粋に意見の問題ですが、ディレクトリrmrmdir削除しながらファイルを削除します。ディレクトリはファイルですが、特別な種類のファイルであるためrm、それらを削除することは意味がありますが、特別に処理する(つまり、機能を有効にするために追加のオプションが必要です)。そして、それはrmdirディレクトリではない何かを削除するために私見のために意味をなさない。


1
その場合、rm空のディレクトリを削除できないのはなぜですか(再帰モードを除く)。
user253751

ディレクトリ全体を削除できない同じ理由- -rディレクトリ特殊ファイル機能を有効にするにはフラグが必要です。
ダーウィンフォンコラックス

1
そこに循環論法...
user253751

私が言うと思います私の推論は... 1 >>偏心を持っている
ダーウィン・フォン・Corax
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.