「Linux」で実行してはいけない危険なコマンド5選
「UNIX」(「Linux」の祖先)の開発者であるTerry Lambert氏はかつて、「ユーザーが自分の足を撃つのを止めるのは、UNIXの仕事ではない。ユーザーがそうすることを選択した場合に、最も効率的な方法で弾丸を足に命中させるのがUNIXの仕事だ」と述べた。 その発言は、LinuxとUNIXの仕組みを正確に言い表している。 「GNOME」や「KDE」「Cinnamon」などのデスクトップでグラフィカルなLinuxアプリケーションを使用している人は、このような問題について心配しなくてもよい。これらのデスクトップには、安全ベルトとショルダーストラップが付属しているからだ。グラフィカルユーザーインターフェース(GUI)からLinuxマシンを破壊するのは、極めて大変な作業になるだろう。 ただし、頻繁にシェルコマンドを使用したり、シェルスクリプトを作成したりするLinux管理者やパワーユーザーは、間違ったコマンドを間違ったタイミングで使用したことが原因で、コンピューターの復旧に忙殺される可能性もある。 読者の皆さんは、本記事で紹介するコマンドを自宅やオフィス、実稼働システムで絶対に使用しないように注意してほしい。 1. 重要なコマンドである「rm -rf /」 これは、すべてのLinux管理者が知っている(または、最低でも知っておくべき)コマンドだ。 「rm」は単体でも非常に便利で、頑固なファイルも削除できる。ただし、「-r」(すべてのサブディレクトリーの再帰的な削除を強制する)および「-f」(読み取り専用ファイルを確認なしで強制的に削除する)の2つのオプションと組み合わせると、トラブルを招くことになる。 それを「/」(ルートディレクトリー)に対して実行すると、ドライブ全体のデータがすべて消去される。 これは、システム管理者のミスに関するジョークのオチとして使われるが、実際に起きてしまうこともある。あるユーザーは次のように告白している。「私がこれまでに犯した最悪のミスの1つは、rm -r /this/is/my/folder/[ACCIDENTAL_SPACE]*と入力しているときに誤ってスペースバーを押してしまったことだ。信じられないことに、『Enter』キーを押したときでさえ、そのことに気づいていなかった」 このケースでは、「*」(ワイルドカード)を使用したため、そのディレクトリーにあるすべてのものが削除された。もうファイルは1つも残っていなかった。シェルには、このミスを挽回するゴミ箱はない。 最近のほとんどのシステムでは、このミスを防ぐために、大きな文字で警告が表示される。しかし、忙しくキーボードをたたいているときや、ほかのことに気を取られたときに、システムを完全に消去するコマンドを誤って入力してしまうこともある。筆者もそのようなミスを実際に経験し、テープからシステム全体を復元することを余儀なくされたことがある(ご存じない方もいるかもしれないが、これは絶対にやりたくない作業だ)。 2. 「dd」はdisk destroyer(ディスクを破壊するコマンド)の略である これは冗談だが、事実でもおかしくないように思える。ddを使えば、コンピューター上のほぼすべてのもののデジタルコピーを作成できる。適切に使用すれば、強力かつ便利で高速だ。しかし、使い方を誤ると、ファイルシステムを一瞬で破壊してしまう可能性がある。 筆者が聞いた限りでは、ddがドライブやファイルに大損害を与えた事例はrmよりもはるかに多い。これは、ddが独自のコマンド構文を持っているためだ。指の記憶が原因で、間違ったオプションを入力すると、ファイルシステムに大きな損害を与えてしまう可能性がある。実際、Open Source Initiativeの共同創設者でハッカーのEric S. Raymond氏は、典型的なUNIX/Linuxコマンド構文よりもIBM JCLによく似ているddのコマンド構文について、「明らかないたずら」だったのではないかと推測している。 残念ながら、たとえ冗談だとしても、ずっと存続するのは悪い冗談だ。例として、以下のコマンドを見てみよう。 dd if=/dev/zero of=/dev/hda このコマンドは、無限のゼロを出力する特殊なファイルからデータを取得して、ハードドライブ全体に書き込む。 ばかげているように聞こえるかもしれないが、/dev/zeroには実際に用途がある。例えば、パーティション内の未使用の領域をゼロで埋めるのに使うことが可能だ。これにより、パーティションを転送したり、バックアップしたりする必要がある場合に、パーティションイメージを大幅に小さくできる。 書き込むデータはゼロでなくても構わない。ddはさまざまな面白い方法で、ドライブ上の良いデータを悪いデータに置き換える。このコマンドは、役に立つこともあるが、腕時計をハンマーで修理しようとするようなものだ。迅速で効率的だが、破壊的でもある。 ソリッドステートドライブ(SSD)のデータを消去したい場合は、より現代的なコマンドがある。「blkdiscard」コマンドだ。このコマンドを使えば、デバイスのセクターとドライブ上のすべてのデータを破棄できる。混乱を引き起こすのは、50年前から存在するddのような古いコマンドだけではない。