rm -rf /は実行されないのが正しい?


いくつかのUnixプラットフォームではrm -rf /はエラーになり実行されない。これは余計なおせっかいで実行されるべきだと言う人もいるが、最新のPOSIXに従うのなら「実行されない」のが正しい。POSIX.1-2008ではrmについて、「引数がルートディレクトリを指しているなら、標準エラーに診断メッセージを出力して、それ以上何もしてはならない」と定めている。

if an operand resolves to the root directory, rm shall write a diagnostic message to standard error and do nothing more with such operands.

POSIX.1-2004にはこの記述はないので、最新の規格に従ってないrmではrm -rf /が普通に実行される可能性がある。

実装を調べてみると、2003年12月にリリースされたcoreutils 5.1.0以降のrmでは、--no-preserve-rootオプションを付けない限りrm -rf /は実行されない。すべての現役のLinuxディストリビューションではrm -rf /は実行されないと言っていいだろう。FreeBSD 5.5以降やSolaris 10以降でもrm -rf /は実行されない。しかし、それ以外のプラットフォームでは実行されてしまうようだ。

最新の規格としてはrm -rf /は実行されないことになっているけれども、実行されるプラットフォームも多いので当てにしないほうがいいということになる。