Am Ende dieser Anleitung können Sie eine Datei, ein leeres Verzeichnis, einen kompletten Verzeichnisbaum sowie Dateien löschen, die Sie nach Name oder Alter filtern. Dabei prüfen Sie jedes Mal vorher das Ziel. In der Kommandozeile gibt es unter Linux keinen Papierkorb: Ein Löschvorgang ist endgültig. Die Vorgehensweise ist deshalb genauso wichtig wie der Befehl selbst.
Voraussetzungen
- Shell-Zugang zu einem Linux-System (lokal oder per SSH), zum Beispiel auf einem Linux-VPS
- Ein Benutzer mit Schreibrechten im betroffenen Verzeichnis (oder
sudo) - Eine aktuelle Sicherung aller wichtigen Daten
Ziel vor dem Löschen prüfen
Wechseln Sie in das richtige Verzeichnis und lassen Sie sich den Inhalt anzeigen. Das dauert zwei Sekunden und verhindert die meisten Unfälle.
Bashpwd ls -la
Bei einem Muster (Endung, Präfix) zeigen Sie zuerst an, welche Dateien betroffen sind. rm verwendet exakt dieselbe Liste.
Bashls -d *.log
Eine Datei löschen
Der Standardbefehl ist rm.
Bashrm report.txt
Mit -i fragt der Befehl vor dem Löschen nach, mit -v gibt er aus, was er entfernt.
Bashrm -iv report.txt
Kontrollieren Sie anschließend mit ls report.txt: Die Meldung „No such file or directory“ bestätigt, dass die Datei gelöscht ist.
Mehrere Dateien löschen
Mit Platzhaltern (Wildcards) der Shell sprechen Sie ganze Gruppen von Dateien an. Listen Sie zuerst mit ls auf und löschen Sie danach.
Bashrm -v *.tmp rm -v photo_{01..05}.jpg
Vermeiden Sie ein nacktes rm * in Verzeichnissen, bei denen Sie sich nicht sicher sind. Beginnt ein Dateiname mit einem Bindestrich, markieren Sie mit -- das Ende der Optionen:
Bashrm -- -strange-file.txt
Ein leeres Verzeichnis löschen
rmdir entfernt ausschließlich leere Verzeichnisse. Das ist Absicht: Der Befehl dient als Sicherung.
Bashrmdir old_folder
Um auch übergeordnete Verzeichnisse zu entfernen, die dadurch leer werden:
Bashrmdir -p project/cache/tmp
Ein Verzeichnis samt Inhalt löschen
Dafür brauchen Sie die rekursive Option -r. Schätzen Sie zuerst ab, was verloren geht.
Bashdu -sh old_project find old_project -type f | wc -l
Anschließend löschen Sie mit Rückfrage:
Bashrm -ri old_project
Bei Tausenden von Dateien wird die Rückfrage unpraktikabel. Die Option -f schaltet sie ab:
Bashrm -rf old_project
Setzen Sie in diesem Befehl niemals eine ungeprüfte Variable ein. Bei rm -rf "$DIR"/ zielen Sie auf das Wurzelverzeichnis, wenn $DIR leer ist. Fügen Sie in Skripten set -u hinzu oder verwenden Sie "${DIR:?}": Das bricht die Ausführung ab, sobald die Variable leer ist.
Dateien nach Alter löschen
find filtert nach genauen Kriterien (Name, Typ, Alter, Größe). Das Prinzip: Zuerst ohne Aktion ausführen, dann -delete ergänzen.
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30
Wenn die Liste Ihren Erwartungen entspricht:
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30 -delete
-mtime +30 steht für Dateien, die vor mehr als 30 Tagen zuletzt geändert wurden. Setzen Sie -delete ans Ende: find wertet die Bedingungen von links nach rechts aus, und ein zu früh platziertes -delete löscht alles.
Sensible Dateien sicherer löschen
rm entfernt den Verzeichniseintrag der Datei, nicht unbedingt die Daten auf dem Datenträger. shred überschreibt den Inhalt vor dem Löschen.
Bashshred -u -v secret.key
Auf SSDs, bei Journaling-Dateisystemen oder Volumes mit Snapshots hat diese Methode Grenzen, weil ältere Daten erhalten bleiben können. Bei wirklich sensiblen Daten bleibt die Verschlüsselung des Datenträgers von Anfang an die verlässliche Lösung.
Häufige Fehler beheben
Permission denied
Sie haben kein Schreibrecht auf das übergeordnete Verzeichnis (dieses steuert das Löschen, nicht die Datei selbst). Prüfen Sie das mit ls -ld DIRECTORY und verwenden Sie bei berechtigtem Anlass sudo:
Bashsudo rm -v /path/to/file
Operation not permitted, auch mit sudo
Vermutlich trägt die Datei das Attribut „immutable“. Lassen Sie es anzeigen, entfernen Sie es und löschen Sie danach die Datei.
Bashlsattr file.txt sudo chattr -i file.txt sudo rm file.txt
Argument list too long
Der Platzhalter hat mehr Argumente erzeugt, als das System akzeptiert. Weichen Sie auf find aus, das die Dateien einzeln verarbeitet:
Bashfind . -maxdepth 1 -type f -name "*.tmp" -delete
Directory not empty oder Device or resource busy
Bei rmdir ist die erste Meldung normal: Das Verzeichnis enthält Dateien, auch versteckte (ls -A). Wird es von einem Mount-Punkt oder einem Prozess verwendet, ermitteln Sie den Verursacher mit lsof +D DIRECTORY oder findmnt und geben ihn frei, bevor Sie es erneut versuchen.
Zum risikofreien Üben eignet sich eine Wegwerf-Instanz: Auf einem VPS können Sie ein Testverzeichnis anlegen und sich folgenlos vertun. Weitere Anleitungen dieser Art finden Sie im Bereich Tutorials.
FAQ
Lässt sich eine mit rm gelöschte Datei wiederherstellen?
Selten und ohne Garantie. Tools wie extundelete oder testdisk finden manchmal noch Daten, wenn Sie sofort aufhören, auf den Datenträger zu schreiben. Verlässlichen Schutz bietet nur eine Sicherung.
Was ist der Unterschied zwischen rm -r und rm -rf?
rm -r löscht rekursiv, fragt aber bei schreibgeschützten Dateien nach. rm -rf erzwingt das Löschen und ignoriert nicht vorhandene Dateien ohne Meldung. Setzen Sie es nur ein, wenn Sie das Ziel bereits geprüft haben.
Wie lösche ich ein Verzeichnis, dessen Name Leerzeichen enthält?
Setzen Sie den Namen in Anführungszeichen oder maskieren Sie die Leerzeichen: rm -r "My folder" oder rm -r My\ folder. Andernfalls behandelt die Shell jedes Wort als eigenes Element.
Gibt es einen Papierkorb für die Kommandozeile?
Ja, mit dem Paket trash-cli (Befehl trash-put). Es verschiebt Elemente in den Papierkorb des Benutzers, statt sie zu löschen. Auf einem Server ist es selten vorinstalliert: Gewöhnen Sie sich daher an, vor dem Löschen aufzulisten.