Linux-Praxisbuch/ df
Der Befehl df ist die Abkürzung von disk free und gibt den freien Speicherplatz auf der Festplatte oder einem anderen Datenträger an.
Durch "df -a" wird eine Liste aller Dateisysteme und deren Speicherbelegung ausgegeben.
Per Voreinstellung wird der Platz in Blöcken von 1K Größe angegeben. Ist die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, dann werden 512-Byte-Blöcke benutzt.
Beispiel
Bearbeitendf -m (in Megabytes)
*Filesystem 1M-blocks Used Available Use% Mounted on */dev/hdb6 1742 1129 522 68% / */dev/hdb2 291 224 52 81% /old */dev/hdb7 581 327 224 59% /oldvar */dev/hdb8 1149 1077 13 99% /home */dev/hda2 8447 560 7458 7% /space
Optionen
Bearbeiten-a, --all
Einschließlich Dateisysteme von 0 Blöcken Größe.
--block-size=GROESSE
Verwendung von GROESSE großen Blöcken.
-h, --human-readable
Ausgabe von Größen in menschenlesbarem Format (z.B. 1K 234M 2G).
-H, --si
Wie -h, aber mit 1000 statt 1024 als Teiler.
-i, --inodes
Auflisten der INode-Information statt der Block-Benutzung.
-k, --kilobytes
Verwendung von 1024-Byte-Blöcken.
-l, --local
Begrenzung der Liste auf lokale Dateisysteme.
-m, --megabytes
Verwendung von 1048576-Byte-Blöcken.
--no-sync
Kein Aufruf von sync(2) vor Erlangen der Benutzungs-Information. (Standardvorgabe)
-P, --portability
Verwendung des POSIX-Ausgabeformates.
--sync
Aufruf von sync(2) vor Erlangen der Benutzungs-Information.
-t, --type=TYP
Begrenzen der Liste auf Dateisysteme des Typs TYP.
-T, --print-type
Ausgabe des Dateisystemtypen.
-x, --exclude-type=TYP
Begrenzen der Liste auf Dateisysteme nicht vom Typ TYP.
-v
(ignoriert)
--help
Anzeigen einer kurzen Hilfe und beenden.
--version
Ausgabe der Versionsinformation und beenden.
Hilfe
Bearbeitenman df df --help
Links
Bearbeiten- http://www.linux-user.de/ausgabe/2001/04/085-zubefehl/df_du.html
- http://www.linux-ag.de/linux/LHB/node41.html
Unter einem Dateisystem ganz allgemein können Sie sich die Organisation von Dateien und Verzeichnissen auf einem physikalischen Gerät, z. B. Festplatte, CD-ROM oder Diskette, vorstellen. Schauen Sie sich die Struktur Ihres Linux-Systems an: Ausgehend vom Wurzelverzeichnis / (Schrägstrich -- nicht zu verwechseln mit /root, dem Homeverzeichnis des Users root) gibt es Unterverzeichnisse wie /etc oder /home, die wiederum darunterliegende Verzeichnisse haben usw. Der Begriff "Dateisystem" taucht auch in einem anderen Zusammenhang auf: wenn es um einen bestimmten Typ von Dateisystem geht. Das Standarddateisystem unter Linux heißt beispielsweise ext2 (steht für "extended filesystem, Version 2"), ab Windows 95 gibt es vfat, ntfs ermöglicht Lesezugriff auf Windows NT-Partitionen, usw.
No space left on device? Jetzt sind Sie gefragt: Tippen Sie einfach mal df (steht für "disk free"), um mehr über die Auslastung Ihres Systems zu erfahren:
huhn@asteroid:~$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 46664 31348 12907 71% / /dev/hda5 280005 57209 208340 22% /var /dev/hda6 3937220 1499304 2237912 40% /usr /dev/hda7 5866360 367476 5200880 7% /opt /dev/hda8 19283304 6432372 11871372 35% /home /dev/hdb1 521808 521784 24 100% /mnt/c /dev/hdb5 5756032 5700228 55804 99% /mnt/d
In dieser Tabelle sehen Sie viele verschiedene Informationen auf einen Blick: /dev/hda2 ist z. B. der Name einer Partition, weiterhin sehen Sie, wie groß die Partition ist und wieviele Blöcke davon benutzt oder noch frei sind. Dahinter kommt eine Prozent-Angabe, wieviel im Verhältnis zum gesamten Platz benutzt ist, und als letzte Information der Ort, wohin das Dateisystem gemountet ist. Wenn Ihnen die Darstellung in 1 kB-Blöcken zu unübersichtlich ist, probieren Sie die Option df -h (für --human-readable). Dabei wird auf- oder abgerundet in die nächstliegende Einheit: 46664 kB werden also als 46M ausgegeben oder 3937220 kB als 3.8G. Der Nachteil an dieser Variante: die Zeilen sind in unterschiedlichen Einheiten dargestellt -- durch das Runden werden die Angaben ungenauer. Natürlich können Sie auch selbst entscheiden, ob die Belegung in kB oder MB angezeigt werden soll: df -k (für --kilobytes) oder df -m (für --megabytes).
Abb. 1: Grafisches df unter GNOME -- gdiskfree
Abb. 2: Grafisches df bei KDE -- kdf
Block: Man sieht hier, dass Dateisysteme in Abschnitte bestimmter Größe gegliedert sind. Hier werden die Blöcke 1 kB groß dargestellt, d. h. 1024 Bytes. Wenn Sie beispielsweise wissen möchten, wieviele Bytes tatsächlich in der Partition /dev/hda2 vorhanden sind, multiplizieren Sie einfach 46664 mit 1024: 47783936 Bytes.
mounten: bezeichnet das "Einhängen" eines Dateisystems in einen Gesamtdateibaum. Anders als unter DOS und Windows gibt es unter Unix keine Laufwerksbuchtaben, vielmehr wird jede Partition irgendwo unterhalb des sogenannten Root-Verzeichnisses (Wurzelverzeichnis) angelegt.
Viele von den mitgelieferten Optionen des Kommandos df werden Sie nicht für den Alltag am Linux-Rechner benötigen. Dazu gehören df -a (steht für --all), womit auch "Pseudo"-Filesysteme dargestellt werden wie die Prozessinformationen unter /proc, oder df -l (Langform: --local), womit aus dem Netz gemountete Dateisysteme bei der Anzeige weggelassen werden.
Das Ei-node des Kolumbus... Es kommt vor, dass die Meldung "No space left on device" angezeigt wird, aber keineswegs eine hundertprozentige Auslastung des Dateisystems erreicht ist. Um diesem Rätsel auf die Spur zu kommen, sollten Sie einiges über die internen Organisation von Unix-Dateisystemen wissen. Eine Datei hat im wesentlichen zwei Eigenschaften: Sie belegt Platz im Dateisystem (physikalischer Speicher), und sie hat mindestens einen Namen. Verzeichnisse sind streng genommen Dateien, die Links zu anderen Dateien oder Verzeichnissen enthalten. Der Eintrag einer Datei im Verzeichnis besteht aus einem Namen und einer sogenannten "Knotennummer" -- der i-node.
Jedes Dateisytem besitzt ein Inhaltsverzeichnis, in dem alle enthaltenen Dateien verzeichnet sind. Die Einträge, i-nodes genannt, enthalten Informationen über Dateien. In diesen Informationsknoten werden in 128 Bytes alle Verwaltungsinformationen der Files (mit Ausnahme des Dateinamens) gespeichert:
Typ und Zugriffsrechte (normale Datei, Verzeichnis, Gerätedatei, Symlink, lesen, schreiben, ausführen)
Referenzzähler (Anzahl der Namen, die auf die Datei zeigen; man kann dieselbe physikalische Datei mit mehreren Namen versehen -- Hardlink)
Dateieigentümer und Gruppenzugehörigkeit
Größe in Bytes
Erstellungsdatum
Modifikationsdatum
Datum des letzten Zugriffs
Zeiger auf den physikalischen Datenbereich
Hardlink: Von mehreren Stellen in Verzeichnissen wird auf denselben i-node einer Datei verwiesen. Daher haben alle Hardlinks einer Datei dieselben Besitzer, Gruppen, Zugriffsrechte usw.
Die Auslastung dieses "Inhaltsverzeichnisses", der i-node Liste, erhalten Sie mit df -i:
huhn@asteroid:~$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda2 12048 7333 4715 61% / /dev/hda5 72288 6314 65974 9% /var /dev/hda6 500960 131580 369380 26% /usr /dev/hda7 746304 11 746293 0% /opt /dev/hda8 2452800 14423 2438377 1% /home /dev/hdb1 0 0 0 - /mnt/c /dev/hdb5 0 0 0 - /mnt/d
Die Größe des Inhaltsverzeichnisses wird beim Erstellen des Dateisystems festgelegt, dieses Verzeichnis kann also "überlaufen", obwohl noch Platz da ist -- wenn man viele kleine Dateien hat, wie z. B. News-Artikel. Wenn Sie also wissen, dass viele kleine Dateien oder symbolische Links angelegt werden sollen, können Sie eine größere i-node-Dichte wählen.
Whodunnit? Machen Sie sich auf die Suche nach den Files, die den Speicherplatz belegen -- in welchem Verzeichnis des Dateisystems sitzen die Übeltäter? Das Programm du liefert Informationen über den Speicherbedarf von Dateien und Verzeichnissen. Wenn Sie in Ihrem Home-Verzeichnis einfach nur du an der Kommandozeile aufrufen, fliegen die Daten nur so über den Bildschirm -- es darf also ruhig etwas gezielter sein. Ein du *.html untersucht nur die Dateien, die auf .html enden. Gezielt auf ein Verzeichnis losgelassen, werden auch alle untergeordneten Directories mit einbezogen:
huhn@asteroid:~/linux-magazin$ du zubefehl/ 48 zubefehl/zweitefolge 60 zubefehl/erstefolge 52 zubefehl/drittefolge 20 zubefehl/viertefolge 4 zubefehl/fuenftefolge/test ... 2360 zubefehl
Am Schluss steht die Zusammenfassung -- alle Angaben sind standardmäßig in kByte. Wie auch bei df gibt es den Parameter -h (für --human-readable). Wollen Sie nur das Endergebnis, verwenden Sie du -s verzeichnis ("-s" für --summarize: zusammenfassen). Das funktioniert allerdings nicht, wenn Dateien eines bestimmten Typs ausgewählt werden. Ein du fun/bilder/*.jpg listet zwar für alle JPGs den verbrauchten Platz auf, eine Zusammenfassung gibt es hier allerdings nur, wenn die Option -c (oder die Langform --total) verwendet wird. Die Tiefe der zu durchforstenden Verzeichnisse können Sie übrigens auch mit dem Parameter --max-depth=DEPTH (wobei DEPTH durch eine Ziffer ersetzt wird) angeben.
Natürlich ist es manchmal praktisch, ein grafisches Tool von KDE oder Gnome zum Aufstöbern von "Plattenplatzfressern" zu verwenden, der Vorteil der Kommandozeile liegt allerdings in der geschickten Kombination von Befehlen. Schauen Sie sich z. B. einmal sort an. Der Name ist Programm: Hier wird nach von Ihnen vorgegeben Kriterien sortiert. Der Parameter -n bewirkt, dass Zahlen numerisch sortiert werden. Während normalerweise 3 hinter 24 und 24 hinter 115 eingeordnet würde, da die ersten Zeichen (3, 2, 1) relevant sind, wertet sort -n die Zahlen korrekt aus. Die Option -r sortiert in umgekehrter Reihenfolge ("reverse"). Sollte Ihnen also auffallen, dass die /home-Partition fast voll ist, finden Sie den Übeltäter sehr schnell mit dem Aufruf:
asteroid:~# du -s /home/* | sort -rn 6356156 /home/user1 47304 /home/user2 18864 /home/user3 ...
Sie wollen nur die zwei schlimmsten Verbraucher? Dann schalten Sie eben noch ein "| head -n 2" dahinter:
asteroid:~# du -s /home/* | sort -rn | head -n 2 6356156 /home/user1 47304 /home/user2 asteroid:~#