rm -rf -no-preserve-rootが必要なシナリオはありますか?


27

ここで、人々が誤って操作しrm -rf --no-preserve-rootたりrm -rf *、反応する前にファイルシステムのほとんどまたはすべてを消去したりするいくつかの質問を見ました。

--no-preserve-root開発者として、または管理者として、通常の使用であるかにかかわらず、使用する理由はありますか?


4
有用なケースは想像できません...このオプションは、UNIXの原則の直交性を得るためにのみ存在すると思います(例外なく同じものを維持するという点で)。ほとんどの場合、例外が必要になります/が、「一般的なケース」が引き続き表示されます。言い換えれば、»何をすべきかを伝えるのは私のコンピューターの仕事ではありません。«すべきではありません。
アンドレアスヴィーゼ14

SkyNetが引き継ぐときに使用できる武器として存在します。
ミッチダーツ

回答:


26

重要:最新のUEFIシステムは、/sysディレクトリの下にファームウェアをマウントし、OSで使用できるようにします。このコマンドは最新のシステムでは実行しないでください。このコマンドは、このファームウェアを削除し、基本的にマシンをブリックします。


私が考えることができる最も単純なシナリオは、ドライブからすべてのデータを削除したい人です。これを行うには完全に正当な理由があり、私が考えることができる最も簡単な方法は

rm -rf --no-preserve-root /

これは実際に例として与えられていることがわかりinfo rmます:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

別の完全に正当な理由は、マウントしたファイルシステムを削除したいということですchroot。その場合、環境rm -rf --no-preserve-root /内のシステムは削除されchrootますが、システムはそのまま残ります。

考えられる理由は他にもあると確信していますが、一般的には、私のシステムで自分がやりたいことを何でもできるようにすることは非常に合理的なアプローチのようです。注意することは私の仕事です。システムは、私がやりたいことだけを実行できるようにするべきです。私が欲しいものが愚かであれば、それは私の問題であり、OSの問題ではありません。

とにかく、これは比較的新しい制限であり、POSIX仕様の第7バージョン以前のものがここにあります)で追加されましたrm -rf /。それが完全に有効なコマンドになる前です。歴史的なノートでは...ディレクトリとディレクトリは、ディレクトリを削除する機能を最初に取得したrm1979年以来、常にから保護されていrmます。詳細はこちら


21
DO NOT YOUR SYSTEMはUEFI(新しいコンピュータ)の場合、すべてのデータを削除するにはこれを使用して.Doingこれはすべてのファームウェア変数を削除し、レンガなど無用のようにマザーボードの原因
Suiciドーガ

5
@SuiciDoga:ソース、またはさらなる説明?マザーボードのファームウェアはHDDに保存しないでください。そうしないと、ドライブを引っ張ると失われます。
タルカ

15
@Tarka:/ sys / firmware / efi / efivars /がマウントされ、再帰的に削除するとこれらの変数が削除される場合があります。本当にシステムを破壊するべきではありませんが、そうするかもしれません。参照してくださいthenextweb.com/insider/2016/02/01/...
シアン

4
@TarkaはHDDに保存されておらず、ドライブをヤンクしても影響はありません。ただし、まだ理解していない理由により、実際にアクセスできるようにマウントされています/
テルドン

20
ドライブを空にする正しい方法は、パーティションを再フォーマットすることです(または、パーティション全体を再パーティションします)。すべてのファイルシステムがハードディスクであるとは限らないため、使用rm -rf /すると、たとえば誰かのNFS / CIFS / SSHFSマウントでリモートマシンをブランクにすることができます。
Score_Under

12

の存在 --no-preserve-rootスイッチ追加の機能を追加することではなく、機能の非常に健全な削減を無効にすることです。この切り替えは、コンピューターが指示されたとおりに実行する必要があり、必要なアクションを表現するためにコマンドを使用できるようにするという哲学に基づいている可能性があります。このスイッチはUEFIより前のバージョンであり、私の経験に基づいて、今では時代遅れだと言います。

現代の実践では、このスイッチrmを使用しない場合、コマンドは初期化されていない変数または漂遊スペースを使用するときに、ルートディレクトリが誤って削除されるのを防ぎます。

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

楽しい脚注:保護はその意図ではありませんでした。Sun Microsystemsのブログによると、/ディレクトリを削除すると、現在の作業ディレクトリが暗黙的に削除されます。これは、...ます。これとディレクトリます。これが、彼らの標準化委員会がこの特別な例外を許可した理由であり、事故を防ぐためではありません。この変更は、Solaris 10ビルド36で初めて導入されました。

http://archive.is/5lmc9


リンクをありがとう!変更の理由は何かと疑問に思っていたので、歴史的なtidビットが引用されることを望んでいました。
キャメロン

興味深い追加情報-ありがとう
マーク

1

おそらく、これは元のaskerが望む答えではありませんが、ルートディレクトリからすべてのファイルを再帰的に削除する必要があるユースケースがあります。これはrmコマンドによるものではありませんが、(組み込みでない)Linuxシステムのブート中のswitch_root(8)プロセスの一部です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.