Cómo ver la ruta completa del enlace simbólico


128

Cuando estoy usando ls -la symlinkNameo stat symlinkNameno, se muestra toda la ruta (por ejemplo ../../../one/two/file.txt)

¿Cuál es el comando de Linux que revela la ruta completa?


4
Hay que tener cuidado aquí: cuando ls o stat no muestran una ruta absoluta, ¡el enlace no tiene una ruta absoluta! Esto es esp. importante cuando el dispositivo está montado, por ejemplo, en un contexto diferente (por ejemplo, si tiene algo en un CD o memoria USB o intenta recuperar un disco duro roto). Todas las soluciones mencionadas (realpath, readlink, ....) muestran solo la ruta absoluta en el contexto montado.
flolo

Respuestas:


225

realpathno está disponible en todas las versiones de Linux, pero readlinkdebería estarlo.

readlink -f symlinkName

Lo anterior debería funcionar.

Alternativamente, si no tiene ninguno de los anteriores instalados, puede hacer lo siguiente si tiene instalado Python 2.6 (o posterior)

python -c 'import os.path; print(os.path.realpath("symlinkName"))'

16
Si usa OSX, omita la -fbandera y entonces esto funciona. iereadlink symlinkName
Josh Davenport

6
en OSX omitir el indicador -f solo da una ruta relativa
timoxley

2
Esta pregunta era sobre Linux, todos ustedes.
Ian Stapleton Cordasco

27

realpath <path to the symlink file> debería hacer el truco.


man realpathmuestra en la parte inferior que forma parte de "GNU coreutils", que estoy bastante seguro de que siempre viene en Ubuntu, así que aunque @IanStapletonCordasco dice " realpathno está disponible en todos los sabores de Linux", al menos debería estar disponible en todos Sabores de Ubuntu y derivados de Ubuntu, creo.
Gabriel Staples

10

sabores unix -> ll symLinkName

OSX -> readlink symLinkName

La diferencia es que la primera forma mostraría la ruta del enlace simbólico de forma intermitente y la segunda forma simplemente lo haría eco en la consola.


La pregunta pedía específicamente la ruta completa / absoluta, no la ruta relativa (../../file.txt). Ambas respuestas darán la ruta relativa.
wisbucky

3

Otra forma de ver la información es el statcomando que mostrará más información. Comando stat ~/.sshen la pantalla de mi 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 esto pueda ayudar a alguien.


1

Puede usar awkcon una systemllamada readlinkpara obtener el equivalente de una lssalida con rutas de enlace simbólicas completas. Por ejemplo:

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

Mostrará, por ejemplo,

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

Puede hacerlo sin readlink; solo usa ls -l. Esto tampoco funciona en absoluto, intenta hacerlo en todo en el directorio (no enlaces) y si su ls está configurado para usar colores, awk se rompe por completo. solo usefind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.