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.
lsDocuments Downloads Music Pictures projekte.txtls /etcWichtigste 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.
| Option | Wirkung | Typischer Einsatz |
|---|---|---|
-l | Long-Format: Berechtigungen, Owner, Größe, Datum | Standardansicht für Detailinfos |
-a | Alle Einträge inkl. . und .. und Dotfiles | Komplette Übersicht eines Verzeichnisses |
-A | Wie -a, aber ohne . und .. | Dotfiles ohne den Navigations-Lärm |
-h | Größen menschenlesbar (1.5K, 4.2M, 7G) | Immer mit -l kombinieren |
-S | Nach Größe sortieren (größte zuerst) | Speicherfresser finden |
-t | Nach Zeitstempel sortieren (neueste zuerst) | Was wurde zuletzt geändert? |
-r | Sortierung umkehren | Z. B. -tr für älteste zuerst |
-R | Rekursiv durch Unterverzeichnisse | Baumartige Auflistung |
--color=auto | Farben nur bei Terminal-Ausgabe | In Aliases meist Standard |
-1 | Eine Spalte, ein Eintrag pro Zeile | Saubere Ausgabe in Pipes |
-d | Verzeichnis selbst statt Inhalt | Mit */ nur Verzeichnisse anzeigen |
-i | Inode-Nummer voranstellen | Hardlinks und Dateisystem-Debugging |
-F | Typ-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.
ls -l-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/hostsVon links nach rechts:
- Modus-Block — Erstes Zeichen ist der Dateityp (
-reguläre Datei,dVerzeichnis,lSymlink,c/bGeräte,sSocket,pNamed Pipe). Die folgenden neun Zeichen sind die Berechtigungen für Owner, Group und Others — Details siehe Berechtigungen. - Hardlink-Anzahl — Wie viele Verzeichniseinträge auf denselben Inode zeigen. Bei Verzeichnissen mindestens 2 (Eintrag selbst plus
.). - Owner — Benutzername des Eigentümers.
- Group — Gruppe, der die Datei zugeordnet ist.
- Größe — In Bytes, mit
-hmenschenlesbar. Bei Verzeichnissen die Größe des Verzeichniseintrags, nicht des Inhalts. - Datum/Zeit — Standardmäßig
mtime(letzte Inhaltsänderung). Mit--time=atimeoder--time=ctimeumschaltbar. - 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.
ls -lhSls -ltls -ltrFür gefilterte Ausgaben übernimmt die Shell das Globbing — ls bekommt nur die expandierten Dateinamen geliefert:
ls -l *.txtls -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.
ls -a-a zeigt zusätzlich . (das aktuelle Verzeichnis) und .. (das übergeordnete) an. Das ist meist Lärm, deshalb gibt es die Variante -A:
ls -AIm 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:
echo $LS_COLORSeval "$(dircolors ~/.dircolors)"Wer mehr Komfort möchte — Icons, Git-Status, Baumansicht — greift zu modernen Alternativen:
| Tool | Highlights | Hinweis |
|---|---|---|
| eza | Aktiver Nachfolger von exa, Git-Integration, Icons | Aus den meisten Repos installierbar |
| exa | Vorgänger von eza, ähnliche Features | Wird nicht mehr gepflegt |
| lsd | Bunter Drop-in-Ersatz, Tree-Modus | In 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.
ls -lahSLong-Format mit allen Dateien, menschenlesbaren Größen und Sortierung nach Größe — der Klassiker, um in einem unbekannten Verzeichnis schnell die Speicherfresser zu erkennen.
ls -ltrSortiert 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.
ls -la --time-style=long-isolong-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.
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
- ls(1) – Manpage (man7.org) — Vollständige Optionsreferenz des GNU-
ls - GNU Coreutils: ls invocation — Detaillierte Erklärung aller Schalter mit Beispielen
- Arch Wiki: Core utilities — Übersicht über
lsund verwandte Coreutils - eza – modernes ls — Aktiv gepflegter Nachfolger mit Git-Integration und Icons
Verwandte Artikel
- cd – Verzeichnis wechseln — Navigation zwischen Verzeichnissen
- cp – Dateien kopieren — Dateien und Verzeichnisse duplizieren
- mv – Dateien verschieben — Verschieben und Umbenennen
- find – Dateien suchen — Robuste Alternative zum Parsen von
ls - Linux Berechtigungen — Den Modus-Block aus
ls -lverstehen - Linux Verzeichnisstruktur — Das FHS und wohin Dateien gehören