Como ver o caminho completo do link simbólico

128

Quando estou usando ls -la symlinkNameou stat symlinkNamenem todo o caminho é exibido (por exemplo ../../../one/two/file.txt)

Qual é o comando linux que revela o caminho completo?

15412s
fonte
4
Deve-se ter cuidado aqui: quando ls ou stat não exibem caminho absoluto - o link não possui caminho absoluto! Isso é esp. importante quando o dispositivo está montado, por exemplo, em um contexto diferente (por exemplo, se você tiver algo em um CD ou pendrive ou tentar recuperar algum disco rígido quebrado). Todas as soluções mencionadas (caminho real, readlink, ....) mostram apenas o caminho absoluto no contexto montado.
flolo

Respostas:

225

realpathnão está disponível em todos os sabores do Linux, mas readlinkdeveria estar.

readlink -f symlinkName

O acima deve fazer o truque.

Como alternativa, se você não tiver nenhum dos itens acima instalados, poderá fazer o seguinte se tiver o python 2.6 (ou posterior) instalado

python -c 'import os.path; print(os.path.realpath("symlinkName"))'
Ian Stapleton Cordasco
fonte
16
Se estiver usando o OSX, omita o -fsinalizador e isso funciona. iereadlink symlinkName
Josh Davenport
6
no OSX omitindo o sinalizador -f só dá um caminho relativo
timoxley
2
Esta pergunta foi sobre o Linux, pessoal.
Ian Stapleton Cordasco
27

realpath <path to the symlink file> deve fazer o truque.

JosephH
fonte
man realpathmostra na parte inferior que faz parte do "GNU coreutils", que eu tenho certeza que sempre vem no Ubuntu, então mesmo que o @IanStapletonCordasco diga " realpathnão está disponível em todos os sabores do linux", deve pelo menos estar disponível em todos os Ubuntu e sabores derivados do Ubuntu, eu acredito.
Gabriel Staples
10

sabores unix -> ll symLinkName

OSX -> readlink symLinkName

A diferença é que a 1ª maneira exibirá o caminho do link sym de maneira intermitente e a 2ª maneira apenas ecoaria no console.

Rupam
fonte
A pergunta estava solicitando especificamente o caminho completo / absoluto, não o caminho relativo (../../file.txt). Ambas as respostas fornecerão o caminho relativo.
wisbucky
3

Outra maneira de ver informações é o statcomando que mostrará mais informações. Comando stat ~/.sshno visor da minha máquina

File: ‘/home/sumon/.ssh’ -> ‘/home/sumon/ssh-keys/.ssh.personal’
  Size: 34          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 25297409    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)
Access: 2017-09-26 16:41:18.985423932 +0600
Modify: 2017-09-25 15:48:07.880104043 +0600
Change: 2017-09-25 15:48:07.880104043 +0600
 Birth: -

Espero que isso ajude alguém.

Engr. Hasanuzzaman Sumon
fonte
1

Você pode usar awkcom uma systemchamada readlinkpara obter o equivalente a uma lssaída com caminhos completos de link simbólico. Por exemplo:

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'

Será exibido, por exemplo

thin_repair ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_restore ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_rmap ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_trim ->/home/user/workspace/boot/usr/bin/pdata_tools
touch ->/home/user/workspace/boot/usr/bin/busybox
true ->/home/user/workspace/boot/usr/bin/busybox
user3467349
fonte
Podemos fazer isso sem readlink; apenas use ls -l. Isso também não funciona, tenta fazê-lo em tudo no diretório (não links) e se o seu ls estiver configurado para usar cores, o awk será completamente interrompido. apenas usefind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown