Frage Ermitteln Sie das symbolische Linkziel über die Befehlszeile


Angenommen, ich habe einen symbolischen Link eingerichtet:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

Gibt es eine Möglichkeit zu sehen, was das Ziel von myothertextfile.txt benutzt die Kommandozeile?


105
2017-10-19 18:36


Ursprung




Antworten:


Benutze die -f Flag, um die kanonisierte Version zu drucken. Zum Beispiel:

readlink -f /root/Public/myothertextfile.txt

Von man readlink:

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

142
2017-10-19 18:42



Wie in. Vorgeschlagen eine andere Frage, möchten Sie vielleicht verwenden readlink -f. - Denilson Sá Maia
Um dies unter Mac OS X zu erreichen, brew install coreutils. Dies installiert grundlegende Gnu-Versionen von Befehlen, denen der Buchstabe vorangestellt ist g, d.h. greadlink -f somefile - Mike D
mit -f-Schalter, Befehl gibt in meinem Fall nichts zurück. - sotn
Die Verwendung von -f gab mir die Information, die ich wollte, d. H. Mehrere Symlinks auflösen und das Endziel anzeigen. - isapir


readlink ist der gewünschte Befehl. Sie sollten sich die Manpage für den Befehl ansehen. Wenn Sie eine Kette von symbolischen Links zu der eigentlichen Datei verfolgen möchten, müssen Sie den Schalter -e oder -f verwenden:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

18
2017-10-19 19:03



Nichts ist falsch mit der ersten Antwort, aber diese ist vollständiger und hilfreich. - Mike S


Dies wird auch funktionieren:

ls -l /root/Public/myothertextfile.txt

aber readlink wäre für die Verwendung in einem Skript anstelle von Parsing bevorzugt ls.


4
2017-10-19 19:02





Wenn Sie die Quelle und das Ziel des Links anzeigen möchten, versuchen Sie es stat -c%N files*. Z.B.

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

Es ist nicht gut für das Parsen readlink dafür, aber es zeigt Link Name und Ziel, ohne das Durcheinander von ls -l

-c kann geschrieben werden --format und %N bedeutet "Name in Anführungszeichen mit Dereferenzierung bei symbolischer Verknüpfung".


4
2017-09-29 17:44





Das readlink ist eine gute Sache, aber GNU-spezifisch und nicht plattformübergreifend. Ich habe früher plattformübergreifende Skripte geschrieben /bin/shdeshalb würde ich etwas wie:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

oder:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

aber diese müssen auf verschiedenen Plattformen getestet werden. Ich denke, dass sie arbeiten werden, aber nicht 100% sicher für ls Ausgabeformat.


2
2018-04-17 21:35





Wenn Sie nicht verwenden können readlink, dann Parsing das Ergebnis von ls -l könnte so gemacht werden.

Das normale Ergebnis wäre:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

Also wollen wir alles vor "->" und den inkludierten Pfeil ersetzen. Wir könnten es gebrauchen sed dafür:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll oder ls -l sollte die Verzeichniselemente auflisten, einschließlich des symbolischen Links und des Ziels

cd -P /root/Public/myothertextfile.txt (in Ihrem Fall) sollte auf den ursprünglichen Pfad zeigen


0
2018-05-02 13:48