Como criar um link simbólico sem usar ln?

Como criar um link simbólico sem usar ln?

Excluí um link simbólico crítico - libc.so.6. Eu tenho o arquivo para o qual ele deveria apontar, mas os comandos básicos como lnou wgetnão funcionarão mais devido à falta do link. No entanto, echoou outros recursos internos do Bash funcionam.

Estou procurando uma maneira de recriar esse link simbólico.

Responder1

você pode usar ldconfig, ele recria o link simbólico:

# 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

acabei de testar, como você pode ver.

Responder2

CentOS 6 geralmente vem combusybox, um conjunto de ferramentas Unix vinculado estaticamente, instalado no /sbin. Você pode executá-lo assim:

/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6

Responder3

Defina LD_PRELOAD para pré-carregar a biblioteca relevante. Eu tentei com libpthread e parece funcionar:

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

Responder4

Você pode definir LD_LIBRARY_PATHa variável para incluir o diretório onde real libc.so.6está:

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

Além disso, execute ldconfigpara recriar os links. Isso deve fazer com que os comandos funcionem para que você possa usá ln-los para consertar seu sistema.

Outra maneira seria inicializar via LiveCD e vincular o arquivo lá.

informação relacionada