クリティカルシンボリックリンクを削除しました-libc.so.6
。指しているファイルは持っていますが、ln
やwget
などの基本的なコマンドは、リンクが見つからないため機能しなくなります。ただし、echo
または他のBashビルトインは機能します。
このシンボリックリンクを再作成する方法を探しています。
ldconfigを使用すると、シンボリックリンクが再作成されます。
# rm /lib/libc.so.6
rm: remove symbolic link `/lib/libc.so.6'? y
# ls -l /lib/libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file:
# ldconfig
# ls -l /lib/libc*
[skip]
lrwxrwxrwx. 1 root root 12 May 11 07:59 /lib/libc.so.6 -> libc-2.12.so
ご覧のとおり、テストしました。
CentOS 6には通常、静的にリンクされたUnixツールのセットである busybox
が/sbin
にインストールされています。次のように実行できます。
/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6
LD_PRELOADを設定して、関連するライブラリをプリロードします。私はそれをlibpthreadで試しましたが、うまくいくようです:
root@spirit:~# mv /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0-bak
root@spirit:~# chattr
chattr: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
root@spirit:~# LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0-bak chattr
Usage: chattr [-RVf] [-+=AaCcDdeijsSu] [-v version] files...
sln
はまさにその目的を果たします。重要なシンボリックリンクを壊したために通常のlnを使用できない場合にシンボリックリンクを修正します。 manページを引用するには:
説明
The sln program creates symbolic links. Unlike the ln(1) program, it is statically linked. This means that if for some reason the dynamic linker is not working, sln can be used to make symbolic links to dynamic libraries.
LD_LIBRARY_PATH
変数は、実際のディレクトリを含みますlibc.so.6
は:
export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"
また、ldconfig
を実行してリンクを再作成します。これでコマンドが機能するようになり、ln
コマンドを使用してシステムを修正できるようになります。
別の方法は、LiveCDを介して起動し、そこにファイルをリンクすることです。