Назад | Перейти на главную страницу

Как создать символическую ссылку без использования ln?

Я удалил критическую символическую ссылку - 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. Убедитесь, что это исполняемый файл. Затем используйте его, чтобы исправить файл.