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

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)には対応していません。 という記述部分です。

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

iPhone7はApple Payでゲーム系ICカードとしても使えるか?

先日発売されたiPhone7をはじめiPhone6以降の機種で、日本でもようやく、Apple Payが使えるようになりました。
iPhone7は長年ユーザーが待ち望んできた防水対応もさることながら、日本向けiPhone7/7 Plusでは、NFCだけでなくFeliCaを搭載し、Apple PayではJR東日本のモバイルSuicaやEdyが使える、というのが今回の注目にもなりました。
Apple Payが始まることで、こちらも日本のユーザーが待ち望んでいたモバイルSuicaをはじめとする、国内の様々な場所で使われている非接触IC系サービスの恩恵を受けられるようになります。



ということは、非接触系ICカードを利用している場所の一つである、ゲームセンター。ここにある数々のゲーム筐体、最近では非接触ICカードリーダーが備え付けられていて、独自の電子マネー機能を持ち合わせたり、カード情報を読み取ってプレイヤーのプレイデータを読み込むのに使用されたりしています。これらは果たしてiPhone7でも使えるのか…。
検証
まず、現在国内で主流の非接触IC系ゲームプレイカード(以下、プレイカード)は下記の種類があります。

e-AMUSEMENT PASS (コナミ)
Aime (セガ)
バナパスポート (バンダイナムコ)
NESiCA (タイトー)
※これ以外にもあるかもしれませんが、自分が主に音ゲーを好んでやるため、音ゲー機種が出ているサービスのみを対象にしています。

これらのサービスに対応する機種でiPhone7のApple Payが使えるか検証してみます。

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' => …