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

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

Я удалил критическую символическую ссылку - 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 и связать файл там.

Связанный контент