Comment voir le chemin complet du lien symbolique


128

Quand j'utilise ls -la symlinkName ou stat symlinkNamepas tout le chemin est affiché (par exemple ../../../one/two/file.txt)

Quelle est la commande linux qui révèle le chemin complet?


4
Il faut faire attention ici: lorsque ls ou stat n'affiche pas de chemin absolu - le lien n'a pas de chemin absolu! C'est esp. important lorsque l'appareil est monté, par exemple dans un contexte différent (par exemple, si vous avez quelque chose sur un CD ou une clé USB ou essayez de récupérer un disque dur cassé). Toutes les solutions mentionnées (realpath, readlink, ....) ne montrent que le chemin absolu dans le contexte monté.
flolo

Réponses:


225

realpathn'est pas disponible sur toutes les saveurs Linux, mais readlinkdevrait l'être.

readlink -f symlinkName

Ce qui précède devrait faire l'affaire.

Sinon, si aucun des éléments ci-dessus n'est installé, vous pouvez effectuer les opérations suivantes si vous avez installé python 2.6 (ou version ultérieure)

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

16
Si vous utilisez OSX, omettez l' -findicateur et cela fonctionne. iereadlink symlinkName
Josh Davenport

6
sur OSX, omettre l'indicateur -f ne donne qu'un chemin relatif
timoxley

2
Cette question concernait Linux, vous tous.
Ian Stapleton Cordasco

27

realpath <path to the symlink file> devrait faire l'affaire.


man realpathmontre en bas qu'il fait partie de "GNU coreutils", qui, j'en suis sûr, est toujours disponible sur Ubuntu, donc même si @IanStapletonCordasco dit " realpathn'est pas disponible sur toutes les saveurs Linux", il devrait au moins être disponible sur tous Je crois que les saveurs dérivées d'Ubuntu et d'Ubuntu.
Gabriel Staples le

10

saveurs unix -> ll symLinkName

OSX -> readlink symLinkName

La différence est que la 1ère manière afficherait le chemin du lien symbolique de manière clignotante et la 2ème manière le ferait simplement en écho sur la console.


La question demandait spécifiquement le chemin complet / absolu, pas le chemin relatif (../../file.txt). Ces deux réponses donneront le chemin relatif.
wisbucky

3

Une autre façon de voir les informations est la statcommande qui affichera plus d'informations. Commande stat ~/.sshsur l'écran de ma machine

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

J'espère que cela peut aider quelqu'un.


1

Vous pouvez utiliser awkavec un systemappel readlinkpour obtenir l'équivalent d'une lssortie avec des chemins de lien symbolique complets. Par exemple:

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

Affiche par exemple

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

Je peux le faire sans readlink; juste utiliser ls -l. Cela ne fonctionne pas du tout non plus, essaie de le faire sur tout ce qui se trouve dans le répertoire (non-liens) et si votre ls est configuré pour utiliser des couleurs awk se brise complètement. il suffit d'utiliserfind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.