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?


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"))'

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.


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.


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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.