Linux / Befehl ls: Dateien und Verzeichnisse auflisten

ls ist ein Befehl in Linux, der verwendet wird, um die Liste von Dateien und Verzeichnissen zu überprüfen. Zusätzlich zur grundlegenden Liste können Sie Optionen wählen, um versteckte Dateien, Berechtigungen und Eigentümer, Dateigröße, Änderungszeit und Sortierreihenfolge anzuzeigen.

Für die tägliche Überprüfung ist ls -lah praktisch, aber beim sicheren Umgang mit Dateinamen in Skripten ist es besser, Befehle wie find statt der menschenlesbaren Ausgabe von ls zu verwenden.

Ergänzende Befehle und Anwendungsfälle finden Sie in Liste der häufig verwendeten Befehle in Linux.

Was ist der ls-Befehl?

ls steht für list und listet Informationen über bestimmte Dateien oder den Inhalt eines Verzeichnisses auf. In GNU/Linux-Distributionen wird in der Regel ls, das in GNU Coreutils enthalten ist, verwendet.

Wenn es ohne Argumente ausgeführt wird, richtet es sich auf das aktuelle Verzeichnis und zeigt standardmäßig keine versteckten Elemente an, deren Namen mit einem Punkt beginnen (.). Wenn Sie einen Verzeichnisnamen als Argument angeben, werden die Inhalte dieses Verzeichnisses angezeigt, nicht das Verzeichnis selbst.

Grundlegende Syntax

ls [options]... [files or directories]...

Um die Elemente im aktuellen Verzeichnis zu überprüfen, führen Sie Folgendes aus.

ls

Sie können auch ein bestimmtes Verzeichnis oder eine Datei angeben.

ls /var/log
ls /etc/hosts
ls /etc /usr/local

Bei mehreren Argumenten dürfen Sie nicht allgemein davon ausgehen, dass die Ausgabe deren Reihenfolge übernimmt. Die Sortierung richtet sich nach den gewählten Optionen und den Sortierregeln des Gebietsschemas; ohne besondere Optionen werden Namen entsprechend sortiert.

Versteckte Dateien anzeigen

Alle Elemente mit -a anzeigen

-a oder --all enthält versteckte Dateien und Verzeichnisse, die mit einem Punkt beginnen. Es zeigt auch ., das das aktuelle Verzeichnis darstellt, und .., das das übergeordnete Verzeichnis darstellt.

ls -a

Schließen Sie . und .. mit -A aus

-A oder --almost-all zeigt versteckte Elemente, schließt jedoch . und .. aus. Die Ausgabe ist prägnanter, wenn nur tatsächliche Konfigurationsdateien überprüft werden.

ls -A

Detaillierte Informationen mit ls -l anzeigen

-l zeigt im Langformat den Dateityp und die Berechtigungen, die Anzahl der Hardlinks, Eigentümer, Gruppe, Größe, Änderungszeit und Name an.

ls -l

Eine typische einzelne Ausgabezeile besteht aus der folgenden Reihenfolge.

Artikel Bedeutung
Typ und Berechtigungen Das einzelne Zeichen für den Dateityp sowie die Lese-, Schreib- und Ausführungsberechtigungen für den Besitzer, die Gruppe und andere.
Anzahl der Hardlinks Die Anzahl der Verzeichniseinträge, die auf den Inode der Datei zeigen. In Verzeichnissen hat es eine leicht abweichende Bedeutung.
Besitzer Der Name oder die Benutzer-ID des Kontos, dem die Datei gehört.
Gruppe Der Name oder die Gruppen-ID der Gruppe, zu der die Datei gehört.
Größe Standardmäßig ist die Dateigröße in Byte angegeben.
Zeit Standardmäßig ist dies die Änderungszeit (mtime), wann die Datei zuletzt geändert wurde.
Name Dies ist der Dateiname. Bei symbolischen Links kann auch das Ziel, auf das sie verweisen, angezeigt werden.

Wie man Berechtigungszeichenketten liest

Das erste Zeichen einer Zeichenkette, die wie -rw-r--r-- aussieht, gibt den Dateityp an, und die folgenden neun Zeichen sind die Berechtigungen für den Besitzer, die Gruppe und andere in Dreiergruppen. r bedeutet Leseberechtigung, w bedeutet Schreibberechtigung und x bedeutet Ausführungsberechtigung.

Ort Beispiel Beschreibung
Erstes Zeichen -, d, l Es ist der Typ wie eine reguläre Datei, ein Verzeichnis oder ein symbolischer Link.
2. bis 4. rw- Die Berechtigungen des Eigentümers.
5. bis 7. r-- Die Berechtigungen der Gruppe.
8. bis 10. r-- Dies ist die Berechtigung für andere Benutzer.

Wenn ein + oder ein anderes Symbol nach der Berechtigungszeichenkette angehängt ist, kann dies darauf hinweisen, dass zusätzliche Sicherheitsinformationen wie eine Zugriffskontrollliste (ACL) vorhanden sind. Für detaillierte Berechtigungsänderungen verwenden Sie chmod, und zum Ändern des Eigentümers verwenden Sie chown.

Als numerische ID mit -n anzeigen

Um die numerische ID anstelle des Benutzernamens und Gruppennamens zu überprüfen, verwenden Sie -n. Dies ist nützlich, wenn die Abfrage des Kontonamens langsam ist oder wenn IDs mit einem anderen System verglichen werden.

ls -ln

Dateigröße in einer gut lesbaren Form anzeigen

In gut lesbaren Einheiten mit -h anzeigen

-h zeigt Größen in einem langen Format unter Verwendung lesbarer Einheiten wie KiB, MiB, GiB an. Verwenden Sie es zusammen mit -l oder -s, die eine Spalte für die Größe haben.

ls -lh
ls -lah

ls -lah wird häufig in der interaktiven Arbeit verwendet, da es versteckte Elemente im langen Format anzeigt.

Zeigen Sie die zugewiesene Blockgröße mit -s an

-s zeigt den zugewiesenen Speicherplatz in den verwendeten Ausgabeeinheiten an; mit -h werden diese gut lesbar skaliert. Dieser belegte Platz kann sich wegen Sparse-Dateien, Kompression und Dateisystemeigenschaften von der logischen Dateilänge unterscheiden.

ls -sh
ls -lsh

Um den gesamten von einem Verzeichnis belegten Speicherplatz zusammenzufassen, eignet sich du besser als ls.

Ändern der Sortierreihenfolge

Standardmäßig sortiert ls Dateinamen nach den aktuellen Zeichensortierregeln der Gebietsschemaeinstellungen. Es kann je nach Zweck geändert werden, um nach Zeit, Größe, Erweiterung oder Version zu sortieren.

Nach Änderungszeit mit -t sortieren

ls -lt
ls -lat

-t zeigt standardmäßig Elemente beginnend mit dem zuletzt geänderten an. Dies ist nützlich, um Protokolle oder kürzlich erstellte Ergebnisdateien zu finden.

Nach Größe mit -S sortieren

ls -lhS

-S sortiert nach Dateigröße in absteigender Reihenfolge. Die in Verzeichnislisten angezeigte Größe ist nicht die Summe der Inhalte, daher verwenden Sie du, um die Festplattennutzung zu vergleichen.

In umgekehrter Reihenfolge und nach Version mit -r, -v sortieren

ls -ltr
ls -1v

-r kehrt die aktuelle Sortierreihenfolge um. Daher zeigt ls -ltr Einträge vom ältesten zum neuesten. -v führt eine Versionssortierung durch, die numerische Teile berücksichtigt, sodass file2 vor file10 kommt.

Unterscheidung von Verzeichnissen und Auflisten des Verzeichnisses selbst

Anhängen von Typindikatoren mit -F

-F oder --classify hängt Typindikatoren wie / an Verzeichnisse, * an ausführbare Dateien und @ an symbolische Links an.

ls -F

Diese Indikatoren sind nicht Teil der tatsächlichen Dateinamen. Beim Bestimmen des Typs in Skripten dürfen diese Zeichen nicht entfernt werden; verwenden Sie stattdessen Dateitestoperatoren oder find.

Anzeigen des Verzeichnisses selbst statt seines Inhalts mit -d

Wenn Sie einen Verzeichnisnamen angeben, wird standardmäßig der Inhalt angezeigt. Um die Berechtigungen und Zeiten des Verzeichniseintrags selbst anzuzeigen, verwenden Sie -d zusammen.

ls -ld /var/log
ls -d */

ls -d */ ist praktisch, um die Namen regulärer Unterverzeichnisse im aktuellen Verzeichnis zu überprüfen, schließt jedoch laut den Glob-Erweiterungsregeln der Shell versteckte Verzeichnisse nicht ein.

Zuerst Verzeichnisse sammeln

ls --group-directories-first

In GNU ls können Verzeichnisse vor Dateien gruppiert werden. Diese Option ist eine GNU-Erweiterung, daher sollten Sie prüfen, ob sie auf anderen Unix-ähnlichen Systemen unterstützt wird.

Unterverzeichnisse rekursiv anzeigen

ls -R /etc

-R oder --recursive folgt Unterverzeichnissen und zeigt weiterhin deren Inhalte an. Wenn der Baum groß ist, kann die Ausgabe sehr lang sein und viele Berechtigungsfehler können auftreten.

Um Dateien nach einem bestimmten Namen oder einer Bedingung zu finden, ist es effizienter, find zu verwenden, anstatt die gesamte Liste visuell zu durchsuchen.

find /etc -type f -name '*.conf'

Auswahl von Zeittypen und Anzeigeformaten

Zugriffszeit und Zeit der Statusänderung

ls -l zeigt standardmäßig die Änderungszeit (mtime) an. -u zeigt die Zugriffszeit (atime) an, und -c zeigt die Metadaten-Statusänderungszeit (ctime) an oder verwendet sie als Sortierkriterium.

ls -lu
ls -lc
ls -ltu
ls -ltc

Ctime ist nicht die „Erstellungszeit“ der Datei, sondern die letzte Zeit, zu der der Inode-Status, wie Berechtigungen, Eigentümer oder Anzahl der Links, geändert wurde.

Verwendung eines konsistenten Datumsformats

Mit GNU ls können Sie --time-style verwenden, um ein langes Datumsformat auszuwählen.

ls -l --time-style=long-iso
ls -l --time-style=full-iso
ls -l --time-style='+%Y-%m-%d %H:%M:%S'

Die Ausgabe kann durch das Gebietsschema und die TZ-Umgebungsvariable beeinflusst werden. Für Berichte, die für den menschlichen Vergleich bestimmt sind, wird empfohlen, die Zeitzone und das Anzeigeformat zusammen festzulegen.

Farb- und Dateinamenanzeige

Verwendung von Farbe

ls --color=auto

--color=auto verwendet Farben basierend auf Dateityp und Erweiterung, wenn die Ausgabe ein Terminal ist. Viele Distributionen wenden diese Option standardmäßig als Alias für ls an.

type ls
alias ls

Farben werden durch die Umgebungsvariable LS_COLORS und die dircolors-Einstellungen beeinflusst. Beim Speichern in einer Datei oder beim Weitergeben an andere Befehle können Sie --color=never verwenden, um unnötige Steuerzeichen zu vermeiden.

Dateinamen mit Leerzeichen und Sonderzeichen

ls kann Dateinamen, die Leerzeichen oder Steuerzeichen enthalten, in Anführungszeichen oder in escaped Form anzeigen, abhängig vom Terminal und den Optionen. Sie sollten nicht davon ausgehen, dass der angezeigte String immer mit dem tatsächlichen Dateinamen übereinstimmt.

ls -Q
ls --quoting-style=shell-escape

-Q setzt Dateinamen in doppelte Anführungszeichen. --quoting-style ist eine GNU-Erweiterung, nützlich für Menschen, um Sonderzeichen zu erkennen, aber kein Ersatz für ein sicheres automatisches Verarbeitungsformat.

Häufig verwendete Kombinationen

Befehl Zweck
ls -la Zeigt detaillierte Informationen einschließlich versteckter Elemente an.
ls -lah Zeigt versteckte Elemente und detaillierte Informationen in für Menschen lesbaren Größen an.
ls -lhS Zeigt detaillierte Informationen beginnend mit großen Dateien an.
ls -ltr Anzeige im Langformat ab ältestem Änderungszeitpunkt.
ls -ld */ Zeigt Informationen von Unterverzeichnissen am aktuellen Standort an.
ls -1 Zeigt Elemente jeweils in einer Zeile an.
ls -1v Sortiert Zeilen unter Berücksichtigung von Versionsnummern.
ls -l --time-style=long-iso Anzeige in einem Format, das den Vergleich von Datum und Uhrzeit erleichtert.

Zusammenfassung der Hauptoptionen

Option Beschreibung
-a, --all Versteckte Elemente anzeigen, einschließlich . und ...
-A, --almost-all Versteckte Elemente anzeigen, außer . und ...
-l In Langformat anzeigen, einschließlich Berechtigungen, Eigentümer, Größe und Zeit.
-h, --human-readable Größe in menschenlesbaren Einheiten anzeigen.
-d, --directory Den Verzeichniseintrag selbst anzeigen, anstatt den Inhalt des Verzeichnisses.
-R, --recursive Rekursiv anzeigen, einschließlich Unterverzeichnisse.
-t Standardmäßig nach der neuesten Änderungszeit sortieren.
-S Sortiert nach Dateigröße in absteigender Reihenfolge.
-r, --reverse Kehrt die aktuelle Sortierreihenfolge um.
-v Sortieren in Versionsreihenfolge unter Berücksichtigung des numerischen Teils des Dateinamens.
-F, --classify Hängt ein Zeichen an, das den Dateityp nach dem Namen angibt.
-1 Zeigt nur ein Element pro Zeile an.

Gründe, die Ausgabe von ls in Skripten nicht zu parsen

Linux-Dateinamen können Leerzeichen, Tabulatoren und Zeilenumbrüche enthalten. ls ändert Spalten, Farben und Anführungszeichen, um sie im Terminal für Menschen lesbar zu machen, sodass Skripte, die nach Zeilen oder Leerzeichen trennen, Dateien möglicherweise falsch behandeln.

Beim Durchlaufen von Dateien sollten Werkzeuge verwendet werden, die das NUL-Zeichen als Trennzeichen unterstützen.

find . -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
  printf '%s\n' "$file"
done

GNU ls verfügt auch über die Option --zero, aber beim Konfigurieren von Suchkriterien und anschließender Verarbeitung ist find -print0 in der Regel klarer. Wenn Sie genaue Metadaten für eine einzelne Datei benötigen, können Sie stat verwenden.

Häufige Probleme

Zugriff verweigert wird angezeigt.

Sie haben möglicherweise nicht die erforderlichen Berechtigungen für das Verzeichnis, dessen Inhalt Sie zu lesen versuchen. Überprüfen Sie die Ausführungsberechtigung der Pfadbestandteile und die Leseberechtigung des Zielverzeichnisses mit ls -ld path oder namei -l path. Anstatt routinemäßig sudo zu verwenden, um Berechtigungen zu umgehen, ist es besser zuerst festzustellen, ob der Zugriff wirklich erforderlich ist.

Die Sortierreihenfolge unterscheidet sich von der erwarteten.

Die standardmäßige Namenssortierung wird durch die LC_COLLATE-Locale beeinflusst. Wenn eine reproduzierbare Byte-Reihenfolge erforderlich ist, können Sie LC_ALL=C nur auf diesen Befehl anwenden.

LC_ALL=C ls

Ein Fehler „Argumentliste zu lang“ tritt auf.

In ls * wird das Sternchen von der Shell in zahlreiche Dateinamen erweitert, bevor ls ausgeführt wird, nicht von ls selbst. Überschreitet es die Argumentgrößengrenze des Betriebssystems, tritt der Fehler auf, bevor der Befehl startet. Für eine einfache Liste führen Sie ls allein aus, und für bedingte Suchen oder Batch-Verarbeitungen verwenden Sie find mit -exec oder einer durch NUL getrennten Pipeline.

FAQ

In ls -l, ist die Verzeichnisgröße die Summe der internen Dateien?

Nein. Die in der Langformatansicht angezeigte Größe von Verzeichnissen ist die Größe der Verzeichniseintrags-Metadaten selbst, nicht die Summe der internen Dateigrößen. Um die Speichernutzung eines Verzeichnisses zu überprüfen, verwenden Sie du -sh directory.

Was ist der Unterschied zwischen ls -a und ls -A?

-a zeigt alle versteckten Elemente, einschließlich . und ... -A zeigt versteckte Elemente, schließt jedoch diese beiden speziellen Verzeichniseinträge aus.

Wie kann ich die zuletzt geänderten Dateien zuerst sehen?

Die Verwendung von ls -lt zeigt Elemente im Langformat, beginnend mit den zuletzt geänderten. Um von ältesten zu neuesten zu sehen, fügen Sie die Rückwärtsoption hinzu und verwenden Sie ls -ltr.

Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Coreutils Handbuch: ls-Befehl, GNU Coreutils Handbuch: Sortieren der ls-Ausgabe und GNU Coreutils Handbuch: Ausgabeformat der Dateinamen.