Como criar um link simbólico sem usar o ln?

31

Eu deletei um link simbólico crítico - libc.so.6 . Eu tenho o arquivo que ele deve apontar, mas os comandos básicos, como ln ou wget , não funcionam mais devido à falta do link. No entanto, echo ou outros integrantes do Bash funcionam.

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

    
por Sebas 10.05.2014 / 20:05

6 respostas

58

você pode usar o 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

apenas testamos, como você vê.

    
por 11.05.2014 / 08:02
43

O CentOS 6 geralmente vem com busybox , um conjunto de ferramentas Unix vinculadas estaticamente, instalado em% código%. Você pode executá-lo assim:

/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6
    
por 11.05.2014 / 00:30
23

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...
    
por 10.05.2014 / 21:32
21

sln atende exatamente a esse propósito: para consertar links simbólicos quando você não pode usar o ln regular porque você quebrou um link simbólico essencial. Para citar sua página de manual:

DESCRIPTION

  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.
    
por 12.05.2014 / 13:15
8

Você pode definir a variável LD_LIBRARY_PATH para incluir o diretório onde% reallibc.so.6 é:

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

Além disso, execute ldconfig para recriar os links. Isso deve fazer com que os comandos funcionem, para que você possa usar os comandos ln para consertar seu sistema.

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

    
por 10.05.2014 / 20:12
-4

Use scp ou sftp para copiar uma versão do ln estaticamente vinculada. Certifique-se de que é executável. Em seguida, use-o para corrigir o arquivo.

    
por 11.05.2014 / 23:27