「rm -rf /」コマンドでどこまで取得できますか?


200

あなたが走っrm -rf /た場合、システムが実際にどこまで到達するかとよく疑問に思っていました。OSが自分自身を消去できるとは思わない(?)

ボーナス質問:コマンドが実行された後、rm自分自身を削除しますか?

更新: VirtualBoxを使用して、いくつかの主要なUNIXディストリビューションでこれをテストしました。答えは何が起こるかを正確に説明しています。正しいパラメーターを指定すると、rmはディスク上のすべての物理ビットのデータを削除します。しかし、GNU以外のバージョンのrmを使用すると、いくつかの問題が発生しました。たとえば、BusyBoxには独自のバージョンがあり、可能な限り削除することはできません。

この質問は今週のスーパーユーザー質問でした。詳細については
、2011年7月7日のブログエントリを参照するか、独自の今週の質問を送信してください


8
この質問をしたのは面白いです。別のフォーラムで別のrm -fの質問に答えていたところ、しばらく前に読んだ記事を思い出し始めました。幸いなことに、私はこのような時代のためにそれを保存:古典的なUnixのホラーストーリーそれは行くよどこまで見るのは興味深いという事実のほかに...私はそれが非常によく書かれた記事だと思うと、一般的に良い読み物です!
akseli

3
私はsudo rm -rf /tinycore / microcore linuxで試しましたが、OSはいくつかのディレクトリ(/ sysなど)が削除されないように保護しているようです。
n0pe

47
rm -f /bin/rm一度試しました。残念ながら、うまくいきましたrm。GNUcoreutilsから適切なバージョンを取得するのに1時間かかりました。
リス

17
秒を待って、私は...しようとします
マルタインCourteaux

38
私はいつもアップルストアでこれを行います
eggie5

回答:


188

rmGNU coreutils を使用している場合(通常のLinuxディストリビューションである場合はほとんど)、rm -rf /組み込みの保護によって拒否されます(マンページおよびウィキペディアによると、それを試していません)。

この保護はで上書きできます--no-preserve-rootrmすべてのファイルを削除しようとした後、停止することなく、可能な限りすべてを削除します。もちろん、/procやなどの仮想ファイルシステムは削除されません/sysが、それは無関係です。ディスク上のすべてを削除します。

コマンドが終了すると、OSを含む空のディスクが消去されます。カーネルと現在のプロセスは引き続きメモリから実行されますが、多くのプロセスはファイルへのアクセスに失敗するため死にます。OSは次回の起動に失敗します。


67
まさに私が探していたもの。今、この力を使って世界を支配しよう。
n0pe

34
+1は、特に--no-preserve-root言及されていないためです。
マテイG.

22
@MaxMackie、ハッカーがこれをすぐに見つけて、ユーザーにとって最も有用ではないことを発見したことは注目に値します。キャッシュゲインに使用される可能性のあるデータを破壊し、ハッカーによるマシンのさらなる悪用を防ぎます。昆虫のいる猫のように、あなたはそれを殺したくはありません、あなたはそれが楽しいので、しばらくの間それと遊びたいだけです。
zzzzBov

5
OPの他の質問に答えるために、yes rmはそれ自体を削除します。実行中のインスタンスがある場合でも、実行可能ファイルを変更または削除することは完全に可能です。これも実行され続け、変更による影響を受けません。
thomasrutter

3
/で "chmod -R user:user *"に言及したいと思います。これは再帰的でコストのかかる間違いでもあるためです。一度やったのですが、中途半端に/ homeを途中で抜けてしまいました。/ bin / boot / etc / devが所有されていました。幸運にも、私は手動で数時間を費やし、参照システムから所有権をリセットしている間、サーバーは稼働し続けました。ただし、その後suまたはsudoを使用できるユーザーはいません。最終的に、/ bin / suのsetuidビットが設定されなくなったことを発見しました。将来に注意してください:/ bin / suをchownすると、setuidビットがリセットされます!
アンディリーロビンソン


22

VMをセットアップして、お試しください。

それはかなり遠くまで行きます... guiを使用している場合、物事がより顕著に劣化することに気付くのは楽しいかもしれません。(メニューのアイコンが読み込みを停止するなど)

手放すと、OSはほとんど回復できなくなりますが、データを簡単に取り戻すことができるかもしれません。

いずれにせよ、OSの再インストールが必要になります。


7
VMで試すことすら考えていませんでした。今すぐお試しください!うーん、これは楽しいです。
n0pe

40
誤っては、ホストシステムのターミナルにコマンドを書き込み
slhck

1
投稿した記事をご覧ください。「古典的なUnixホラーストーリー!」
akseli

1
私は今仕事をしていますが、人気のあるディストリビューション(ubuntu / slack / suse / fedora)のフルインストールを行う時間はありません。他の誰かがVMディスクファイルのクローンを作成して、私たちのために試すことができれば、それは素晴らしいでしょう。
n0pe

2
アマゾンEC2で、...すでにLinuxがインストールされている自分のAMIさんの1を起動し、火気に近づけないために迅速でなければなりません
デヴィッド・D C Eフレイタス

11

さて、http//bellard.org/jslinux/で試してみると:

RM:デバイスをビジーリソース:「/ PTS / devの」削除することはできません
RMを「/ devの」削除することはできません:ディレクトリでない空の
RMは:「/ procの/スワップ」削除することはできません:操作許可されていない
RMを:することができます「/ proc / kallsyms」を削除しない:操作は許可されていません
rm:「/ proc / dma」を削除できません:操作は許可されていません

SNIP 881エントリー

rm: '/ proc / 149 / oom_adj'を
削除できません:許可が拒否されましたrm: '/ proc / 149'を
削除できませんrm: '/ proc'を削除できませんrm:デバイスまたはリソースがビジー状態です
rm: 「/ tmp」を削除できない:デバイスまたはリソースがビジー
rm:「/」を削除できない:デバイスまたはリソースがビジー


1
ええ、私はそれらのエラー/警告も受け取ります。これはあなたが思う標準ですか?
n0pe

5
/ proc、/ sys、場合によっては/ dev、およびマウントポイントはオペレーティングシステムのプロパティであり、削除できません。
pjc50

1
@ pcj50と同様に、これらは文字通りハードディスク上のファイルではないため、「削除」することは意味がありません。
CarlF

7

私は、これは上の上に噛んされて思い出すalt.sysadmin.recoveryのようなものがなかったとき、昔の時代に戻って/proc、そして/dev珍しいiノードの束のためのエントリを含む普通のディレクトリでした...

...しかし、Unixの一部のバリアント(私の記憶はHP-UXですが、それはまったく間違っている可能性があります)では、実行中のプログラムの最後のディレクトリエントリを削除できませんでした。(共有ライブラリ?それらは何ですか?)

そのようなシステムでは、場合には、メンテナンスモードで最大1開始(ないそうであっても、何も実行しませんでしたが、自分の殻を、initおよび二次のファイルシステムがマウントされなかった)となかったexec /bin/rm -rf /、あなたは完全に空のルートファイルシステムに残されることになる除いている/bin/bin/rm希望生き残ります。

恐ろしい悪魔修道院の住人は、これが適切で適切であると考えました。


4

rm -rf / POSIX標準に違反することが示唆されているため、最近の実装では許可されません。

rm -rf /Oracleのブログに」保護

とにかく、最終的に仕様が変更され、Solaris 10には(ビルド36以降)/ usr / bin / rm(/ binはSolarisの/ usr / binへのシンボリックリンク)と/ usr /のバージョンがありますこのように動作するxpg4 / bin / rm:

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

2
「再帰的に「/」を削除しようとすると、最終的に「..」と「。」を削除しようとし、rmがこれをヒューリスティックに事前に決定できるようになることを指摘します。 ! "-えー、それはディレクトリを削除することを禁じていませんか?実際の仕様では..および。実際のコマンドライン引数で、それはあなたが、「最終的に削除しようとすると、」何について何も言っていません
Random832

1
ディレクトリを削除できないのはなぜですか?ここで懸念されるのはルートディレクトリのみで、これを削除すると「。」が削除されることを意味します および「..」、現在のディレクトリが何であれ。標準的な解釈では常識は禁じられていません。
jlliagre

1
その議論の行は純粋な天才です。
ネイトCK

標準では、引数に文字列 "。"がある場合、 rmの続行を許可しないことが指定されています。またはベース名コンポーネントとして「..」。にいなくて/foo/..も削除できません/foo。現在のディレクトリ()や現在のディレクトリの親を削除できないことを指定するものではありませrm -r `pwd`
Random832

2
確かに、私は声明を誤解しており、あなたは正しい。うまくいけば、標準的な人たちはよりスマートな行動を標準に準拠していると受け入れました。ファイルシステムのすべてではない場合に大きな部分を削除すると、OSはすぐに非標準になります。
jlliagre

3

他の人が私が見たことがなかった1つのポイント:現在開いているファイル(例:rm自体)は、たとえ削除されても、閉じられるまでドライブから実際には消えません。


メモリにロードされているので、そうですよね?
n0pe

それが仮定しても安全かどうかはわかりません。カーネルは削除されたファイルをメモリにロードしてすぐにディスクから削除し、ファイルが開くまで(たとえばrmが実行されるまで)このメモリ内コピーを保持することができます。
アンブロズビズジャク

私は推測していません。プログラムが実行されている場合、それを削除しても、少なくともLinuxボックスでは削除されません。(
覚えておい

4
rm fsから自分自身削除します- プログラムファイル
ウォーレン

4
@MaxMackie:メモリに読み込まれているためではなく、開いているファイル参照がハードリンクと同じパワーを持っているためです(つまり、ファイルに少なくとも1つのハードリンクがある場合、ディスクから削除されません)。
ライライアン

1

ターミナルでrootとしてログに記録された(サーバーで私を怒らせた)一度試してみたため、ほとんどすべてが失われます。消去されない唯一のものは、OSに不可欠なプロセスのみです。


12
「[消去されない] OSに不可欠なプロセスのみ」-心配しないでください。Windowsのとは異なり、Linuxは喜んで、ファイルがOS-重要であったとしても、何も消去されます、使用中。/boot/sbin/etc/bin/vmlinuz?バム、消えた。それらを使わずにブートするように頑張ってください。実際、削除が完了したら、何でもしてください。
Piskvor

削除されていないファイルがあったことを思い出したら、Linuxを4時間以上実行しました。しかし、それでも、chmod 777 / * -fRを実行するなど、何が起こるかを知っておくとよいでしょう。
Anarko_Bizounours

3
"chmod 777 / * -fR"-これにより、システムは非常に安全になりますが、非常にユーザーフレンドリーです。
バートヴァンヒューケロム

1
@BartvanHeukelom、一部のツールはクイックセルフテストを実行するか、システムによって適切な所有権とアクセス許可がテストされ、構成が正しくない場合は動作を拒否します。
キラーミスト

1
chmod -fR 777 /setuidおよびsetgidビットをオフにするため、有害です。
Gマン

1

どこまで入手できるかは、基本的には特定のUnix / Linuxディストリビューションに依存します。

しかし、あなたの基本的な質問に答えるために、はい- rmコマンドは他の標準コマンド/binや他のフォルダと同様に削除されます。

以下は、VMを使用してLinux Ubuntu 15.04で実行した簡単なテストです。

  1. 以下を介して仮想マシンを初期化しますvagrant

    vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
    
  2. 次に、標準の方法ですべてのファイルを削除しようとすると、次のことができません。

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -fr /
    rm: it is dangerous to operate recursively on '/'
    rm: use --no-preserve-root to override this failsafe
    
  3. 試してみましょう--no-preserve-root。仮想マシンにログインしていることを常に再確認し(そのためvagrant@vagrant-ubuntu-vivid-64:~$)、実行します(自宅で試さないでください):

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -vfr --no-preserve-root /
    removed directory: '/lost+found'
    removed directory: '/opt'
    removed '/bin/nc'
    removed '/bin/less'
    removed '/bin/wdctl'
    removed '/bin/nano'
    ...
    removed '/bin/rmdir'
    removed '/bin/sh'
    removed '/bin/rm'
    ...
    removed directory: '/bin'
    removed directory: '/usr/games'
    removed '/usr/bin/byobu-launcher-install'
    removed '/usr/bin/ipcmk'
    removed '/usr/bin/sum'
    removed directory: '/usr/bin'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9.2'
    removed '/usr/lib/gcc/x86_64-linux-gnu/5.0.1'
    removed directory: '/usr/lib/gcc/x86_64-linux-gnu/5'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libquadmath.so'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libgomp.so'
    ...
    removed directory: '/run/initramfs'
    removed directory: '/media'
    rm: cannot remove '/proc/fb': Operation not permitted
    rm: cannot remove '/proc/fs/ext4/sda1/options': Operation not permitted
    ...
    removed '/vmlinuz'
    removed '/boot/config-3.19.0-23-generic'
    removed '/boot/grub/grubenv'
    ...
    removed directory: '/boot'
    removed '/lib64/ld-linux-x86-64.so.2'
    rm: cannot remove '/dev/hugepages': Device or resource busy
    rm: cannot remove '/dev/mqueue': Device or resource busy
    rm: cannot remove '/dev/shm': Device or resource busy
    removed '/dev/vcsa7'
    ...
    removed '/dev/mem'
    removed '/dev/rfkill'
    removed '/dev/vga_arbiter'
    ...
    rm: cannot remove '/sys/fs/ecryptfs/version': Operation not permitted
    removed directory: '/etc'
    removed directory: '/mnt'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_provision'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_set_name'
    removed '/vagrant/.vagrant/machines/default/virtualbox/creator_uid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/id'
    removed '/vagrant/.vagrant/machines/default/virtualbox/index_uuid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/private_key'
    removed '/vagrant/.vagrant/machines/default/virtualbox/synced_folders'
    removed directory: '/vagrant/.vagrant/machines/default/virtualbox'
    removed directory: '/vagrant/.vagrant/machines/default'
    removed directory: '/vagrant/.vagrant/machines'
    removed directory: '/vagrant/.vagrant'
    removed '/vagrant/Vagrantfile'
    rm: cannot remove '/vagrant': Device or resource busy
    

    その後、何も起こらなかったようにシェルプロンプトに戻りますが、いくつかの組み込みおよびを除いてコマンドを実行することはできませんkillので、ジョブを終了してセッションを終了できます:)

    例えば:

    $ rm
    rm: command not found
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    $ which kill
    -bash: /usr/bin/which: No such file or directory
    $ kill -9 $$
    Connection to 127.0.0.1 closed.
    

だから、それはかなり含め、すべて、削除rmlsおよび他のすべてのコマンドを、それでもあなたはログインします。一部のデバイスなど、削除されなかった特別なフォルダーや/dev、通常のディレクトリ/ファイルではないものもありますが、プロセスおよびカーネルデータへのインターフェイスを提供する疑似ファイルシステムです。/proc/sys

VagrantまたはLinuxがない場合は、JavaScript Linux x86エミュレーターで遊ぶことができます

そのような災害から回復する可能性に興味がある場合は、以下を確認してください。

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