rm — Dateien und Verzeichnisse löschen
Praxis-Guide zu rm: Dateien und Verzeichnisse löschen, sicher mit -i/-I, rekursiv mit -rf und gefährliche Befehle wie rm -rf / vermeiden.
rm (remove) löscht Dateien und Verzeichnisse aus dem Dateisystem – und zwar endgültig: Anders als beim Verschieben in den Papierkorb landet hier nichts in einem Zwischenspeicher, gelöschte Daten lassen sich ohne Backup nicht wiederherstellen. Im Alltag brauchst du rm, um temporäre Dateien, alte Logs oder ganze Projektordner loszuwerden. Genau wegen seiner Endgültigkeit lohnt es sich, die sicheren Varianten zu kennen: rm -i fragt vor jeder Datei nach, rm -I warnt einmalig bei großen oder rekursiven Löschungen. Besondere Vorsicht gilt bei rm -rf in Kombination mit Variablen oder Glob-Mustern – ein leeres $VAR oder ein versehentliches /* kann ganze Systeme auslöschen.
Grundlegendes Löschen
rm <file> — Löscht eine einzelne Datei.
rm temp.txtrm <file1> <file2> <file3> — Löscht mehrere Dateien auf einmal.
rm old.log debug.log error.logrm *.tmp — Löscht alle Dateien, die auf ein Glob-Muster passen.
rm *.tmprm -v <file> — Ausführlicher Modus. Gibt jede Datei aus, während sie gelöscht wird.
rm -v *.logInteraktives & sicheres Löschen
rm -i <file> — Interaktiver Modus. Fragt vor jeder Datei nach Bestätigung.
rm -i important-data.*rm -I <files> — Fragt einmalig nach, bevor mehr als 3 Dateien oder rekursiv gelöscht wird.
rm -I *.logrm --interactive=once <files> — Wie -I. Fragt einmalig bei Massenlöschungen nach.
rm --interactive=once /tmp/session_*rm -f <file> — Erzwingt das Löschen. Fragt nie nach und ignoriert nicht vorhandene Dateien.
rm -f lockfile.pidVerzeichnisse löschen
rm -r <directory> — Löscht ein Verzeichnis samt allem Inhalt rekursiv.
rm -r ./old-project/rm -rf <directory> — Löscht ein Verzeichnis rekursiv und ohne Nachfrage. Mit äußerster Vorsicht verwenden.
rm -rf ./build/rm -ri <directory> — Löscht ein Verzeichnis rekursiv, mit Bestätigung für jede Datei.
rm -ri ./unknown-folder/rm -d <directory> — Löscht ein leeres Verzeichnis. Schlägt fehl, wenn es nicht leer ist.
rm -d ./empty-dir/rmdir <directory> — Löscht ein leeres Verzeichnis (eigenständiges Kommando, wie rm -d).
rmdir ./empty-dir/rmdir -p <path/to/nested/dir> — Löscht ein Verzeichnis und seine leeren übergeordneten Verzeichnisse.
rmdir -p ./a/b/c/Sicherheitsoptionen
rm --preserve-root — Verweigert rekursives Arbeiten auf /. Dies ist das Standardverhalten.
rm -rf --preserve-root /some/path/rm --preserve-root=all — Lehnt zusätzlich jedes Argument ab, das ein Mountpoint ist.
rm -rf --preserve-root=all /mnt/data/rm --one-file-system -r <directory> — Überspringt beim rekursiven Löschen Verzeichnisse auf anderen Dateisystemen.
rm -rf --one-file-system /var/tmp/Sonderfälle
rm -- <file> — Löscht eine Datei, deren Name mit einem Bindestrich beginnt. Das -- signalisiert das Ende der Optionen.
rm -- -strange-filename.txtrm ./-<file> — Alternative: Eine mit Bindestrich beginnende Datei löschen, indem du ./ voranstellst.
rm ./-strange-filename.txtrm -f <file_with_special_chars> — Erzwingt das Löschen von Dateien mit Sonderzeichen im Namen.
rm -f 'file with spaces.txt'find <dir> -inum <inode> -delete — Löscht eine Datei anhand ihrer Inode-Nummer. Letzter Ausweg bei nicht löschbaren Dateinamen.
ls -i; find . -inum 1234567 -deleteSuchen & gezielt löschen
find <dir> -name '<pattern>' -delete — Findet und löscht Dateien nach Namensmuster. Schneller als -exec rm.
find . -name '*.tmp' -deletefind <dir> -name '<pattern>' -type f -delete — Löscht nur Dateien (keine Verzeichnisse), die auf ein Muster passen.
find . -name '.DS_Store' -type f -deletefind <dir> -empty -type d -delete — Löscht alle leeren Verzeichnisse innerhalb eines Baums.
find ./project/ -empty -type d -deletefind <dir> -mtime +<days> -delete — Löscht Dateien, die älter als N Tage sind.
find /var/log/ -name '*.log' -mtime +90 -deletefind <dir> -size +<size> -delete — Löscht Dateien, die größer als eine bestimmte Größe sind.
find /tmp/ -size +100M -deletefind <dir> -name '<pattern>' -print -delete — Gibt jede Datei vor dem Löschen aus (Kontrollausgabe).
find . -name '*.bak' -print -deletefind <dir> -name '<pattern>' -print0 | xargs -0 rm -v — Findet und löscht Dateien sicher mit ausführlicher Ausgabe. Kommt mit Leerzeichen in Dateinamen zurecht.
find . -name '*.cache' -print0 | xargs -0 rm -vSicherere Alternativen
mv <file> /tmp/ — Statt Löschen nach /tmp verschieben. Dateien werden beim Neustart aufgeräumt.
mv suspicious-file.dat /tmp/trash-put <file> — Verschiebt eine Datei in den Papierkorb (Paket trash-cli). Lässt sich später wiederherstellen.
trash-put document.pdftrash-list — Listet alle Dateien im Papierkorb auf (trash-cli).
trash-listtrash-restore — Stellt interaktiv eine Datei aus dem Papierkorb wieder her (trash-cli).
trash-restoretrash-empty — Leert den Papierkorb endgültig (trash-cli).
trash-emptyalias rm='rm -I' — Shell-Alias, der vor Massenlöschungen immer nachfragt.
alias rm='rm -I'Gefährliche Befehle, die du vermeiden solltest
rm -rf / — NIEMALS AUSFÜHREN. Versucht, das gesamte Dateisystem zu löschen. Wird durch das standardmäßige --preserve-root blockiert.
# DO NOT RUN — destroys your entire systemrm -rf /* — NIEMALS AUSFÜHREN. Umgeht --preserve-root, indem /* zu einzelnen Pfaden expandiert. Löscht alles.
# DO NOT RUN — the glob expansion bypasses root protectionrm -rf $VARIABLE/ — GEFÄHRLICH, wenn die Variable leer oder nicht gesetzt ist. Expandiert zu rm -rf / und löscht alles.
# ALWAYS quote and check: rm -rf "${DIR:?Variable not set}/"rm -rf "${DIR:?}"/* — Sicheres Muster. Das :? lässt die Shell mit einem Fehler abbrechen, falls DIR leer oder nicht gesetzt ist.
DIR=/var/cache/app; rm -rf "${DIR:?Variable not set}"/* Fazit
rm ist mächtig und endgültig: Es kennt keinen Papierkorb, und einmal gelöschte Daten sind ohne Backup verloren. Für den Alltag reichen meist rm <datei>, rm -r <verzeichnis> und beim Aufräumen die find … -delete-Muster. Mach dir die gefährlichen Fälle bewusst: rm -rf mit einer leeren Variable, einem versehentlichen Leerzeichen vor / oder einem /* kann ein ganzes System auslöschen. Zwei einfache Gewohnheiten schützen dich – quote und prüfe Variablen mit "${DIR:?}", und setze einen alias rm='rm -I', damit die Shell vor Massenlöschungen nachfragt. Wenn du Wiederherstellbarkeit brauchst, nutze trash-cli statt rm.
Weiterführende Links
- GNU Coreutils: rm – offizielle Referenz zu allen Optionen (englisch)
- ubuntuusers-Wiki: rm – deutschsprachige Einführung mit Praxisbeispielen