作成日:2023年7月22日
自分の中で最凶コマンドと名高いrm -rf /*を実行するとどうなるのか、実際に試してみました。
rm -rf /*とは
ざっくりと説明すると「OSのrootディレクトリ配下を再帰的かつ強制的に削除する」コマンドです。
今回の環境
proxmox内に作成したUbuntuのLXCで実行します。
OS:Ubuntu 22.04 LTS (GNU/Linux 5.15.83-1-pve x86_64)
コマンド実行前のディレクトリ構成
treeコマンドでデフォルトのディレクトリ構成を確認すると、このようになっていました。22個もあるんですね。

*を付けずに実行してみる
「危ないから本当にやるなら--no-preserve-rootを付けなね!」と親切に警告を表示してくれます。確認しましたが、ディレクトリは何も消えていませんでした。

実行してみる
次は*を付けてrm -rf /*を実行してみました。すると、以下のようにrm: cannot remoevという行が大量に表示されました。

暫くして処理が終わり、
もしかして思ったよりディレクトリは消えてないのでは?と思ったのでtreeで確認してみます。

treeが消えてました。
じゃあ普通にlsで見てみるかぁ~と思い実行してみると、
lsも消えてました。
それもそのはずで、bashの組み込みコマンド(buildin commands)以外は全て消えています。組み込みコマンドの一覧はhelpで確認することが出来ます。
組み込みコマンドだけでなんとか出来ないのかと思いましたが、何も思い浮かばなかったので、大人しくproxmox側から覗いてみたいと思います(オンプレでベアメタルならbootableデバイスを挿してboot deviceを変更する、みたいな復旧手順になるかなぁ~と妄想したりしました)。
Proxmox側から見に行ってみる
LXCは/var/lib/lxc/{container_id}という場所にあります(chatGPTに教えてもらった)。中にはこのようなものが入っています。
apparmor config rootfs rules.seccomp
このうち、今回破壊したのはrootfs(root file system)です。

中身は見事に空になっていました。実行時にcannot removeと表示されていた/sysもありません。
結局消えるんか....
コンテナのメタデータだけが残っているような状態なのかなぁと思いました。
感想
こうなってしまえば、後はrootfsを再度移植するぐらいしか手だて無くない?という気持ちです。そもそもLXCはホストのカーネルを用いながら、cgroupとnamespaceで分離しているような環境なので、ファイルシステムを消してしまえばそらそうなるかという気もします。
次回は、仮想化してない環境で試してみようと思います。
追記
使い終わったLXCが削除できないことに後から気付き、そちらも別記事にしました。
参考
