Linux / Befehl du: Datei- und Verzeichnis-Datenträgernutzung überprüfen

du schätzt den von Dateien und Verzeichnissen belegten Speicherplatz. Mit du -h --max-depth=1 . prüfen Sie die Nutzung im aktuellen Verzeichnis bis zur ersten Unterebene; du -sh . zeigt nur die Gesamtsumme. Standardmäßig zählt der Befehl zugewiesene Blöcke und nicht die logische Dateilänge.

du -h --max-depth=1 .
du -sh .

Das Standardverhalten von du basiert auf den tatsächlich im Dateisystem zugewiesenen Blöcken und nicht auf der scheinbaren Größe des Datei-Inhalts. Bei Sparse-Dateien, komprimierten Dateisystemen, Hardlinks und Copy-on-Write-Umgebungen können die Zahlen von denen abweichen, die von anderen Werkzeugen erzeugt werden.

Was berechnet der du-Befehl?

du steht für die Festplattennutzung und durchläuft Datei- und Verzeichnisbäume, um die Festplattennutzung zu summieren. Da sie nicht nur vom Dateiinhalt, sondern auch von der Methode der Blockzuweisung des Dateisystems beeinflusst wird, stimmt sie nicht immer mit der von ls -l angezeigten Dateigröße überein.

Optionen und Berechnungsgrenzen finden Sie in der offiziellen Dokumentation von GNU Coreutils du.

Am häufigsten verwendete Grundbefehle

Überprüfen Sie die Gesamtgröße des aktuellen Verzeichnisses

du -sh .

-s zeigt nur die Gesamtsumme an, während -h in für Menschen lesbaren Einheiten wie KiB, MiB, GiB anzeigt. Versteckte Dateien und versteckte Verzeichnisse sind ebenfalls in der Gesamtsumme des aktuellen Verzeichnisses enthalten.

Überprüfen Sie die Größe einzelner Elemente direkt darunter

du -h --max-depth=1 .

--max-depth=1 zeigt bis zu einer Ebene unter dem Ausgangspunkt an. In GNU du können Sie es auch kurz als -d 1 schreiben, aber andere Unix-Varianten unterstützen dies möglicherweise nicht.

Große Elemente durch Sortieren finden

du -h --max-depth=1 /var | sort -h

sort -h sortiert unter Berücksichtigung der für Menschen lesbaren Einheiten. Um große Elemente oben anzuzeigen, verwenden Sie sort -hr.

du -h --max-depth=1 /var | sort -hr

Verzeichnisse ohne Berechtigung können Fehler erzeugen, und die Summe kann unvollständig sein. Führen Sie dies nur mit den entsprechenden Berechtigungen für den erforderlichen Umfang aus, und verstecken Sie Fehler nicht einfach und interpretieren Sie die Ergebnisse nicht als vollständige Werte.

Zusammenfassung der wichtigsten Optionen

Option Funktion Beispiele für die Nutzung
-h Anzeige in für Menschen lesbaren Einheiten du -h /var/log
-s Nur die Summe jedes Arguments anzeigen du -sh /var/log
-a Nicht nur Verzeichnisse, sondern auch Dateien anzeigen du -ah ./data
-c Am Ende eine Gesamtsumme hinzufügen du -ch file1 file2
-d N Geben Sie die maximale Verzeichnistiefe an, die angezeigt werden soll du -h -d 2 .
-x Nicht auf andere Dateisysteme übergreifen du -xhd1 /
--exclude Pfadnamen ausschließen, die einem Muster entsprechen du -sh --exclude='*.log' .
--apparent-size Angezeigte Größe statt zugewiesenem Speicher anzeigen du -sh --apparent-size file

Dateien und Verzeichnisse detailliert durchsuchen

Alle Dateien anzeigen

du -ah ./data | sort -hr | head -n 20

Nützlich, um schnell höherstufige Elemente in kleinen Verzeichnissen zu finden. Auf großen Dateisystemen kann es jedoch viel Festplatten-I/O und Speicher verbrauchen, da alle Pfade durchlaufen und sortiert werden.

Nur Einträge ab einer Mindestgröße anzeigen

du -h --threshold=1G ./data

Die Option --threshold von GNU du gibt bei einem positiven Grenzwert nur Einträge mit mindestens dieser Größe aus. Manche Distributionen oder andere Unix-Implementierungen unterstützen sie möglicherweise nicht; prüfen Sie bei erforderlicher Portabilität du --help.

Bestimmte Dateien oder Verzeichnisse ausschließen

du -sh --exclude='*.log' --exclude='cache' .

Es ist sicher, das Muster für --exclude in einfache Anführungszeichen zu setzen, um zu verhindern, dass die Shell es zuerst erweitert. Wenn es viele Ausschlussregeln gibt, können Sie eine Datei mit einer Regel pro Zeile erstellen und --exclude-from verwenden.

du -sh --exclude-from=du-exclude.txt .

Der Unterschied zwischen tatsächlicher Nutzung und scheinbarer Größe

Grundlegende Festplattennutzung

Die grundlegende du summiert die vom Dateisystem den Dateien zugewiesenen Blöcke. Auch sehr kleine Dateien können mindestens die Mindestblockgröße an Speicherplatz verwenden, und die Metadaten der Datei oder die interne Struktur des Dateisystems sind möglicherweise nicht vollständig im Ergebnis widerspiegelt.

Angezeigte Größe

--apparent-size zeigt bei regulären Dateien einen Wert, der der logischen Länge des Inhalts nahekommt.

du -h sample.img
du -h --apparent-size sample.img

Sparse-Dateien können eine sehr große logische Größe haben, aber fast keine tatsächlichen Blöcke verwenden. Umgekehrt kann in Umgebungen mit Dateisystemkompression, Deduplizierung, Snapshots oder Copy-on-Write-Shared-Blöcken die grundlegende du auch vom tatsächlichen Verbrauch auf dem physischen Gerät abweichen.

Hardlinks

Wenn mehrere Pfade auf denselben Inode als Hardlinks zeigen, zählt GNU du standardmäßig den Speicherplatz derselben Datei nur einmal. Je nach Reihenfolge, in der mehrere Argumente übergeben werden, kann die Nutzung verschiedenen Pfaden zugeschrieben werden. Die Verwendung von Optionen, die jeden Link separat berechnen, kann zu einer Summe führen, die größer ist als die tatsächlich eindeutigen Blöcke.

Begrenzung von Dateisystemgrenzen

Andere Einhängepunkte überspringen

Beim Untersuchen des Root-Dateisystems verhindert die Verwendung von -x oder --one-file-system das Hinabsteigen in andere Dateisysteme.

du -xhd1 /

Diese Option reduziert die Wahrscheinlichkeit, unbeabsichtigt Netzwerkdateisysteme, separate Datenvolumes oder virtuelle Dateisysteme zu durchlaufen. Die Verwendung separater Einhängepunkte ist jedoch von den Ergebnissen ausgeschlossen, stellen Sie also sicher, dass es mit Ihrem Untersuchungszweck übereinstimmt.

Umgang mit symbolischen Links

Standardmäßig folgt du nicht den Zielen symbolischer Links in Befehlszeilenargumenten oder innerhalb von Verzeichnissen. Optionen zum Folgen von Links können große Mengen anderer Verzeichnisse oder Dateisysteme durchlaufen, prüfen Sie daher die Zielstruktur, bevor Sie sie verwenden.

Gründe, warum sich du- und df-Ergebnisse unterscheiden

Die Berechnungsziele sind unterschiedlich

du summiert die Dateien in Verzeichnissen, auf die es zugreifen kann, während df die Nutzung für das gesamte Dateisystem meldet. Unterschiede können aufgrund von Dateisystem-Metadaten, reservierten Blöcken, Snapshots oder Pfaden, die aufgrund von Berechtigungen nicht gelesen werden können, auftreten.

Gelöschte, aber geöffnete Dateien

Wenn eine Datei gelöscht wird, während ein Prozess sie geöffnet hat, kann du die Datei nicht finden, wenn nur der Pfad gelöscht wird. Die Blöcke werden jedoch erst freigegeben, wenn der Prozess die Datei schließt, sodass df sie weiterhin als verwendet anzeigt. Sie können gelöschte offene Dateien wie folgt prüfen.

lsof +L1

Beenden Sie den Zielprozess nicht gewaltsam. Überprüfen Sie stattdessen den normalen Neustart des Dienstes und die Protokollwiedereröffnungsverfahren. Willkürliches Manipulieren des Dateideskriptors einer gelöschten Datei kann zu Datenverlust oder Dienstunterbrechung führen.

Wie man sicher und genau verwendet

  • Überprüfen Sie zunächst das gesamte Dateisystem mit df -h, und führen Sie dann du innerhalb des jeweiligen Einhängepunkts aus.
  • Wenn Sie von der Wurzel aus untersuchen, entscheiden Sie, ob Sie andere Dateisysteme mit -x ausschließen.
  • Für große Verzeichnisse führen Sie die Untersuchung schrittweise mit begrenzter Tiefe während Zeiten geringer Arbeitsbelastung durch.
  • Wenn es Berechtigungsfehler gibt, erfassen Sie die Tatsache, dass die Ergebnisse unvollständig sind, und verwenden Sie nur die unbedingt notwendigen Berechtigungen.
  • Bevor Sie eine Datei löschen, überprüfen Sie den zugehörigen Prozess, die Sicherung, die Aufbewahrungsrichtlinie und ob eine Wiederherstellung möglich ist.
  • Dateinamen können Sonderzeichen wie Zeilenumbrüche enthalten, daher sollten Sie die Verwendung einer Kombination von Tools in Betracht ziehen, die NUL-Trennung in der Automatisierung unterstützen.

Häufig gestellte Fragen

Sind versteckte Dateien in den du-Ergebnissen enthalten?

Wenn Sie das Verzeichnis selbst angeben, etwa mit du -sh ., werden versteckte Einträge mitgezählt. Das übliche Shell-Muster * erfasst Punktdateien dagegen standardmäßig nicht; du -sh * kann sie daher auslassen.

Wie kann ich schnell die größten Verzeichnisse finden?

Überprüfen Sie Schritt für Schritt mit du -h --max-depth=1 target | sort -hr. Dies kann die Last und die Ausgabe im Vergleich zur Sortierung aller Dateien im gesamten Verzeichnisbaum auf einmal reduzieren.

Warum sind die Größen zwischen du -sh und ls -lh unterschiedlich?

ls -lh zeigt hauptsächlich die logische Länge der Dateien an, während die Standardanzeige du die zugewiesenen Datei-System-Blöcke zeigt. Unterschiede können aufgrund von Sparse-Dateien, kleinen Dateien und Blockgrößen auftreten.

Ist es in Ordnung, die Fehlermeldung 'Zugriff verweigert' zu verbergen?

Während es den Bildschirm sauberer machen kann, verschwindet dadurch auch die Tatsache, dass die Ergebnisse unvollständig sind. Bei Kapazitätsuntersuchungen ist es sicherer, zunächst den Pfad zu überprüfen, an dem der Fehler aufgetreten ist, und den Grund sowie den Umfang der erforderlichen Berechtigungen zu prüfen.

Zusammenfassung

du -sh path zeigt die Gesamtmenge an, und du -h --max-depth=1 path zeigt die Nutzung jedes einzelnen Elements direkt darunter. Beim Suchen nach großen Elementen sollte es mit sort -hr kombiniert werden, und -x sollte verwendet werden, um andere Dateisysteme auszuschließen.

Der Wert von du ist eine Schätzung, die von der Dateisystemstruktur und der Zuweisungsmethode beeinflusst wird. Wenn es eine Abweichung zu df gibt, müssen gelöschte offene Dateien, reservierte Blöcke, Snapshots und Berechtigungsprobleme überprüft werden.