Como encontrar o destino final de uma cadeia de links simbólicos?

5

Eu precisava emitir vários comandos para seguir uma cadeia de links simbólicos para o destino final.

Existe um comando que fará isso em uma única etapa?

which updatedb
/usr/bin/updatedb  

ls -l /usr/bin/updatedb  
lrwxrwxrwx 1 root root 26 2010-09-01 16:22 /usr/bin/updatedb -> /etc/alternatives/updatedb  

ls -l /etc/alternatives/updatedb  
lrwxrwxrwx 1 root root 25 2010-09-01 16:21 /etc/alternatives/updatedb -> /usr/bin/updatedb.mlocate  

ls -l /usr/bin/updatedb.mlocate  
-rwxr-xr-x 1 root root 34492 2010-03-24 21:16 /usr/bin/updatedb.mlocate  
    
por Peter.O 16.12.2010 / 22:21

2 respostas

14

Use readlink -e <linkfile> . Consulte a página de manual do readlink para obter mais informações sobre seus argumentos.

    
por htorque 16.12.2010 / 22:39
0

Você pode usar readlink -e , como mencionado em @htorque, que é instalado por padrão. No entanto, se você tiver feito algo como ln -s a a , então readlink -e a não fornecerá nenhuma saída, o que é o mesmo de quando você faz readlink b quando b é um arquivo normal.

Se você instalar o pacote chase ( sudo apt-get install chase , nomeado para "perseguir links simbólicos"), obterá uma saída muito mais informativa.

$ chase a
chase: /tmp/a: symlink loop detected, giving up...
$ chase b
/tmp/b

e você pode executá-lo detalhadamente:

$ chase --verbose /opt/python/3
/opt/python/3
-> 3.6
-> 3.6.2
/opt/python/3.6.2

que mostra os links intermediários

    
por Anthon 24.07.2017 / 12:29