Der Befehl du (kurz für „disk usage”) summiert den Speicherverbrauch von Dateien und Verzeichnissen — rekursiv, in 1024-Byte-Blöcken und nach Wunsch in menschenlesbarer Form. Er ist das klassische Werkzeug, um auf einem System schnell herauszufinden, welche Verzeichnisse den meisten Platz belegen, ohne erst eine grafische Analyse-Anwendung starten zu müssen.
Was du macht
du läuft rekursiv durch ein Verzeichnis und addiert die Größen aller enthaltenen Dateien. Standardmäßig zählt es belegte Disk-Blöcke in Einheiten von 1024 Byte — also den tatsächlich auf der Platte beanspruchten Platz, nicht zwingend die logische Dateigröße. Ohne weitere Optionen gibt du für jedes Unterverzeichnis eine Zeile aus und ganz am Ende die Gesamtsumme des angegebenen Pfads.
Der Unterschied zu df ist wichtig: du arbeitet dateibasiert und summiert von unten nach oben durch den Verzeichnisbaum. df dagegen liest Filesystem-Metadaten und zeigt die Belegung ganzer Mounts. Die beiden Werte können auseinanderlaufen — etwa wenn gelöschte Dateien noch von Prozessen offen gehalten werden.
du -sh .2.4G .Wichtigste Optionen
du hat ein paar Dutzend Optionen, doch im Alltag genügt eine Handvoll. Die folgende Tabelle deckt die wichtigsten ab.
| Option | Wirkung | Typischer Einsatz |
|---|---|---|
-h | Größen menschenlesbar (1.5K, 4.2M, 7G) | Praktisch immer mit dabei |
-s | Nur Summe pro Argument, keine Unter-Ebenen | Schnelle Top-Level-Übersicht |
-c | Zusätzlich eine total-Zeile am Ende | Mehrere Pfade summieren |
--max-depth=N | Rekursion auf N Ebenen begrenzen | Großen Baum übersichtlich halten |
-a | Auch einzelne Dateien zeigen | Größte Datei in einem Verzeichnis finden |
-x | Nicht über Filesystem-Grenzen hinaus | Mounts nicht mitzählen |
--exclude=PATTERN | Pfade per Glob ausschließen | node_modules, Caches, Backups ignorieren |
--apparent-size | Logische Dateigröße statt Disk-Allokation | Echte Datenmenge messen |
--bytes | Größen in Bytes statt Blöcken | Genaue Werte für Skripte |
Klassische Verwendung
Drei Aufrufe decken in der Praxis gefühlt 90 % aller Anwendungsfälle ab.
du -sh *-s summiert pro Argument, -h liefert menschenlesbare Werte, und das Glob * weitet die Argumente auf alle nicht-versteckten Einträge auf. Das Ergebnis ist eine Zeile pro Top-Level-Verzeichnis mit dessen Gesamtgröße.
du -h --max-depth=1Die Variante mit --max-depth=1 zeigt zusätzlich die Gesamtsumme des aktuellen Verzeichnisses und ist besonders praktisch, wenn versteckte Verzeichnisse mitzählen sollen.
du -ah | sort -h | tail -n 20-a schließt Einzeldateien ein, sort -h sortiert menschenlesbare Größen korrekt (1G nach 999M), und tail schneidet die Top 20 ab. Damit findest du in einem unbekannten Verzeichnis innerhalb weniger Sekunden die Speicherfresser — egal ob Datei oder Verzeichnis.
Apparent-Size vs. Disk-Verbrauch
Eine wichtige Eigenheit von du: Es zählt standardmäßig belegte Blöcke, nicht die logische Dateigröße. Auf den meisten Linux-Dateisystemen ist die kleinste Allokationseinheit 4096 Byte (4 KiB). Eine Datei mit nur einem Byte Inhalt belegt deshalb trotzdem einen kompletten 4-KiB-Block — und genau diesen Wert meldet du.
echo -n "x" > klein.txt
du -h klein.txt
du -h --apparent-size klein.txt4.0K klein.txt
1 klein.txtDas andere Extrem sind Sparse Files — Dateien mit logischen „Löchern”, die auf der Platte gar keinen Platz beanspruchen. VM-Disk-Images und manche Datenbank-Dateien sind oft sparse: Eine 100-GB-Image-Datei mit nur 5 GB tatsächlichen Daten meldet du als 5 GB, du --apparent-size aber als 100 GB.
| Modus | Was wird gezählt | Wann nutzen |
|---|---|---|
| Default | Tatsächlich belegte Disk-Blöcke | Wie viel Platz frei wird, wenn ich es lösche? |
--apparent-size | Logische Dateigröße | Wie viele Daten habe ich wirklich? |
-b / --bytes | Apparent-Size in Bytes | Genaue Werte für Skripte und Vergleiche |
Alternativen
Das klassische du ist überall verfügbar, aber für interaktive Analysen gibt es deutlich angenehmere Werkzeuge. Hier die wichtigsten in der Übersicht.
| Tool | Highlights | Hinweis |
|---|---|---|
| ncdu | Interaktiver TUI-Browser, sehr schnell auf großen Bäumen | Quasi-Standard auf Servern |
| dust | Hübscher Output mit Bargraphen, in Rust geschrieben | cargo install du-dust oder Distro-Paket |
| gdu | Sehr schneller Scan dank Goroutines, ncdu-ähnliche UI | In Go geschrieben, ideal für große Volumes |
| duf | Pendant zu df mit Farben und Tabellen | Nicht für Pfad-Analyse, aber für Mount-Übersichten |
Für reines Scripting und Plattform-Unabhängigkeit bleibt du aus den GNU-Coreutils die richtige Wahl. Für die tägliche Suche nach Speicherfressern lohnt sich aber die Installation von ncdu oder dust.
Besonderheiten
du -s auf * übersieht Dotfiles
Das Glob * wird von der Shell expandiert — und die schließt versteckte Einträge (.git, .cache, …) standardmäßig aus. Die Summen-Zeile von du -sh * kann darum deutlich kleiner sein als die echte Verzeichnisgröße. Wer alles sehen will, nutzt du -sh .[!.]* * oder gleich du -sh . für die Gesamtsumme.
du und ls -l melden unterschiedliche Größen
ls -l zeigt die logische Dateigröße (apparent size), du die belegten Disk-Blöcke. Bei vielen kleinen Dateien klafft die Lücke schnell auf — 1000 Ein-Byte-Dateien sind laut ls 1000 Byte, laut du aber 4 MiB (1000 × 4 KiB). Beide Werte sind korrekt, sie messen nur Verschiedenes.
Hardlinks zählen nur einmal — abhängig von der Reihenfolge
du verfolgt Inodes und vermeidet Doppelzählung von Hardlinks. Welche Hardlink-Instanz die Größe „erbt”, hängt aber von der Traversal-Reihenfolge ab — die nachfolgenden Treffer melden 0. Auf den ersten Blick wirkt das verwirrend, ist aber korrekt: Eine Datei mit fünf Hardlinks belegt nur einmal Platz.
--exclude muss vor dem Pfad-Argument stehen
GNU du wertet —exclude erst aus, wenn es vor dem zu analysierenden Pfad steht. du /var —exclude=cache funktioniert, du /var/log —exclude=*.gz dagegen ebenfalls — aber du . —exclude=node_modules mit Glob-Expansion durch die Shell kann tricky sein. Im Zweifel das Pattern in Anführungszeichen setzen: —exclude=“node_modules”.
du / spammt Permission-Denied-Fehler
Auf einem System-Root läuft du in Verzeichnisse, die nur Root lesen darf — und schreibt jeweils einen Fehler nach STDERR. Mit du / 2>/dev/null wird der Lärm unterdrückt; für ein vollständiges Bild lohnt sich sudo du -xh —max-depth=1 / mit -x, um Mounts wie /proc oder /sys auszublenden.
Genauigkeit für Skripte: --bytes statt -h
Menschenlesbare Werte runden — 1.5G kann alles zwischen 1.45 G und 1.54 G sein. Für Vergleiche, Schwellwerte oder Logging verwendet man du —bytes (oder -b), das exakte Byte-Werte liefert. Beachte, dass —bytes implizit —apparent-size aktiviert.
Weiterführende Ressourcen
Externe Quellen
- du(1) – Manpage (man7.org) — Vollständige Optionsreferenz des GNU-
du - GNU Coreutils: du invocation — Detaillierte Erklärung mit Beispielen
- ncdu – NCurses Disk Usage — Interaktiver Disk-Usage-Browser
- dust – a more intuitive du — Rust-basierte Alternative mit hübscher Ausgabe
- gdu – Go Disk Usage — Schneller Disk-Usage-Analyzer mit TUI
Verwandte Artikel
- df – Filesystem-Belegung — Komplementär: Mount-Ebene statt Datei-Ebene
- ls – Dateien auflisten — Größen einzelner Dateien anzeigen
- find – Dateien suchen — Gezielt große Dateien aufspüren
- stat – Datei-Metadaten — Detailinfos zu einer einzelnen Datei
- Linux Dateisystem — Wie Linux Dateien organisiert