
Я удалил критическую символическую ссылку - libc.so.6
. У меня есть файл, на который она должна указывать, но основные команды, такие как ln
или wget
больше не будут работать из-за отсутствия ссылки. Однако echo
или другие встроенные функции Bash работают.
Я ищу способ воссоздать эту символическую ссылку.
решение1
вы можете использовать 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
как видите, только что проверил.
решение2
CentOS 6 обычно поставляется сbusybox
, статически скомпонованный набор инструментов Unix, установленный в /sbin
. Вы можете запустить его так:
/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6
решение3
Установите 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...
решение4
Вы можете задать LD_LIBRARY_PATH
переменную, включающую каталог, в котором libc.so.6
находится real:
export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"
Также выполните ldconfig
для него, чтобы пересоздать ссылки. Это должно заставить команды работать, чтобы вы могли затем использовать ln
команды для исправления вашей системы.
Другой способ — загрузиться с LiveCD и связать файл там.