概要
Linux でシステムディレクトリを誤って /tmp などに move してしまった場合の対処を示します。想定するシチュエーションと発生する事象を説明し、具体的な対処方法を記します。
シチュエーション
あなたは、root 権限でシステムにログインし、システムディレクトリ(例として /lib)を誤って /tmp などの下に move してしまいました。
このとき以下のような状況に陥ります。
- ありとあらゆるコマンド実行でエラーが発生する
- ls, cd, mv, cpなど基本的なコマンドが実行できない
回復するには、対象ディレクトリを元のパスに move し直すことですが、コマンド実行でエラーが発生するので戻せません。
対処
(1) 環境変数 LD_LIBRARY_PATH に move 先のフルパスを追加する
LD_LIBRARY_PATH はライブラリファイルの実体を管理します。よって、本パスに該当するパスが指定されれば解決。とはいえ、テキスト処理系のコマンドを実行するのに必要なファイルが移動してしまっていると使えません。
(2) ld-linux を実行する
古式ゆかしい対処。
# /tmp/lib/ld-linux.so.2 --library-path /tmp/lib/ /tmp/bin/{実行バイナリ}
(3) busybox を利用する
もっともスマートな方式。標準Unixのコマンド機能を単一のバイナリで実行できる busybox を使います。
# /bin/busybox mv /tmp/lib/ /
補足
本件は、過去に筆者が実際に経験しました。受託開発で納品する本番機で、しかもアプリケーションの総合テスト真っ盛りの中でやらかしました。事の重大さに気づいたのは、深夜にひとりきり。真夏なのにあれほど背筋が凍ったことはありません。解決するまでの2時間は生きた心地がしませんでした。