Raspberry Pi 3 – größte Dateien ausgeben
In diesem Beitrag zeig ich wie man am Raspberry Pi 3 die größte Dateien ausgeben kann. Das ist vor allem dann sinnvoll, wenn der Speicher der SD Karte langsam knapp wird. Beim Löschen startet man idealerweise mit wenigen, aber großen Dateien. Doch wo liegen diese?
Raspberry Pi 3 – größte Dateien ausgeben
Für den Anwendungsfall einer Speicherknappheit ist die Kommandozeile unter Linux hilfreich. Im grafischen Datei Explorer findet man große Dateien schnell über die Filterung nach Größe, doch das funktioniert nur für den aktuellen Ordner. Im folgenden Bild wird das demonstriert. Die größte Datei heißt in diesem Fall Xvnc-core und ist 9 MB groß. Doch ist diese die größte Datei auf der SD Karte? Natürlich nicht.
Abfrage über gesamte SD Karte
Auf der Kommandozeile bekommen wird Informationen über Dateien mit dem „du“ Kommando (disc usage). Das Äquivalent zum Explorer sieht auf der Kommandozeile wie folgt aus:
auf der Kommandozeile wird folgendes eingegeben:
du -a . | sort -n -r | head -n 5
Was bedeutet das? Zuerst zum Ergebnis. Es werden die 5 größten Dateien absteigend Sortiert ausgegeben. Wir befinden uns beim Aufruf im /usr/bin Verzeichnis (wie oben im Bild im Explorer). Das Ergebnis zeigt die Datei „.“ mit fast 109 MB als größte Datei an. Unter Linux ist alles eine Datei, so auch „.“ (der Zeiger auf das aktuelle Verzeichnis) und „..“ (der Zeiger auf das höhere Verzeichnis). „.“ liefert und die Information über den Speicherplatzverbrauch über alle Dateien im Verzeichnis. Der zweite Treffer ist eine „echte“ Datei und unsere zuvor gefundene Xvnc-core mit 9 MB (9180 KB).
Aufruf im Detail
Der Aufruf auf der Kommandozeile besteht aus 3 unterschiedlichen Programmen deren Ausgaben jeweils mit der so genannten Pipe „|“ zur Eingabe des nächsten (rechts stehenden) Programms werden. Es kommen folgende Programme der Reihe nach zum Einsatz:
- du
disc usage gibt alle Dateien mit benötigten Speicherplatz in KB in einer Liste aus. -a als Parameter gibt alle Dateien aus, nicht nur Verzeichnisse. „.“ legt den Startpunkt der rekursiven Ausgabe fest. - sort
sort erlaubt die Sortierung von Listen. Mit dem Parameter -n definieren wir eine numerische Sortierung, -r legt die Reihenfolge fest. Es wird absteigend eine Zahl sortiert. - head
head gibt von einer Liste eine bestimmte Anzahl Zeilen aus. In unserem Fall durch den Parameter -n 5 die ersten 5 Zeilen
Wer jetzt ganz genau gelesen hat wird merken, dass wir bereits die gesuchte Funktionalität schon fast abgebildet haben. Diese Kombination aus 3 Programmen liefert bereits das Ergebnis nach einer rekursiven Suche. Im obigen Beispiel werden ab /usr/bin alle Verzeichnisse und Unterverzeichnisse nach großen Dateien durchsucht. Zufälligerweise ist Xvnc-core aus dem bin Verzeichnis auch in der Hierarchie die größte Datei. Um nun die 5 größten Dateien der SD Karte zu finden geben wir als Startpunkt einfach den root vom Dateisystem an:
find / -type f -exec du -a {} 2>/dev/null + | sort -n -r | head -n 5
Moment, das sieht jetzt aber komplizierter aus. Tatsächlich habe ich noch eine Optimierung hinzugefügt. du gibt auch Verzeichnisse aus, das macht keinen Sinn für uns, wir wollen die größten Dateien finden. Deshalb werden mit dem find Kommando alle Dateien ab dem root (/) weg gesucht die vom Typ f sind (eine Datei und kein Ordner). Das Ergebnis wird mit dem bereits vorgestellten du weiter bearbeitet und danach in der Kette über die Pipe sortiert und gefiltert. Wichtig ist noch der Aufruf von
2>/dev/null
das macht die Fehlerausgaben unsichtbar. Bei einer Suche ab root kommt die Suche an Ordner vorbei die geschützt sind. Man kann den kompletten Aufruf als root aufrufen (mit einem sudo davor), doch das macht nur die Liste an Fehlern etwas kürzer. In meinem Fall ist die größte Datei auf der SD Karte eines laufenden Raspbian Linux: chromium-browser, dicht gefolgt von der Auslagerungsdatei vom RAM Speicher.
Fazit
In diesem ausführlichen Exkurs habe ich gezeigt mit welchem Kommando man auf der Kommandozeile am Raspberry Pi 3 die größte Datei auf der SD Karte findet. Da das Kommando eine Kombination aus mehreren Kommandozeilen Programme ist wurde die Herleitung detailliert beschrieben. Ich hoffe das ist so auch für Linux Anfänger nachvollziehbar.
Welche Datei ist bei euch der größte Platzverschwender?