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.

Bash Aktuelles Verzeichnis ausmessen
du -sh .
Output
2.4G    .

Wichtigste Optionen

du hat ein paar Dutzend Optionen, doch im Alltag genügt eine Handvoll. Die folgende Tabelle deckt die wichtigsten ab.

OptionWirkungTypischer Einsatz
-hGrößen menschenlesbar (1.5K, 4.2M, 7G)Praktisch immer mit dabei
-sNur Summe pro Argument, keine Unter-EbenenSchnelle Top-Level-Übersicht
-cZusätzlich eine total-Zeile am EndeMehrere Pfade summieren
--max-depth=NRekursion auf N Ebenen begrenzenGroßen Baum übersichtlich halten
-aAuch einzelne Dateien zeigenGrößte Datei in einem Verzeichnis finden
-xNicht über Filesystem-Grenzen hinausMounts nicht mitzählen
--exclude=PATTERNPfade per Glob ausschließennode_modules, Caches, Backups ignorieren
--apparent-sizeLogische Dateigröße statt Disk-AllokationEchte Datenmenge messen
--bytesGrößen in Bytes statt BlöckenGenaue Werte für Skripte

Klassische Verwendung

Drei Aufrufe decken in der Praxis gefühlt 90 % aller Anwendungsfälle ab.

Bash Top-Level-Übersicht im aktuellen Verzeichnis
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.

Bash Erste Ebene mit Tiefenbegrenzung
du -h --max-depth=1

Die Variante mit --max-depth=1 zeigt zusätzlich die Gesamtsumme des aktuellen Verzeichnisses und ist besonders praktisch, wenn versteckte Verzeichnisse mitzählen sollen.

Bash Top-Liste der größten Pfade
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.

Bash Disk-Verbrauch vs. echte Größe
echo -n "x" > klein.txt
du -h klein.txt
du -h --apparent-size klein.txt
Output
4.0K    klein.txt
1       klein.txt

Das 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.

ModusWas wird gezähltWann nutzen
DefaultTatsächlich belegte Disk-BlöckeWie viel Platz frei wird, wenn ich es lösche?
--apparent-sizeLogische DateigrößeWie viele Daten habe ich wirklich?
-b / --bytesApparent-Size in BytesGenaue 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.

ToolHighlightsHinweis
ncduInteraktiver TUI-Browser, sehr schnell auf großen BäumenQuasi-Standard auf Servern
dustHübscher Output mit Bargraphen, in Rust geschriebencargo install du-dust oder Distro-Paket
gduSehr schneller Scan dank Goroutines, ncdu-ähnliche UIIn Go geschrieben, ideal für große Volumes
dufPendant zu df mit Farben und TabellenNicht 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

/ Weiter

Zurück zu Dateisystem

Zur Übersicht