Wie verwende ich das Langformat (-l), während ich weiterhin Verzeichnissymlinks verfolge?

27

Mir ist aufgefallen, dass ls -lnicht nur die Formatierung der Ausgabe geändert wird, sondern auch der Umgang mit Verzeichnissymlinks:

> ls /rmn
biweekly.sh  daily.sh  logs ...

> ls -l /rmn
lrwxrwxrwx 1 root root 18 Feb 11  2011 /rmn -> /root/maintenance/

Ich möchte eine detaillierte Auflistung der Inhalte und /rmnkeine Informationen über den /rmnSymlink erhalten.

Eine mögliche Abhilfe besteht darin, eine Shell-Funktion zu erstellen, die ungefähr so ​​funktioniert:

cd /rmn
ls -l
cd -

Aber das scheint zu abgedreht, zumal es die nächste Verwendung von durcheinander bringt cd -. Gibt es einen besseren Weg?

(Ich bin auf CentOS 2.6.9)

RomanSt
quelle
Ich bemerkte das auch und googelte, um zu sehen, ob es auch jemandem auffiel. So bin ich hergekommen. :)
Jewgenij Afanasjew

Antworten:

27

Sehen Sie nach, ob Ihr ls die folgenden Optionen hat:

 -H, --dereference-command-line
     follow symbolic links listed on the command line 
 --dereference-command-line-symlink-to-dir
     follow each command line symbolic link that points to a directory

Wenn diese nicht helfen, können Sie Ihr Makro zum Laufen bringen, ohne es zu vermasseln, cd -indem Sie Folgendes tun:

(cd /rmn ; ls -l)

das läuft in einer Unterschale.

pjc50
quelle
Es hat -H, und das hat den Trick getan. Vielen Dank!
RomanSt
4
Ich wünschte wirklich, das --dereference-command-line-symlink-to-dirhätte eine kurze Form.
wchargin
14

Ich verstehe nicht ganz, warum das Nachdenken über dieses einfache Problem so komplex sein muss - aber vielleicht habe ich die Frage einfach falsch verstanden. Sowieso: als ich eine ähnliche Funktionalität benötigte, verwendete ich:

ls -lL

Das hat in meinem Fall den Trick getan. Von der lsManpage:

-L, --dereference
     when showing file information for a symbolic link, 
     show  information  for  the file the link references
     rather than for the link itself

Zum Beispiel habe ich mir eine /media/stickVerknüpfung erstellt, um auf die Daten auf meinem USB-Stick zuzugreifen. ls -l /media/stickzeigt den aktuellen Link an, während ls -lL /media/stickder Inhalt auf dem USB-Stick angezeigt wird.

Nach einigen gründlichen Nachforschungen über den Unterschied zwischen dem Innenleben von -Hund -Lbin ich schließlich auf einen ausgezeichneten Artikel zu diesem Thema im Shallow Thoughts- Blog gestoßen (der Ihnen sogar einige nette Shell-Skript-Tricks bietet!).

Dies zeigt die subtilen Unterschiede zwischen den beiden Optionen (viel besser als das ursprüngliche Handbuch!) Wie folgt:

  • -H - Nur die in der Befehlszeile explizit genannten Links dereferenzieren
  • -L- Dereferenzierung von Links, auch wenn diese in der Befehlszeile nicht erwähnt werden

(Wenn diese beiden bei einfachen alltäglichen Aufgaben verwendet werden, sollte es im Allgemeinen keinen Unterschied in der Ausgabe geben.)

Außerdem: Wenn Sie sich lieber an die lange Form ( --option) erinnern möchten , ist es höchstwahrscheinlich weniger umständlich, sie sich zu merken --dereferenceals das übermäßig lange Monster von --dereference-command-line-symlink-to-dir.

Syntax-Fehler
quelle
5
ls -l /rmn/

würde es tun oder

ls -l /rmn/.

Das Verhalten sollte sich jedoch nicht mit und ohne unterscheiden -l. Hast du einen Alias ​​für ls?

Stéphane Chazelas
quelle
3
lsFahnen sind verrückt. -lmacht -Hstandardmäßig aus, ebenso wie -F. Siehe coreutils - Welche Dateien werden aufgelistet .
Mikel
@Mikel es scheint, dass Sie völlig richtig sind. Und ja, das ist verrückt. (Ich habe auch keinen Alias ​​für ls, habe versucht, ihn zu
umgehen,
Tatsächlich wird es sogar von POSIX spezifiziert. ls='ls -F'Eigentlich war ich derjenige mit dem Pseudonym.
Stéphane Chazelas