Я удалил критическую символическую ссылку - 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 обычно поставляется с busybox
, статически связанный набор инструментов Unix, установленных в /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, потому что вы нарушили важную символическую ссылку. Процитирую его страницу руководства:
ОПИСАНИЕ
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 и связать файл там.
Используйте scp или sftp, чтобы скопировать статически связанную версию ln. Убедитесь, что это исполняемый файл. Затем используйте его, чтобы исправить файл.