ある日、シェルスクリプトでファイルの削除処理を行っていた時のこと。誤ってrm -fr /
というコマンドを実行してしまい、恐怖の瞬間が訪れました。画面上に次々と消えていくファイル名、そして次第に無力化されるコマンドライン。私が経験した、ルートディレクトリからOSを含むすべてのファイルが削除される瞬間の体験をシェアします。そして、そんな事態に至る原因と対策についてもお伝えします。この記事を読んで、あなたも誤操作から身を守りましょう。
実際には、以下の内容が記載されたシェルスクリプトを実行していました。
rm -fr ${path}
しかし、${path}
に値が入っていなかったため、ルートディレクトリからOSを含むすべてのファイルが削除されてしまいました。この事態に至った原因と対策について、以下にまとめます。
原因
- 変数の展開がうまくいかなかった シェルスクリプトでは、変数の展開がうまくいかないと空文字列が代入される場合があります。この例では、
${path}
が空文字列になってしまい、rm -fr /
というコマンドが実行されてしまいました。
対策
変数のチェックを行う
スクリプトの実行前に、変数が正しく設定されているかチェックしましょう。以下のようなコードで、変数が空でないことを確認できます。
if [ -z "${path}" ]; then
echo "変数pathが空です。処理を中止します。"
exit 1
fi
set -uを使用して未定義の変数をエラーとする
スクリプトの冒頭にset -u
を記述することで、未定義の変数が参照された場合にエラーとし、スクリプトを停止させることができます。
#!/bin/bash
set -u
安全なファイル削除を行うためのツールを使用する
rm
コマンドの代わりに、trash-cli
などのツールを使用して、ファイルをゴミ箱に移動する方法もあります。これにより、誤って削除したファイルを復元することができます。
まとめ
シェルスクリプトを使用する際は、注意深く変数の展開やファイル操作を行うことが重要です。私が経験したような事態を避けるために、以下のポイントをおさえておきましょう。
- 変数のチェックや
set -u
を使用して、変数の誤りを防ぐ。 - 危険なファイル操作を行う前に、実行するコマンドを確認する。
- 可能であれば、安全なファイル操作ツールを使用する。
このような対策を講じることで、誤って重要なファイルを削除するリスクを軽減できます。また、バックアップやリカバリプランを用意しておくことも、万が一の事態に備えるために重要です。
最後に、私の体験が皆さんの参考になれば幸いです。シェルスクリプトを扱う際は、十分に注意を払って安全なコードを書くよう心掛けましょう。