私たち全員が知っているように、これらは両方ともマシンに自殺を指示する2つの致命的なUNIXコマンドです。しかし、2つの違いは何ですか? 1つ目はルートディレクトリを削除し、2つ目はその中のすべてを削除します。どちらも同じように悪いですが、最初はルートディレクトリ自体を削除してファイルシステムを削除しますか?違いは何ですか?
答え1
rm -r dir
と同じ違いがありますrm -r dir/*
。
2番目は、globに一致するすべてのファイルを削除します。通常、名前はドットで始まらないすべてのファイルですが、bashやその他の項目で構成できます。次の場合でも失敗します。場所コマンドラインにはあまりにも多くのファイルしか含めることができないため、ディレクトリ内のファイルの数です。通常、ルートディレクトリには何もありませんが、まだあります。
最初は繰り返しでdir
すべてを削除し、ディレクトリ自体を削除します。しかし、言ったように、ルートディレクトリは削除できません。 Linuxで発生するエラーは、Device or resource busy
マウントされたファイルシステムを含むディレクトリを削除しようとしたときに発生するエラーとまったく同じです。 (削除する前にディレクトリが空であることを確認する必要はありません。)
同じ理由で、通常はルートディレクトリを空にすることはできません。Linuxでは、同じエントリがインストールされており、それらを/proc
削除せずに/sys
マウントポイントを削除することはできません。
厳密に言えば、すべてのファイルを削除してもシステムがシャットダウンされるわけではありません。単に外部プログラムを実行して、使用するのがより難しくなる一般的なパラダイムを作成するだけです。ただし、ファイルシステムにファイルが必要なくなったプログラムの実行には影響しません。また、busybox
統合されたrm
シェルなどを使用して試してみることもできますls
。 (起動ファイルがマウントされたファイルシステムにある場合は、次回の起動が困難になる可能性があります。)
答え2
--no-preserve-root
反対のディレクティブをバイパスすることで、このディレクティブはシステムに応じて--preserve-root
エイリアスとして設定することも、デフォルトオプションに設定することもできます。rm
このオプションは初心者のための保護だけであり、最初からこれらのコマンドを実行している人からシステムを大幅に保護するものではありません。
--preserver-root
ディレクティブ(バイパスまたはデフォルト)がない場合は、rm
システム内のすべてのエントリを削除しようとします。
予定ですので参考にしてくださいいつも開いているため削除できないファイルが多いため、これを行うことはできません。また、これは/
カーネル構成なので、インストールされているすべてのコンテンツを削除できますが、いかなる状況でも削除することはできません。