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

Я удалил критическую символическую ссылку - libc.so.6, У меня есть файл, на который он должен указывать, но основные команды, такие как ln или же wget больше не будет работать из-за отсутствия ссылки. Тем не мение, echo или другая встроенная работа Bash.

Я ищу способ воссоздать эту символическую ссылку.

6 ответов

Решение

Вы можете использовать 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

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_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...

Вы можете установить LD_LIBRARY_PATH переменная, чтобы включить каталог, где реальный libc.so.6 является:

 export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"

Кроме того, выполнить ldconfig для этого, чтобы воссоздать ссылки. Это должно заставить команды работать, чтобы вы могли затем использовать ln Команды, чтобы исправить вашу систему.

Другим способом было бы загрузиться через LiveCD и связать там файл.

Используйте scp или sftp, чтобы скопировать статически связанную версию ln. Убедитесь, что это исполняемый файл. Затем используйте его, чтобы исправить файл.

Другие вопросы по тегам