Der Befehl ls (kurz für „list”) gehört zu den meistgenutzten Werkzeugen auf jedem Linux-System. Er listet den Inhalt eines Verzeichnisses auf — von einer schnellen Übersicht bis zur detaillierten Anzeige mit Berechtigungen, Eigentümer, Größe und Zeitstempel. Wer ls und seine Optionen kennt, navigiert deutlich schneller und sicherer durch das Dateisystem.

Was ls macht

ls zeigt den Inhalt eines Verzeichnisses an: die enthaltenen Dateien und Unterverzeichnisse. Ohne Argumente listet ls das aktuelle Arbeitsverzeichnis auf — also den Ordner, in dem du dich gerade befindest. Mit einem Pfadargument zeigt es den Inhalt des angegebenen Verzeichnisses.

Die Standard-Sortierung erfolgt alphabetisch nach Dateinamen, lokalisiert nach der aktiven LC_COLLATE-Locale. Versteckte Einträge — also alle, deren Name mit einem Punkt beginnt — werden in der Voreinstellung nicht angezeigt. Die Ausgabe wird auf interaktiven Terminals in mehrere Spalten umbrochen; in Pipes oder Skripten fällt ls automatisch auf eine Zeile pro Eintrag zurück.

Bash Aktuelles Verzeichnis auflisten
ls
Output
Documents  Downloads  Music  Pictures  projekte.txt
Bash Anderes Verzeichnis auflisten
ls /etc

Wichtigste Optionen

ls bringt mehr als hundert Optionen mit, doch im Alltag wiederholen sich dieselben rund ein Dutzend immer wieder. Diese Tabelle deckt sie ab — alles weitere findest du in der Manpage.

OptionWirkungTypischer Einsatz
-lLong-Format: Berechtigungen, Owner, Größe, DatumStandardansicht für Detailinfos
-aAlle Einträge inkl. . und .. und DotfilesKomplette Übersicht eines Verzeichnisses
-AWie -a, aber ohne . und ..Dotfiles ohne den Navigations-Lärm
-hGrößen menschenlesbar (1.5K, 4.2M, 7G)Immer mit -l kombinieren
-SNach Größe sortieren (größte zuerst)Speicherfresser finden
-tNach Zeitstempel sortieren (neueste zuerst)Was wurde zuletzt geändert?
-rSortierung umkehrenZ. B. -tr für älteste zuerst
-RRekursiv durch UnterverzeichnisseBaumartige Auflistung
--color=autoFarben nur bei Terminal-AusgabeIn Aliases meist Standard
-1Eine Spalte, ein Eintrag pro ZeileSaubere Ausgabe in Pipes
-dVerzeichnis selbst statt InhaltMit */ nur Verzeichnisse anzeigen
-iInode-Nummer voranstellenHardlinks und Dateisystem-Debugging
-FTyp-Suffix (/, *, @, ``)
--sort=...Sortierkriterium explizit (size, time, extension)Für saubere Skripte besser als Kurzflags

ls -l Spalten erklärt

Das Long-Format -l ist das wichtigste Anzeigeformat. Es liefert sieben Spalten pro Eintrag — wer sie liest, weiß alles Wichtige über eine Datei.

Bash Long-Listing
ls -l
Output
-rw-r--r--  1 michael users  4096 May  4 14:22 notizen.md
drwxr-xr-x  3 michael users   128 May  3 09:11 projekte
lrwxrwxrwx  1 michael users    14 May  2 20:05 link -> /etc/hosts

Von links nach rechts:

  1. Modus-Block — Erstes Zeichen ist der Dateityp (- reguläre Datei, d Verzeichnis, l Symlink, c/b Geräte, s Socket, p Named Pipe). Die folgenden neun Zeichen sind die Berechtigungen für Owner, Group und Others — Details siehe Berechtigungen.
  2. Hardlink-Anzahl — Wie viele Verzeichniseinträge auf denselben Inode zeigen. Bei Verzeichnissen mindestens 2 (Eintrag selbst plus .).
  3. Owner — Benutzername des Eigentümers.
  4. Group — Gruppe, der die Datei zugeordnet ist.
  5. Größe — In Bytes, mit -h menschenlesbar. Bei Verzeichnissen die Größe des Verzeichniseintrags, nicht des Inhalts.
  6. Datum/Zeit — Standardmäßig mtime (letzte Inhaltsänderung). Mit --time=atime oder --time=ctime umschaltbar.
  7. Name — Der Dateiname. Bei Symlinks zusätzlich -> ziel.

ls -l blendet zudem oben eine total-Zeile ein, die die Summe der belegten Blöcke (in 1-KiB-Einheiten bei GNU ls) angibt — nicht die Anzahl der Dateien.

Sortieren und filtern

Die Standard-Sortierung ist alphabetisch, aber ls kann nach beliebigen Kriterien ordnen. Wichtig: Alle Sortier-Flags lassen sich mit -r umkehren.

Bash Größte Dateien zuerst
ls -lhS
Bash Neueste Änderungen zuerst
ls -lt
Bash Älteste zuerst, neueste unten
ls -ltr

Für gefilterte Ausgaben übernimmt die Shell das Globbing — ls bekommt nur die expandierten Dateinamen geliefert:

Bash Nur .txt-Dateien anzeigen
ls -l *.txt
Bash Nur Verzeichnisse im aktuellen Pfad
ls -d */

Das Suffix / matcht nur Verzeichnisse, und -d verhindert, dass ls deren Inhalt zeigt — übrig bleibt eine reine Verzeichnisliste. Für komplexere Filter ist find das bessere Werkzeug.

Versteckte Dateien

Linux kennt kein „verstecktes Attribut” wie andere Betriebssysteme. Stattdessen gilt eine reine Konvention: Dateien und Verzeichnisse, deren Name mit einem Punkt beginnt, werden von vielen Werkzeugen — darunter ls — standardmäßig ausgeblendet.

Bash Alle Einträge inkl. Dotfiles
ls -a

-a zeigt zusätzlich . (das aktuelle Verzeichnis) und .. (das übergeordnete) an. Das ist meist Lärm, deshalb gibt es die Variante -A:

Bash Dotfiles ohne . und ..
ls -A

Im Home-Verzeichnis sind Dotfiles typischerweise Konfigurationen — .bashrc, .zshrc, .config/, .ssh/. Wer alle Konfigurationen sehen will, nutzt ls -A ~.

Farben und Icons

Auf den meisten Distributionen ist ls als Alias auf ls --color=auto konfiguriert. auto bedeutet: Farben nur, wenn die Ausgabe direkt ans Terminal geht — in Pipes (ls | …) bleibt sie roh, damit Folge-Tools nicht über Steuersequenzen stolpern.

Die Farbzuordnung steuert die Umgebungsvariable LS_COLORS. Mit dircolors lässt sich ein eigenes Schema generieren:

Bash Aktuelles LS_COLORS anzeigen
echo $LS_COLORS
Bash Eigenes Farbschema laden
eval "$(dircolors ~/.dircolors)"

Wer mehr Komfort möchte — Icons, Git-Status, Baumansicht — greift zu modernen Alternativen:

ToolHighlightsHinweis
ezaAktiver Nachfolger von exa, Git-Integration, IconsAus den meisten Repos installierbar
exaVorgänger von eza, ähnliche FeaturesWird nicht mehr gepflegt
lsdBunter Drop-in-Ersatz, Tree-ModusIn Rust geschrieben, schnell

Diese Tools ersetzen ls nicht im klassischen Sinn — Skripte sollten weiterhin auf das Coreutils-Original setzen, da nur dieses überall verfügbar ist.

Praxis-Kombinationen

Mit der Zeit kristallisieren sich einige Flag-Kombinationen heraus, die so häufig gebraucht werden, dass viele Nutzer sie als Aliases speichern.

Bash Alles mit Größen, sortiert nach Größe
ls -lahS

Long-Format mit allen Dateien, menschenlesbaren Größen und Sortierung nach Größe — der Klassiker, um in einem unbekannten Verzeichnis schnell die Speicherfresser zu erkennen.

Bash Älteste zuerst, neueste am Ende
ls -ltr

Sortiert nach Änderungsdatum, älteste oben — die zuletzt geänderten Dateien stehen so am Ende der Ausgabe und sind direkt sichtbar, ohne nach oben scrollen zu müssen. Ideal für Log-Verzeichnisse.

Bash ISO-Zeitstempel statt lokalisiertem Datum
ls -la --time-style=long-iso

long-iso liefert 2026-05-04 14:22 und ist sowohl für Menschen lesbar als auch sortierbar. Hilfreich, wenn Ausgaben dokumentiert oder zwischen Systemen verglichen werden.

Bash Anzahl Einträge zählen
ls -1A /etc | wc -l

-1 erzwingt eine Zeile pro Eintrag, -A blendet . und .. aus, wc -l zählt die Zeilen. So lässt sich die Anzahl der Einträge in einem Verzeichnis ermitteln — wobei für reine Skripte find /etc -maxdepth 1 -mindepth 1 | wc -l robuster ist (siehe Stolperfallen).

Stolperfallen

ls-Ausgabe niemals in Skripten parsen

Die Ausgabe von ls ist für Menschen gedacht, nicht für Maschinen. Dateinamen können Leerzeichen, Tabulatoren, Newlines oder Steuerzeichen enthalten — alles davon zerlegt eine Pipe wie ls | while read f; … in falsche Stücke. Für Skripte sind find -print0 mit xargs -0 oder Shell-Globs die richtige Wahl: for f in *.txt; do …; done ist sicher, weil die Shell die Expansion vornimmt.

ls mit Glob versagt bei sehr vielen Dateien

Bei Tausenden von Dateien expandiert die Shell den Stern zu einer riesigen Argumentliste — und stößt am Limit ARG_MAX an, sichtbar als argument list too long. Abhilfe: ls ohne Glob (zeigt sowieso alles), oder für gefilterte Operationen find . -maxdepth 1 -name ‘*.log’ -print0 | xargs -0 ….

Aliases verbergen das wahre Default-Verhalten

Auf den meisten Distributionen ist ls als Alias konfiguriert — typischerweise ls —color=auto, manchmal mit zusätzlichen Flags wie —group-directories-first. In Skripten oder via SSH auf einer minimalen Maschine fehlt diese Vorbelegung plötzlich, und plötzliches Verhalten („wo sind die Farben hin?”) überrascht. Mit command ls oder einem vorangestellten Backslash (\ls) umgehst du den Alias und siehst das Original-Verhalten.

Time-Format weicht zwischen Distros und Locales ab

Ohne —time-style entscheidet GNU ls heuristisch: Dateien jünger als sechs Monate bekommen Mon DD HH:MM, ältere Mon DD YYYY. Das Format hängt zudem an der Locale — auf einem deutschen System siehst du Mai, auf einem englischen May. Für reproduzierbare Ausgaben (z. B. in Logs oder Doku) explizit —time-style=long-iso setzen.

-h wirkt nur in Kombination mit -l oder -s

ls -h alleine zeigt keine Größen an — die werden erst mit -l (Long-Format) oder -s (Block-Größe pro Eintrag) ausgegeben. Wer „menschenlesbare Größen” will, schreibt also ls -lh. Vergessene Kombinationen sind ein Klassiker, der zu „warum ist nichts passiert?”-Momenten führt.

BSD-ls auf macOS ist nicht GNU-ls

macOS kommt mit dem BSD-ls, das einige Optionen anders oder gar nicht kennt — etwa —color=auto (BSD nutzt -G), —time-style oder —group-directories-first. Wer macOS-Skripte auf Linux laufen lässt (oder umgekehrt), stolpert hier. Lösung: Coreutils nachinstallieren (brew install coreutils liefert gls), oder bewusst nur POSIX-Optionen nutzen.

ls -la | grep … ist ein Anti-Pattern

Beliebt, um schnell „nur die .txt-Dateien” zu sehen, aber problembehaftet: grep arbeitet auf der formatierten ls-Ausgabe, matcht also auch in Owner-, Gruppen- oder Datumsspalten. Für Filterung nach Namen ist Globbing (ls -la *.txt) korrekt; für komplexe Bedingungen find. Nur wenn du explizit nach Berechtigungen oder Eigentümer suchst, ist die ls | grep-Pipeline akzeptabel — dann aber bewusst.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Dateisystem

Zur Übersicht