スキップしてメイン コンテンツに移動

root ユーザで rm -rf / してみた

Linux OS環境にて、絶対実行してはいけないけど、一度でいいからしてみたい。
rm -rf / を実行してみた。

rm -rf とは…
rm とは removeの略で、取り除く、除去、削除といった意味。ここではファイルを削除するコマンドとなる。

-rf とは、rm コマンドのオプションで、 -r が Recursive の頭文字で「再帰的に」を表す。この場合、再帰的にファイル(とディレクトリ)を削除する。

-f は Force の頭文字で、「強制的に」を表す。通常はファイルを消す際に、消していい?と確認されるが、このオプションを付けると有無をいわず削除を行う。

最後の / は削除の対象となるパス。 / はUnixにシステムにおけるルートパス。Windowsでいう C:\ を表すのと同じようなもの。

つまり、このコマンドの指す意味は、 / (ルートパス)以下の全てのファイルとディレクトリを強制的に削除するという恐ろしいコマンド。

通常は、一般ユーザで実行しても、ファイルの所有権限などの制限により、システム的に必要なファイルが消えることがないように設計、設定されているが、今回はUnixシステム上最高特権となる root (Windowsで言うとAdministrator相当)ユーザでこれを実行してみる。





まずはOSのインストールから。

今回は CentOS 5.3 を選んでみました。理由は手元にあって手っ取り早かったからという意外に特にないです。

さくっとインストールしていきます。

どうせ全部消えるのでパッケージも何もいりません。

あとは5分もすればこの通り。おめでとうございます。削除の準備が完了しました。

いったん再起動して…

OSが立ち上がります。

ついにログイン画面が現れました。
さて、ここから root でログインして…

…の前に、スナップショット(復元ポイント)を作成しておきます。
そう、これVM(仮想環境)です。実環境ではやりませんよ。入れなおしたりするの面倒くさいので。

今回はVirtualBoxを使用しました。
これでスナップショットの作成完了。

改めて root でログイン。
次いで遂に rm -rf / 実行の時…!!

Go, Enter!!
押した直後は画面上では特に反応はありません。
ふふふ…全てがどんどん消えていってるんだな。

しばらくするとこんな画面が…
マウントポイントとか/proc の中とか、ファイルシステム的になってるシステムファイルたちは root の権限を持ってしても削除できないので、
エラーになってます。

しばらくすると処理が完了します。消せるものは一通り消したということでしょうか。

Linuxではコマンドも(実行)ファイルです。コマンドは消すことが出来ます。
ls …コマンドが見つからず実行できない。
ps …コマンドが見つからず実行できない。
cd …実行でき…た!

あれ、っと思い、[TAB]キーを押してみる。(bashによる入力補完機能によるもの)
いくつかのコマンドが出てきました。


[root@localhost ~]# 
:         caller     echo      for       local      set       ulimit
!         case       elif      function  logout     shift     umask
./        cd         else      getopts   ls         shopt     unalias
[         command    enable    hash      mv         source    unset
[[        compgen    esac      help      popd       suspend   until
]]        complete   eval      history   printf     test      wait
{         continue   exec      if        pushd      then      which
}         cp         exit      in        pwd        time      while
alias     declare    export    jobs      read       times
bg        dirs       false     kill      readonly   trap
bind      disown     fc        l.        return     true
break     do         fg        let       rm         type
builtin   done       fi        ll        select     typeset

とりあえず、これらは使えるようです…(でも ls 使えなかったよなぁ)


まぁ、やることは出来たのでシャットダウンしよう…


shutdown コマンドも reboot コマンドもなくなってしまいました。
exit コマンドでログアウトしたらなにやらメッセージが出てきました。
そして以後キー入力を受け付けなくなり、なにも反応しなくなりました。

仕方ないのでリセットボタンで強制再起動…!


BIOSをロードし終わった直後、すぐにこの画面が登場しました。
GRUBです。GRUBはGRand Unified Bootloaderの略で、GNUプロジェクトによって開発されたブートローダ、つまりOSの起動を行うプログラム。
これが起動したと言うことは、
ブートローダがOSを起動できない → OSがない(or 壊れた) → OS消えました\(^o^)/

というわけで、 rm -rf / とかやるとすべて消え去ってとんでもないことになります。
なので実運用においては間違っても実行しないように。
よい子はマネしちゃダメだよ☆


2009年8月30日追記
rm -rf / 実行時の動画

2016年3月30日追記
リテイクしYouTubeにアップロードしました。

コメント

  1. やったらそうなるのか
    勉強になりました。

    返信削除

コメントを投稿

このブログの人気の投稿

さくらのクラウドでマストドンのインスタンスをサブドメインで作る

タイトルに「の」と「で」が多すぎますが気にせずいきますこんばんは。

さくらのクラウドで、いま話題のMastodon(マストドン)のインスタンスを作成してみました。
Mastodonは普通にソースを展開して自分で普通にセットアップする方法や、Docker-composeを用いた方法などがありますが、さくらのクラウドでは、スタートアップスクリプトを用いて、管理画面から必要な項目を入力、スクリプトを選択するだけで簡単に立ち上げることができるようになっています。

さくらのクラウドのMastodonスタートアップスクリプト 実は少し前にこの方法で立ち上げたりもしていたのですが、本当に簡単でサクサクできてもの自体は30分程度で完了します。
管理者ユーザーを作成するには、通常のユーザー登録と同じ手順で画面からユーザーを作成後、一度コンソールからログインして、mastodonユーザーで下記のコマンドを実行する必要があります。

# su - mastodon % cd ~/live % bundle install % RAILS_ENV=production bundle exec rails mastodon:confirm_email USER_EMAIL=登録時のメールアドレス % RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=作成したユーザーID mastodon:confirm_email でメール受信確認をスキップして承認済みに、mastodon:make_admin で指定したユーザーを管理者に設定します。

これでインスタンス管理者として様々な操作をGUI上から行えます。

同類の記事は恐らく既にたくさんあるので、詳しい作り方に関してはそちらを参考にしてください。

気になるところが 上記のさくらのクラウドニュース内で記載されているMastodonスタートアップスクリプトでの構築方法に関する記事内で、一つ気になるところがありました。
それが
※サブドメイン(例:mstdn.example.com)には対応していません。 という記述部分です。

つまり、このスタートアップスクリプトを利用した場合、サービス専用のドメインを用意する必要があります。
既存のドメインをなるべく利用したい場合には向…

ブログを移転しました(WordpressからBloggerへ)

現在のこのブログを作ってから、長年自前サーバ(VPS)上で動かしていたWordpressで公開し続けてきました。
Wordpressは自由度もあり、カスタマイズ性もあり、また自前での場合はドメインもサーバ設定カスタマイズすら自由で、自分の行いたいようにいじることができました。

しかし、サーバ側のスペックや他の開発サービスとの兼ね合いなどもあり、人が滅多に来ないブログとは言えブログ自体の重さを感じておりました。
そのため、ここ最近はブログ用に別途VPSを借りて高速Wordpressとして売り出されているKUSANAGIを利用して公開したりもしていましたが、所詮趣味ブログであり、特に収益を上げるために書いたり(所為アフィリエイト)と言うことをしているわけでもなく、記事も頻繁に書くほどではなかったので、コスパの問題も出てきました。

そこで以前から計画していたBloggerへの移行を行い、ようやく公開作業が完了出来ました。使いやすさなどを考えると、はてなブログなどを利用するのが恐らく賢明だと思いますが、あれこれしようとすると有料プランで運用する必要があり、どうするかな、というところで悩みました。(VPSに比べれば月額は明らかに安いですが)

Bloggerは日本ではあまりユーザーが多くないように思えますが、ブログホストサービスとしての歴史は長く、またGoogleに買収されてからも安定して稼働しているので、こちらに移行しようと考えました。

Wordpressからの移行はそれほど大変ではないようで、それなりに大変でもありました。

記事やコメントの移行については簡単で、Wordpressの管理画面から「設定」→「エクスポート」で出力されるXMLを保存し、http://wp2blogger.info/ などのサイトへアップロードすることで、Blogger用XMLフォーマットに変換してくれるので、それをBloggerに取り込めば大体終了です。

問題は記事内で使用している画像です。外部サイトから読み込んでいる場合であればそのままでも行けるかも知れないですが、独自にアップロードしていた画像はすべてBloggerへアップロードし直す必要がありました。
またアップロード後も、元のファイル名でのURLにはならず、それぞれGoogleドライブ内で割り当てられているファイル名に変換されるので、一…

PHPで相対パスから絶対URL(URI)を作成する

HTMLページをパースしてURLを取り出す処理を書いていたのですが、ページ内のリンクなどが全部絶対URLで記述されていれば非常に楽なのですが、現実としてそうでもなく、ページによっては相対パスで書かれていたりして、正規表現で偏にリンクからURLを抜き出すだけではうまくできませんでした。

そこで少しググってみたら

PHPで相対パスから絶対URL(URI)を作成する|PHPプログラムメモ|プログラムメモ

という記事を発見!おぉ、これは便利!
と思って使わせてもらおうと思ったのですが、いくつかテストしてみて、相対パス処理で不備があるなーと思ったところがあったのでちょっと改良させてもらいました。

37~38行目は正直いらない気がしたのですが、 PHP 5.3 のCLIでWindows上でテストした際に、なぜか \/ (アルファベットのVではなく、\ と / ) で出力されたのが気になったので、無駄かもしれないけどあえて記述。
あと $parse の初期化もここまでする必要ないけど、念のためNotice対策を…w

相対パスから絶対URLする関数

< ?php
/**
* 相対パスから絶対URLを返します
*
* @param string $base ベースURL(絶対URL)
* @param string $relational_path 相対パス
* @return string 相対パスの絶対URL
* @link http://blog.anoncom.net/2010/01/08/295.html
* @link http://logic.stepserver.jp/data/archives/501.html
*/
function createUri( $base = '', $relational_path = '' ) {

$parse = array (
'scheme' => null,
'user' => null,
'pass' => null,
'host' => null,
'port' => null,
'path' => null,
'query' => …