Wenn eine Partition einer Festplatte plötzlich ungewöhnlich voll ist, beginnt die Ursachensuche. Nicht immer stehen grafische Hilfsmittel zur Verfügung oder gar ein Paketmanager, mit dem Tools genau für diesen Zweck nachinstalliert werden könnten. Auf den meisten Distributionen steht aber du (disk usage – GNU coreutils) zur Verfügung. Mit den passenden Parametern ist du ein äußert praktisches Werkzeug.
Ohne Parameter aufgerufen zeigt du die Größe bzw. die Plattenbelegung des aktuellen Arbeitsverzeichnisses an und bezieht dabei rekursiv Unterverzeichnisse mit ein. Um das zu veranschaulichen, habe ich ein Testverzeichnis mit einigen Dateien und einem Unterverzeichnis mit wiederum einigen Dateien angelegt:
1 2 3 4 5 6 7 8 9 10 11 |
ls -l insgesamt 1444 -rw-r--r-- 1 finn finn 32768 6. Jun 11:21 test1 -rw-r--r-- 1 finn finn 49152 6. Jun 11:21 test2 -rw-r--r-- 1 finn finn 1048576 6. Jun 11:21 test3 -rw-r--r-- 1 finn finn 4096 6. Jun 11:22 test4 -rw-r--r-- 1 finn finn 102400 6. Jun 11:22 test5 -rw-r--r-- 1 finn finn 204800 6. Jun 11:22 test6 -rw-r--r-- 1 finn finn 21504 6. Jun 11:22 test7 -rw-r--r-- 1 finn finn 5120 6. Jun 11:22 test8 drwxr-xr-x 2 finn finn 4096 6. Jun 11:23 testdir |
Ruft man du in diesem Verzeichnis nun auf, wird folgendes gezeigt:
1 2 3 |
du 556 ./testdir 2000 . |
Die links angezeigten Größen sind in Kilobyte angegeben. Die Gesamtgröße beträgt also 2000 KB, wovon 556 auf das Unterverzeichnis testdir entfallen. Bei vielen Unterverzeichnissen ist die Ausgabe vielleicht etwas lang und man möchte nur das Endergebnis angezeigt bekommen. Ebenso ist die Anzeige in Kilobyte nicht immer optimal und man möchte eine passende Einheit verwenden:
1 2 3 |
du -sch 2,0M . 2,0M insgesamt |
Das sieht schon recht brauchbar aus. Wenn man jetzt die größten Dateien im Unterverzeichnis finden möchte, kann du auch mit sort kombiniert werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
du -a | sort -n 4 ./test4 8 ./test8 24 ./test7 24 ./testdir/test9 32 ./test1 36 ./testdir/test11 48 ./test2 56 ./testdir/test12 100 ./test5 200 ./test6 436 ./testdir/test10 556 ./testdir 1024 ./test3 2000 . |
Der Parameter -a zeigt auch Dateien in der Ausgabe an und mit sort -n werden die numerischen Größenangaben zur Sortierung genutzt.
Bei sehr vielen Dateien ist es vielleicht sinnvoll, die Ausgabe mit tail ein wenig zu beschränken:
1 2 3 4 5 6 |
du -a | sort -n | tail -5 200 ./test6 436 ./testdir/test10 556 ./testdir 1024 ./test3 2000 . |
Anstelle der 5 kann natürlich ein beliebiger Wert eingesetzt werden. Kehrt man die Sortierreihenfolge um und nutzt head anstelle von tail , einsteht eine Art Topliste der größten Dateien und Verzeichnisse, was mein persönlicher Favorit ist:
1 2 3 4 5 6 |
du -a | sort -nr | head -5 2000 . 1024 ./test3 556 ./testdir 436 ./testdir/test10 200 ./test6 |
Wie man sieht, lässt sich mit diesen wenigen Befehlen schon eine Menge erreichen. Aber auch ls kann ein wenig dabei helfen, große Dateien in einem Verzeichnis (allerdings ohne Rekursion / Unterverzeichnisse) zu finden:
1 2 3 4 5 6 7 8 9 10 11 |
ls -lS insgesamt 1444 -rw-r--r-- 1 finn finn 1048576 6. Jun 11:21 test3 -rw-r--r-- 1 finn finn 204800 6. Jun 11:22 test6 -rw-r--r-- 1 finn finn 102400 6. Jun 11:22 test5 -rw-r--r-- 1 finn finn 49152 6. Jun 11:21 test2 -rw-r--r-- 1 finn finn 32768 6. Jun 11:21 test1 -rw-r--r-- 1 finn finn 21504 6. Jun 11:22 test7 -rw-r--r-- 1 finn finn 5120 6. Jun 11:22 test8 -rw-r--r-- 1 finn finn 4096 6. Jun 11:22 test4 drwxr-xr-x 2 finn finn 4096 6. Jun 11:23 testdir |
Eine weitere Alternative ist find , welches man nutzen kann, um Dateien ab einer bestimmten Größe, hier beispielsweise ab 100 KB, zu finden:
find -size +100k ./test6 ./testdir/test10 ./test3
Wer es ein wenig komortabler haben möchte, sollte ich ncdu ansehen, von dem ich einmal im fryboyter.de ncdu Beitrag gelesen habem.
Danke für die Tipps. Immer wieder erstaunlich, was man mit ein paar kleinen Bash-Kommandos alles erreichen kann.
Ich hätte da noch folgendes Problem. Ich habe einen Ordner, in dem sich JPEG- und Raw-Fotos befinden. Ich möchte jetzt im Terminal ermitteln, wie groß insgesamt die JPEG-Dateinen sind, also alle summiert. Bin da letztens an dieser auf den ersten Blick vermeintlich einfachen Aufgabe gescheitert. Hat jemand eine Lösung? Wäre sehr dankbar dafür.
du -ch *.jpg | tail -n1
du -c gibt zusätzlich zu den Dateien und ihrer Größe eine Zeile mit der Summe aus, -h human-readable
tail -n1 gibt nur die letzte Zeile aus, in der steht die Summe
Hey super. Vielen Dank! Werde das gleich mal testen 🙂
du -sh * | sort -h
du: -s = summarize -h = human-readable
sort: -h = –human-numeric-sort
Top, deutlich eleganter!
Falls man nicht nur Ordner sondern auch Dateien betrachten möchte:
du -ha | sort -h
Ich empfehle da einfach das kleine shell programm
„ncdu“
du -sh /* | grep „G\s“
und dann dem großen G den Baum runter folgen.