So sehen Sie den vollständigen Symlink-Pfad

127

Wenn ich verwende ls -la symlinkNameoder stat symlinkNamenicht alle der Pfad angezeigt (zB ../../../one/two/file.txt)

Was ist der Linux-Befehl, der den vollständigen Pfad anzeigt?

15412s
quelle
4
Man sollte hier vorsichtig sein: Wenn ls oder stat keinen absoluten Pfad anzeigen - der Link hat keinen absoluten Pfad! Das ist esp. wichtig, wenn das Gerät z. B. in einem anderen Kontext montiert ist (z. B. wenn Sie etwas auf einer CD oder einem USB-Stick haben oder versuchen, eine defekte Festplatte wiederherzustellen). Alle genannten Lösungen (realpath, readlink, ....) zeigen nur den absoluten Pfad im gemounteten Kontext.
Flolo

Antworten:

224

realpathist nicht für alle Linux-Varianten verfügbar, readlinksollte es aber sein.

readlink -f symlinkName

Das Obige sollte den Trick machen.

Wenn Sie keines der oben genannten Programme installiert haben, können Sie alternativ Folgendes tun, wenn Sie Python 2.6 (oder höher) installiert haben

python -c 'import os.path; print(os.path.realpath("symlinkName"))'
Ian Stapleton Cordasco
quelle
16
Wenn Sie OSX verwenden, lassen Sie das -fFlag weg und dies funktioniert. dhreadlink symlinkName
Josh Davenport
6
Unter OSX gibt das Weglassen des Flags -f nur einen relativen Pfad an
timoxley
2
Diese Frage betraf Linux.
Ian Stapleton Cordasco
27

realpath <path to the symlink file> sollte den Trick machen.

JosephH
quelle
man realpathzeigt unten, dass es Teil von "GNU coreutils" ist, was ich mir ziemlich sicher bin, dass es immer auf Ubuntu läuft. Obwohl @IanStapletonCordasco sagt, dass " realpathnicht für alle Linux- Varianten verfügbar ist", sollte es zumindest für alle verfügbar sein Ich glaube, die Aromen von Ubuntu und Ubuntu-Derivaten.
Gabriel Staples
10

Unix Aromen -> ll symLinkName

OSX -> readlink symLinkName

Der Unterschied besteht darin, dass der erste Weg den Sym-Link-Pfad blinkend anzeigt und der zweite Weg ihn nur auf der Konsole wiedergibt.

Rupam
quelle
Die Frage bezog sich speziell auf den vollständigen / absoluten Pfad, nicht auf den relativen Pfad (../../file.txt). Beide Antworten geben den relativen Pfad an.
wisbucky
3

Eine andere Möglichkeit, Informationen statanzuzeigen, ist ein Befehl, der weitere Informationen anzeigt. Befehl stat ~/.sshauf meiner Maschinenanzeige

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

Hoffe das kann jemandem helfen.

Engr. Hasanuzzaman Sumon
quelle
1

Sie können awkmit einem systemAufruf readlinkdas Äquivalent einer lsAusgabe mit vollständigen Symlink-Pfaden abrufen . Beispielsweise:

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

Zeigt zB an

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
quelle
ls kann es ohne Readlink tun; einfach benutzen ls -l. Dies funktioniert auch überhaupt nicht, versucht es für alles im Verzeichnis (keine Links) und wenn Ihr ls für die Verwendung von Farben konfiguriert ist, bricht awk vollständig ab. benutze einfachfind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown