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.

BeispielBearbeiten

df -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

OptionenBearbeiten

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

HilfeBearbeiten

man df
df --help

LinksBearbeiten


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:~#