Linux aufräumen — Speicher freigeben mit apt, snap und flatpak
Irgendwann zeigt jedes Linux-System Zeichen des Vollwerdens: Installationen die niemand mehr braucht, Cache-Dateien aus Monaten, alte Kernel, snap-Revisionen die still vor sich hin lagern. Ich räume meinen Rechner jeden ersten Sonntag im Monat auf. Dauert zehn Minuten und hält das System schlank. Das passiert nicht durch Fahrlässigkeit, sondern weil Paketverwaltungen und Anwendungen standardmäßig auf Sicherheit setzen — und Löschen nie automatisch passiert. Dieser Artikel zeigt dir Schritt für Schritt, wie du mit wenigen Befehlen mehrere Gigabyte freischaufelst, ohne wichtige Daten zu verlieren.
Wie voll ist mein System wirklich?
Bevor du anfängst zu löschen, brauchst du eine Bestandsaufnahme. Drei Befehle geben dir einen vollständigen Überblick — von der Partition bis zum einzelnen Verzeichnis.
df -h: Überblick über alle Partitionen
df -h zeigt den belegten und freien Speicher aller eingehängten Dateisysteme. Das Flag -h (human-readable) gibt die Werte in GB und MB aus statt in rohen 1-Kilobyte-Blöcken.
$ df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda1 50G 38G 9,5G 81% /
tmpfs 2,0G 1,2M 2,0G 1% /run
/dev/sda15 253M 5,8M 247M 3% /boot/efi
Eine Auslastung über 80% auf / ist ein klares Signal zum Handeln. Ich bin mal sorglos an 95% rangefahren — apt konnte keine Updates mehr installieren, und der Login-Bildschirm hat sich aufgehängt. Seitdem ist 80% meine persönliche Schmerzgrenze. Unter 10% freier Platz kann bei ext4 die Performance spürbar beeinträchtigen: Das Dateisystem reserviert standardmäßig 5% des Platzes für den Root-Nutzer, damit Systemdienste auch bei vollem Benutzerbereich noch schreiben können. Diese Reserve zählt als belegt — du hast also tatsächlich weniger als angezeigt zur Verfügung.
du -sh: Platzfresser aufspüren
du (disk usage) zeigt den Speicherbedarf von Verzeichnissen. Mit -s (summary) bekommst du eine einzige Zahl statt einer rekursiven Liste, mit -h in lesbarem Format. Die typischen Verdächtigen im Vergleich:
$ du -sh ~/.cache
1,8G /home/gunter/.cache
$ du -sh ~/.local/share/flatpak
4,2G /home/gunter/.local/share/flatpak
$ sudo du -sh /var/cache/apt/archives
823M /var/cache/apt/archives
$ sudo du -sh /var/log
256M /var/log
Für eine sortierte Übersicht aller Toplevel-Verzeichnisse — um wirklich nichts zu übersehen — hilft dieser Einzeiler:
$ du -sh /* 2>/dev/null | sort -rh | head -20
Das 2>/dev/null unterdrückt Fehlermeldungen bei Verzeichnissen ohne Leseberechtigung. sort -rh sortiert nach Größe absteigend.
ncdu: Interaktive Alternative
ncdu ist ein Terminal-Dateimanager mit Fokus auf Speicherverbrauch. Im Gegensatz zu du zeigt es eine navigierbare Baumansicht — du kannst Verzeichnisse aufklappen, siehst sofort die Größenverhältnisse und kannst Einträge direkt mit d löschen.
$ sudo apt install ncdu
$ ncdu /
Besonders nützlich wenn du nicht weißt, wo der Platz geblieben ist: ncdu durchsucht das gesamte Dateisystem und zeigt interaktiv die größten Verzeichnisse zuerst.
apt aufräumen
APT (Advanced Package Tool) ist die Paketverwaltung auf Debian, Ubuntu und deren Derivaten. Mit der Zeit sammeln sich drei Arten von Ballast an: nicht mehr benötigte Abhängigkeiten, veraltete Kernel-Versionen und heruntergeladene Installationsdateien die längst installiert sind.
Nicht mehr benötigte Pakete entfernen
apt autoremove entfernt Pakete, die als Abhängigkeiten automatisch installiert wurden und nach Deinstallation des Hauptpakets übrig geblieben sind. Das ist der häufigste stille Platzfresser auf Systemen die regelmäßig aktualisiert werden — auf einem aktiven Ubuntu-System summiert das sich leicht auf 500 MB bis 2 GB.
$ sudo apt autoremove
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertig
Die folgenden Pakete werden ENTFERNT:
libpython3.10 linux-headers-5.15.0-91 linux-image-5.15.0-91-generic ...
0 aktualisiert, 0 neu installiert, 14 zu entfernen und 0 nicht aktualisiert.
Nach dieser Operation werden 1.234 MB Plattenplatz freigegeben.
--purge werden zusätzlich Konfigurationsdateien der entfernten Pakete gelöscht. Das ist in der Regel sicher: sudo apt autoremove --purge
Paket-Cache leeren
APT lädt .deb-Dateien vor der Installation herunter und speichert sie in /var/cache/apt/archives/. Nach der Installation bleiben sie dort — als Cache für eventuelle Neuinstallationen ohne Internet. Zwei Befehle helfen hier je nach Situation:
apt autoclean— löscht nur Pakete, für die es bereits neuere installierte Versionen gibt. Die aktuellen Caches bleiben erhalten.apt clean— leert den Cache vollständig. Pakete werden beim nächsten Installieren neu heruntergeladen. Auf Systemen mit stabiler Internetverbindung problemlos.
$ sudo apt autoclean
Paketlisten werden gelesen... Fertig
$ sudo apt clean
# Kein Output — /var/cache/apt/archives/ ist jetzt leer
Für den Alltag reicht autoclean. Bei akutem Platzmangel nimm clean.
Alte Kernel entfernen
Bei jedem Kernel-Update installiert Ubuntu eine neue Version parallel zur alten. Das ist sinnvoll: Falls der neue Kernel Probleme macht, kannst du beim Booten die alte Version wählen. Nach mehreren Updates lagern aber schnell 2–4 GB an Kernel-Paketen herum die niemand mehr braucht.
Zunächst den aktuell genutzten Kernel ermitteln:
$ uname -r
6.8.0-52-generic
Dann alle installierten Kernel-Images auflisten:
$ dpkg --list | grep linux-image
ii linux-image-6.8.0-51-generic 6.8.0-51.52 amd64
ii linux-image-6.8.0-52-generic 6.8.0-52.53 amd64 ← aktiv, nicht löschen!
rc linux-image-5.15.0-91-generic 5.15.0-91 amd64 ← rc = entfernbar
Pakete mit Status rc (removed, config remains) sind bereits deinstalliert — ihre Konfigurationsdateien lassen sich mit dpkg --purge entfernen. Pakete mit ii sind vollständig installiert. Den alten aktiven Kernel entfernst du so:
$ sudo apt remove linux-image-6.8.0-51-generic linux-headers-6.8.0-51-generic
$ sudo update-grub
uname -r). Behalte außerdem immer mindestens einen Fallback — Kernel-Probleme sind ohne Boot-Option schwer zu debuggen.
snap aufräumen
snap speichert von jedem Paket standardmäßig die letzten zwei Revisionen: eine aktive und eine als Rollback-Option. Das klingt nach wenig, summiert sich aber auf Systemen mit vielen snap-Paketen schnell auf 5 GB und mehr — jede Revision ist eine vollständige Kopie des Pakets mit allen Abhängigkeiten.
Alle snap-Revisionen anzeigen
$ snap list --all
Name Version Rev Tracking Publisher Notes
firefox 124.0.1 4336 latest/stable mozilla -
firefox 123.0.1 4290 latest/stable mozilla disabled
snapd 2.63 21759 latest/stable canonical snapd
vlc 3.0.20 3605 latest/stable videolan -
vlc 3.0.18 3564 latest/stable videolan disabled
Revisionen mit disabled im Notes-Feld sind die alten Versionen. Sie belegen Platz, werden aber beim Start nicht mehr genutzt.
Alte Revisionen mit Script entfernen
snap hat keinen eingebauten Befehl für „alle alten Revisionen löschen“. Dieses kleine Script erledigt das automatisch mit awk und einer while-Schleife:
#!/bin/bash
# snap-cleanup.sh — entfernt alle disabled snap-Revisionen
snap list --all | awk '/disabled/{print $1, $3}' |
while read name revision; do
sudo snap remove "$name" --revision="$revision"
done
Speichere es, mach es ausführbar und starte es:
$ chmod +x snap-cleanup.sh
$ ./snap-cleanup.sh
firefox (revision 4290) removed
vlc (revision 3564) removed
snap-Cache leeren
snap legt außerdem Pakete in einem eigenen Cache ab. Dieser kann bedenkenlos geleert werden:
$ du -sh /var/lib/snapd/cache
1,1G /var/lib/snapd/cache
$ sudo rm -rf /var/lib/snapd/cache/*
flatpak aufräumen
flatpak-Anwendungen werden mit allen Laufzeit-Abhängigkeiten (Runtimes) ausgeliefert — das macht sie von der System-Distribution unabhängig, aber auch speicherhungrig. Eine einzige GNOME-Runtime kann 600–800 MB belegen. Wenn Anwendungen deinstalliert werden oder auf neuere Runtimes wechseln, bleiben die alten Runtimes als Waisen zurück.
Nicht mehr genutzte Runtimes entfernen
$ flatpak uninstall --unused
Suche nach nicht genutzten Refs...
ID Branch Op
1. org.freedesktop.Platform 22.08 r
2. org.gnome.Platform 44 r
Fortfahren? [J/n]: J
Removing: org.freedesktop.Platform/x86_64/22.08...
Removing: org.gnome.Platform/x86_64/44...
Freed: 1,7 GB
Der Befehl ist sicher: Er entfernt nur Runtimes die kein installiertes Paket mehr benötigt. Aktive Anwendungen bleiben unangetastet.
flatpak-Installation reparieren
Nach Updates oder abgebrochenen Installationen können inkonsistente Zustände entstehen. flatpak repair behebt das ohne Datenverlust:
$ flatpak repair
Suche nach verwaisten Refs...
Überprüfe Checksummen...
Fertig.
Benutzerdaten aufräumen
Programme hinterlassen in deinem Home-Verzeichnis beträchtliche Datenmengen: Browser-Caches, Thumbnails, Papierkorb-Inhalte und System-Logs. Der Vorteil: Diese Daten gehören dir, also brauchst du kein sudo.
Browser- und Thumbnail-Cache leeren
Der Ordner ~/.cache enthält ausschließlich regenerierbare Daten — er kann bedenkenlos vollständig geleert werden. Bei mir waren das nach sechs Monaten über 4 GB. Allein der Firefox-Cache hat 1,2 GB verschlungen. Typische Inhalte: Browser-Caches (Firefox, Chromium), Thumbnail-Vorschauen für den Dateimanager, Paket-Metadaten, Sprachmodelle von Anwendungen.
$ du -sh ~/.cache
1,8G /home/gunter/.cache
$ rm -rf ~/.cache/*
Beim nächsten Start deiner Anwendungen werden Caches automatisch neu aufgebaut. Thumbnails in Nautilus erscheinen beim nächsten Öffnen eines Bilderordners wieder.
Papierkorb leeren
Der Linux-Papierkorb liegt unter ~/.local/share/Trash/. Wer regelmäßig Dateien löscht aber den Papierkorb nie leert, sammelt hier schnell Gigabyte an:
$ du -sh ~/.local/share/Trash
2,3G /home/gunter/.local/share/Trash
$ rm -rf ~/.local/share/Trash/*
System-Logs reduzieren mit journalctl
systemd-journald sammelt alle System- und Service-Logs in /var/log/journal/. Ohne explizite Konfiguration kann dieses Verzeichnis auf 4 GB und mehr anwachsen. Zwei nützliche Optionen:
# Logs auf maximal 500 MB begrenzen (älteste werden gelöscht):
$ sudo journalctl --vacuum-size=500M
Vacuuming done, freed 1.2G of archived journals.
# Oder nur Logs jünger als 2 Wochen behalten:
$ sudo journalctl --vacuum-time=2weeks
Vacuuming done, freed 856M of archived journals.
Um das dauerhaft zu begrenzen, trage in /etc/systemd/journald.conf ein:
[Journal]
SystemMaxUse=500M
Danach sudo systemctl restart systemd-journald — ab dann hält journald die Logs automatisch unter 500 MB.
Docker aufräumen (Bonus)
Falls du Docker installiert hast, ist es oft der mit Abstand größte Platzfresser auf dem System: Gestoppte Container werden nicht automatisch gelöscht, Images bleiben nach Versions-Updates liegen, Build-Cache wächst bei aktivem Entwickeln auf mehrere Gigabyte. Ein Blick auf den aktuellen Stand:
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 23 8 14.2GB 8.7GB (61%)
Containers 5 2 1.3GB 890MB
Volumes 12 4 4.1GB 2.8GB
Build Cache 47 0 2.3GB 2.3GB (100%)
Mit einem Befehl alles entfernen was nicht aktiv genutzt wird:
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 6,1GB
Mit --volumes werden zusätzlich anonyme Volumes entfernt. Vorsicht: Wenn Datenbankdaten in anonymen Volumes liegen, gehen sie verloren. Prüfe vorher mit docker volume ls welche Volumes existieren und ob sie noch gebraucht werden.
Aufräum-Script: alles in einem Durchlauf
Die wichtigsten Befehle als Script zusammengefasst — mit Bestätigung vor jedem Schritt damit nichts ungewollt passiert. Das Script überspringt Docker und snap wenn die Programme nicht installiert sind.
#!/bin/bash
# cleanup.sh — Linux Speicher freigeben
# bin-bash.de
set -e
echo "=== Linux Aufräum-Script ==="
df -h / | tail -1 | awk '{print "Vor dem Aufräumen: " $4 " frei von " $2}'
echo ""
echo "[1/6] APT: Nicht benötigte Pakete entfernen"
read -rp " Fortfahren? [j/N] " antwort
[[ "$antwort" =~ ^[jJ]$ ]] && sudo apt autoremove --purge -y || echo " Übersprungen."
echo ""
echo "[2/6] APT: Paket-Cache leeren"
read -rp " Fortfahren? [j/N] " antwort
[[ "$antwort" =~ ^[jJ]$ ]] && sudo apt clean && echo " Fertig." || echo " Übersprungen."
echo ""
if command -v snap &>/dev/null; then
echo "[3/6] snap: Alte Revisionen entfernen"
read -rp " Fortfahren? [j/N] " antwort
if [[ "$antwort" =~ ^[jJ]$ ]]; then
snap list --all | awk '/disabled/{print $1, $3}' |
while read name revision; do
sudo snap remove "$name" --revision="$revision"
done
echo " Fertig."
else
echo " Übersprungen."
fi
else
echo "[3/6] snap: nicht installiert — übersprungen."
fi
echo ""
if command -v flatpak &>/dev/null; then
echo "[4/6] flatpak: Nicht genutzte Runtimes entfernen"
read -rp " Fortfahren? [j/N] " antwort
[[ "$antwort" =~ ^[jJ]$ ]] && flatpak uninstall --unused -y || echo " Übersprungen."
else
echo "[4/6] flatpak: nicht installiert — übersprungen."
fi
echo ""
echo "[5/6] Cache leeren (~/.cache)"
read -rp " Fortfahren? [j/N] " antwort
[[ "$antwort" =~ ^[jJ]$ ]] && rm -rf ~/.cache/* && echo " Fertig." || echo " Übersprungen."
echo ""
echo "[6/6] Journal-Logs: Alles älter als 2 Wochen löschen"
read -rp " Fortfahren? [j/N] " antwort
[[ "$antwort" =~ ^[jJ]$ ]] && sudo journalctl --vacuum-time=2weeks || echo " Übersprungen."
echo ""
echo "=== Fertig! ==="
df -h / | tail -1 | awk '{print "Nach dem Aufräumen: " $4 " frei von " $2}'
Speichere das Script als cleanup.sh, mach es ausführbar und starte es:
$ chmod +x cleanup.sh
$ ./cleanup.sh
Am Ende vergleichst du den freien Platz vor und nach dem Aufräumen direkt in der Ausgabe.
Zusammenfassung: Was bringt wie viel?
Zur Orientierung: Was du realistisch auf einem Ubuntu-Desktop nach 6–12 Monaten Betrieb freischaufeln kannst:
- apt autoremove + clean: 500 MB – 2 GB, je nach Installations-Historie
- Alte Kernel: 500 MB – 2 GB pro Kernel-Version
- snap alte Revisionen: 1–5 GB bei vielen installierten snaps
- flatpak –unused: 1–3 GB wenn mehrere Runtimes veraltet sind
- ~/.cache leeren: 500 MB – 3 GB, abhängig von Browser-Nutzung
- journalctl –vacuum: 200 MB – 2 GB auf aktiven Systemen
Zusammen sind 5–15 GB realistisch — ohne eine einzige eigene Datei zu löschen.
Weiterführende Seiten
- Grundlegende Linux-Kommandos — alle Befehle aus diesem Artikel und mehr im Überblick
- Das Linux-Dateisystem — wie Partitionen, Verzeichnisstruktur und Mount-Points funktionieren