ルートシェルがまだある場合は、システムを修復する可能性があります。あなたはすべての共通のディレクトリを移動するとしましょう(/bin
、/etc
、/lib
、/sbin
、/usr
-これらは回復困難を作ることができるものです)の下で/oops
。
mv
フルパスを指定しても、コマンドを直接発行することはできません/oops/bin/mv
。それmv
はが動的にリンクされているためです; /lib
ディレクトリを移動したmv
ため、そのコードの一部を構成するライブラリが見つからないため、実行できません。実際には、それよりもさらに悪いことだ:mv
見つけることができない、ダイナミックローダー /lib/ld-linux.so.2
(名前はあなたのアーキテクチャおよびUNIXバリアントによって異なる場合があり、およびディレクトリのような別の名前かもしれません/lib32
か/lib64
)。したがって、/lib
ディレクトリを元に戻すまで、リンカーを明示的に呼び出す必要があり、移動したライブラリへのパスを指定する必要があります。Debian squeeze i386でテストされたコマンドは次のとおりです。
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
他のディストリビューションやアーキテクチャのためにこれを少し調整する必要があるかもしれません。たとえば、x86_64上のCentOSの場合:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
何かを台無しにしたとき/lib
は、静的にリンクされたツールボックスが横になっていると役立ちます。一部のディストリビューション(CentOSについては知りません)はBusyboxの静的にリンクされたコピーを提供します。また、多くのコマンドが組み込まれたスタンドアロンのシェルであるsashもあります。これらのいずれかがある場合、そこから回復を行うことができます。実際にそれらをインストールしていない場合は、手遅れです。
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
ルートシェルはもうないが、まだSSHデーモンがリッスンしていて、sshを介してrootとして直接ログインでき、これらの静的にリンクされたツールボックスの1つがある場合、sshでログインできる可能性があります。あなたが移動した場合には働くことができる/lib
と/bin
、ではなく/etc
。
ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
一部の管理者は、この種の問題のために、静的にリンクされたシェルで代替アカウントをセットアップするか、rootアカウントに静的にリンクされたシェルを使用させます。
ルートシェルがなく、予防策を講じていない場合は、LinuxライブCD / USBから起動する必要があります(ディスクおよびファイルシステムにアクセスできるのに十分な最新のものであればどれでもかまいません)。ファイルを元に戻します。