Der Grund für das ls -a
Anzeigen .
und ..
hat nichts mit dem Dienstprogramm und allem, was mit Unix- (und Linux-) Dateisystemen zu tun hat, zu tun.
Alles ist eine Datei.
Verzeichnisse sind wirklich Dateien, die Listen von Dateien enthalten. "Innerhalb" eines bestimmten Verzeichnisses, da dies die Perspektive des Benutzers ist, wenn nicht genau die Perspektive des Dateisystems, gibt es zwei spezielle Dateien.
- Das erste, aufgerufene
.
, verweist auf das aktuelle Arbeitsverzeichnis. Dies wird von Menschen fast täglich verwendet, wenn sie beispielsweise einen Befehl im aktuellen Verzeichnis über ausführen ./scriptname
.
- Das zweite aufgerufene
..
Verzeichnis verweist auf das übergeordnete CWD-Verzeichnis. Like .
, ..
wird jeden Tag von jedem verwendet, der Verzeichnisse über in das übergeordnete Verzeichnis ändern möchte cd ..
.
Der Systemaufruf getdents()
, bei dem es sich um das Arbeitspferd auf der Systemseite handelt ls
, listet einfach alle Dateien in einem Verzeichnis auf. (Denken Sie daran: Alles ist eine Datei. Geräte, Verzeichnisse, Sockets usw., damit alle angezeigt werden.)
Auf der Utility-Seite haben die Autoren des ls
Befehls eine Reihe von Optionen und Kombinationen von Optionen bereitgestellt, mit denen wir bestimmte Informationen oder Arten von Informationen herausfiltern können, z. B. die oben kommentierten @ Gilles, ls -A
die alle anzeigen dotfile, mit Ausnahme von .
und ..
. Alle diese Optionen können als Nachbearbeitungsoptionen betrachtet werden. Sie beeinflussen, was von angezeigt wird ls
, nicht was von gefunden wird ls
.
Es gibt wirklich keinen Grund, explizit aufzulisten, .
und ..
standardmäßig, da wir alle wissen, dass sie da sind, wofür sie sind und wann sie verwendet werden sollen.
Es kann auf jeden Fall hilfreich sein, eine Option zu haben, um sie anzuzeigen, wenn Sie Probleme mit seltsamen Berechtigungen beheben.
Überprüfen Sie die Manpage fürgetdents()
¹. Es erklärt etwas mehr über die Funktionsweise und enthält den Quellcode für ein Beispielprogramm, mit dem Sie kompilieren können gcc -Wall
und in dem alle Dateien in einem Verzeichnis aufgelistet sind.
-
1. Zumindest getdents()
scheint die Ubuntu-Manpage für den Beispielcode zu haben.