誰もが知っているように、これらは2つの致命的なUNIXコマンドであり、どちらもマシンに自殺するように指示します。しかし、2つの違いは何ですか? 1つ目はルートディレクトリを削除し、2つ目はその中のすべてを削除します。どちらも同様に悪いですが、最初のものはルートディレクトリ自体を削除するため、ファイルシステムを削除しますか?違いはなんですか?
rm -r dir
およびrm -r dir/*
と同じ違い。
2番目は、グロブが一致するものをすべて削除します。通常、名前がドットで始まらないすべてのファイルが削除されますが、bashおよびその他のファイルで構成できます。また、ディレクトリにlotsのファイルがある場合も失敗します。これは、コマンドラインが収まるだけであるためです。通常はルートディレクトリにありますが、まだあります。
最初のものはdir
に再帰し、すべてのコンテンツを削除してから、ディレクトリ自体を削除します。ただし、前述のとおり、ルートディレクトリを削除することはできません。 Linuxでは、発生するエラーはDevice or resource busy
です。これは、マウントされたファイルシステムを保持しているディレクトリを削除しようとすると、まさにそれと同じです。 (それをドロップする前に、ディレクトリが空であるかどうかをチェックすることさえしません。)
同じ理由で、通常はルートディレクトリも空にすることはできません。また、/proc
や/sys
(Linuxの場合)などがマウントされ、マウントポイントを削除することはできません。それらをアンマウントします。
そして、厳密に言えば、すべてのファイルを削除してもシステムが停止するわけではありません...これは、外部プログラムを起動して何かを行うのが少し難しいという通常のパラダイムになります。ただし、ファイルシステム上でファイルを必要としないプログラムの実行は影響を受けません。 busybox
とrm
が統合されたls
シェルのようなものでそれを試すことができるかもしれません。 (ただし、ブートファイルがマウントされたファイルシステム上にある場合、次回の起動は難しい場合があります。)
--no-preserve-root
は、システムに応じてrm
のエイリアスまたはデフォルトオプションとして設定できる反対の--preserve-root
ディレクティブをバイパスします。このオプションは、そもそもそのようなコマンドを実行する誰かからシステムをあまり保護しない、単なる超初心者の保護です。
--preserver-root
ディレクティブ(バイパスまたはデフォルト)がない場合、rm
はシステム上のすべてを削除しようとします。
alwaysが失敗することに注意してください。開いているため削除できないファイルがたくさんあるからです。また、/
はカーネル構造であり、マウントされているすべてのコンテンツを削除できたとしても、どのような場合でも削除できないことに注意してください。