So löschen Sie Dateien und Verzeichnisse im Linux-Terminal

Die Kommandozeilenbefehle rm und rmdir sind grundlegende Werkzeuge zum Entfernen von Dateien und Verzeichnissen in Linux, macOS und ähnlichen Betriebssystemen. Sie stellen Pendants zu den Befehlen del und deltree in Windows und DOS dar. Diese Befehle sind sehr leistungsfähig und bieten zahlreiche Optionen für die differenzierte Steuerung des Löschvorgangs.

Es ist von entscheidender Bedeutung, zu beachten, dass gelöschte Dateien und Verzeichnisse nicht in einen Papierkorb verschoben werden. Stattdessen werden sie unwiderruflich vom Speichermedium entfernt. Eine versehentliche Löschung mit rm oder rmdir erfordert daher eine Wiederherstellung aus einem Backup, da die Dateien nicht auf einfache Weise zurückgeholt werden können.

Dateien mit dem Befehl rm entfernen

Der einfachste Anwendungsfall ist das Löschen einer einzelnen Datei im aktuellen Arbeitsverzeichnis. Hierfür geben Sie rm, gefolgt von einem Leerzeichen und dem Dateinamen ein:

rm datei_1.txt

Befindet sich die zu löschende Datei in einem anderen Verzeichnis, ist der vollständige oder relative Pfad anzugeben:

rm ./pfad/zur/datei/datei_1.txt

Sie können mehrere Dateinamen gleichzeitig an rm übergeben, um eine Vielzahl von Dateien mit einem einzigen Befehl zu entfernen:

rm datei_2.txt datei_3.txt

Platzhalter wie * (für mehrere Zeichen) und ? (für ein einzelnes Zeichen) können genutzt werden, um Dateigruppen auszuwählen. Der folgende Befehl löscht beispielsweise alle PNG-Bilddateien im aktuellen Verzeichnis:

rm *.png

Dieser Befehl entfernt alle Dateien mit einer einzelnen Zeichenerweiterung (z.B. Datei.1 und Datei.2, aber nicht Datei.12):

rm *.?

Schreibgeschützte Dateien führen zu einer Sicherheitsabfrage, die mit y (Ja) oder n (Nein) und der Eingabetaste bestätigt werden muss.

Um das Risiko von unbeabsichtigten Löschungen durch Platzhalter zu reduzieren, empfiehlt sich die Option -i (interaktiv). Diese erzwingt eine individuelle Bestätigung für jede zu löschende Datei:

rm -i *.dat

Die Option -f (force) unterdrückt diese Abfrage und löscht Dateien ohne Rückfrage, auch schreibgeschützte:

rm -f dateiname

Verzeichnisse mit rm entfernen

Um leere Verzeichnisse zu löschen, verwenden Sie die Option -d (directory). Platzhalter können auch hier wie bei Dateinamen verwendet werden:

rm -d verzeichnis

Mehrere leere Verzeichnisse können mit einem einzigen Befehl gelöscht werden:

rm -d verzeichnis1 verzeichnis2 /pfad/zu/verzeichnis3

Nicht-leere Verzeichnisse werden mit der Option -r (rekursiv) entfernt. Dabei werden das Verzeichnis selbst sowie alle darin enthaltenen Dateien und Unterverzeichnisse gelöscht:

rm -r verzeichnis1 verzeichnis2 verzeichnis3

Auch hier kann die Bestätigungsabfrage unterdrückt werden, indem die Optionen -r und -f kombiniert werden:

rm -rf verzeichnis

Bei der Nutzung von rm -rf ist größte Vorsicht geboten, da ein falscher Befehl zu Datenverlust oder sogar Systemfehlern führen kann. Um die Verzeichnisstruktur besser zu überblicken, kann der Befehl tree verwendet werden. Dieser kann über den Paketmanager installiert werden (z.B. mit sudo apt-get install tree unter Debian/Ubuntu). Das resultierende Diagramm verdeutlicht die Hierarchie und kann bei der Entscheidungsfindung helfen.

tree

Ebenso kann der tree Befehl mit dem Pfad zu einem bestimmten Verzeichnis gestartet werden:

tree pfad/zum/verzeichnis

Zusätzliche Optionen wie --one-file-system, --no-preserve-root und --preserve-root sind nur für erfahrene Benutzer gedacht und sollten mit Vorsicht behandelt werden, da sie bei unsachgemäßer Anwendung zum Verlust von Systemdateien führen können. Für detailliertere Informationen konsultieren Sie bitte die Manpage zu rm.

Verzeichnisse mit rmdir entfernen

Der Befehl rmdir dient ebenfalls dem Entfernen von Verzeichnissen, allerdings nur leeren. Er löscht grundsätzlich keine Dateien.

Die einfachste Anwendung ist das Löschen eines einzelnen, leeren Verzeichnisses. Auch hier können mehrere Verzeichnisse oder ein Pfad angegeben werden:

rmdir verzeichnis

Mehrere leere Verzeichnisse löschen:

rmdir verzeichnis1 verzeichnis2 verzeichnis3

Löschen eines Verzeichnisses mit absolutem Pfad:

rmdir /pfad/zum/verzeichnis

Enthält ein Verzeichnis Dateien, gibt rmdir eine Fehlermeldung aus. Im folgenden Beispiel wird das Verzeichnis client erfolgreich gelöscht, während projekt aufgrund vorhandener Dateien unangetastet bleibt:

Bei dem Fehler „Verzeichnis nicht leer“ stoppt rmdir die Verarbeitung weiterer Verzeichnisse. Die Option --ignore-fail-on-non-empty kann verwendet werden, um Fehler zu ignorieren und die Verarbeitung weiterer Verzeichnisse fortzusetzen. Im folgenden Beispiel wird work/reports aufgrund von Dateien nicht gelöscht. Die Option --ignore-fail-on-non-empty sorgt aber dafür, dass das leere Verzeichnis work/quotes trotzdem gelöscht wird.

rmdir --ignore-fail-on-non-empty work/reports /work/quotes

Die Option -p (parents) ermöglicht das rekursive Löschen eines Verzeichnisses und seiner übergeordneten Verzeichnisse, solange diese leer sind. Zuerst wird das Zielverzeichnis gelöscht, dann die übergeordneten Verzeichnisse, wobei der Pfad schrittweise zurückverfolgt wird. So können verschachtelte leere Verzeichnisse auf einen Schlag gelöscht werden.

Beispiel:

rmdir -p work/invoices

Sowohl das Verzeichnis invoices als auch sein übergeordnetes Verzeichnis work werden entfernt.

Unabhängig von der verwendeten Shell bieten Linux-Systeme mit diesen Befehlen eine flexible und leistungsfähige Möglichkeit zur direkten Dateiverwaltung über die Kommandozeile. Diese Befehle sind besonders nützlich für Benutzer, die eine Terminal-orientierte Arbeitsweise bevorzugen oder keine grafische Oberfläche zur Verfügung haben (z.B. bei Servern oder Remote-Systemen wie dem Raspberry Pi). Zudem sind diese Befehle ideal für die Integration in Shell-Skripte, die beispielsweise in automatisierten Aufgaben (Cronjobs) zur Verwaltung von Logdateien genutzt werden können. Dabei gilt es immer die Möglichkeiten und Gefahren der Befehle zu kennen und mit aktuellen Backups zu arbeiten.