rm (Unix)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

rm (Abkürzung für „remove“) ist der in der UNIX-Welt übliche Befehl zum Löschen von Dateien und Verzeichnisbäumen. Im Gegensatz zu anderen Betriebssystemen, z. B. MS-DOS, ist der Löschbefehl in UNIX als unabhängiges Programm und nicht im Kommandozeileninterpreter realisiert. Beim Einsatz von rm ist Vorsicht geboten, da versehentlich auch systemrelevante Dateien gelöscht werden können.[1]

rm und unlink[Bearbeiten]

Genaugenommen löscht das Kommando rm eine Datei unter Unix gar nicht. Das Unix-Dateisystem unterscheidet zwischen Daten, die durch einen Inode beschrieben werden, und Pfadnamen, die innerhalb von Verzeichnissen auf die Inodes verweisen. Ein Inode kann dabei mehrere Pfadnamen haben, was in der Unix-Terminologie (hard) Link genannt wird.

rm ruft intern bei Dateien, also nicht bei Verzeichnissen, den Systemaufruf unlink auf, der einen solchen Link und den zugehörigen Pfadnamen entfernt. Der Inode und die Datenblöcke werden aber erst freigegeben, wenn

  1. der letzte Link auf einen Inode entfernt wird und
  2. kein Prozess mehr auf die Daten zugreift.

Dies bedeutet, dass man rm auch dann problemlos aufrufen kann, wenn ein Prozess auf die Daten zugreift. Dieser kann die Daten ohne Störung bis zum Ende lesen. War es der letzte Link und Prozess, werden die Daten beim Schließen der Datei durch den Prozess automatisch vom Betriebssystem freigegeben.

Der Befehl unlink verwendet immer den Systemaufruf unlink und kann daher, wenn er durch einen privilegierten Benutzer aufgerufen wurde, unter Umständen auch nicht-leere Verzeichnisse löschen.

Sicheres Löschen[Bearbeiten]

Hauptartikel: Datenvernichtung

Das Betriebssystem gibt nach rm nur die Datenblöcke frei, die Daten bleiben aber unter Umständen noch einige Zeit physikalisch gespeichert. Sensible Daten (z. B. Passwörter oder Kreditkartennummern) sollten aber nicht mehr gelesen werden können. Zum sicheren Löschen muss man daher die Datei öffnen und alle Blöcke überschreiben. Auch manche Dateisysteme bieten die Option, frei gewordene Blöcke sofort zu überschreiben. Dies kostet jedoch Zeit und wird daher nur in Ausnahmefällen angewendet.

Die weit verbreitete Meinung, dass sich die Daten nach einmaligem Überschreiben noch mit großem Aufwand, etwa durch Messungen mit Elektronenmikroskopen, wiederherstellen lassen ist jedoch falsch; ein einmaliges Überschreiben ist vollkommen ausreichend; wichtiger ist es, alle Kopien, auch etwa bei der Datensicherung automatisch erstellte, zu beseitigen.[2]

Siehe auch: shred oder Wipe

Dateiwiederherstellung[Bearbeiten]

Unix unterstützt normalerweise nicht die Wiederherstellung von Dateien. Frei gewordene Datenblöcke werden unter Umständen sofort von neuen Daten anderer Prozesse belegt.

Es existieren jedoch Dateisysteme, die eine Wiederherstellung unterstützen. Obwohl es bereits seit einigen Jahren entsprechende Entwicklungen gibt, hat sich das „undelete“ noch nicht durchgesetzt.

Syntax[Bearbeiten]

rm [Optionen] Dateiname 

Beispiel:

rm test.txt 

Dieses Beispiel löscht die Datei „test.txt“ aus dem Verzeichnis, in dem man gerade ist.


Optionen

Drei Optionen von rm sind in POSIX festgelegt:[3]

-f
Keine Fehlermeldung bei ungültiger Zielbezeichnung und keine Rückfrage bei fehlendem Schreibrecht.[3]
-i
Rückfrage vor dem Löschen.[3]
-r
Verzeichnis löschen, samt allen Inhalten.[3]


Einige Implementierungen von rm bieten darüber hinaus verschiedene zusätzliche Optionen.[4][5]

rm -rf /[Bearbeiten]

Das rm -rf /-Kommando wird wegen seiner katastrophalen Wirkung bereits von der Netzkultur metaphorisch verwendet, ähnlich wie /dev/null. Der Aufruf von rm mit den Parametern r und f auf das Wurzelverzeichnis (Root-Verzeichnis) bewirkt, wie man der Syntaxbeschreibung bereits entnehmen kann, das rekursive Löschen aller Dateien auf dem ausführenden Gerät (genauer: auf allen eingebundenen Datenträgern) ohne Rückfrage. Führt man dieses Kommando als Administrator (root) aus, führt das prinzipiell zur unwiderruflichen Löschung des gesamten Systems; als normaler Benutzer löscht dies in der Regel nur alle diejenigen Dateien, die dem ausführenden Benutzer gehören (siehe Unix-Dateirechte für Details zur Rechtehandhabung und dem Eigentum von Dateien).

Sun Microsystems führte einen „rm -rf /“-Schutz mit Solaris 10 ein (erste Version von 2005). Beim Aufruf des besagten Unix-Kommandos bricht das Programm mit der Fehlermeldung ab, dass das Löschen von / nicht erlaubt sei.[6] Kurz darauf wurde die gleiche Funktion in FreeBSD eingeführt.

Wie durch die POSIX-Spezifikation[7] gefordert, bricht auch die GNU-Version von rm mit einer Fehlermeldung ab, solange nicht die Option --no-preserve-root angegeben wird. Diese GNU-spezifische Option und ihr Pendant --preserve-root wurden schon 2003 mit der Veröffentlichung der Version 5.1.0[8] der GNU core utilities eingeführt, und mit Version 6.2[9] (2006 veröffentlicht) wurde letztere Option Standard.

Einzelnachweise[Bearbeiten]

  1. Nikolai Bezroukov: Creative uses of rm. Abgerufen am 14. Februar 2012.
  2. Sicheres Löschen: Einmal überschreiben genügt – Artikel bei heise online, vom 16. Januar 2009
  3. a b c d rm. In: IEEE Std 1003.1-2008. Open Group. Abgerufen am 14. Februar 2012.
  4. rm. In: FreeBSD Man Pages. FreeBSD Foundation. Abgerufen am 14. Februar 2012.
  5. rm invocation. In: GNU Coreutils. Free Software Foundation. Abgerufen am 14. Februar 2012.
  6. Meddling in the Affairs of Wizards (engl.)
  7. The Open Group Base Specifications Issue 7 - rm (engl.)
  8. Git commit Support new options: --preserve-root and --no-preserve-root (engl.)
  9. Git commit ...--preserve-root is now the default(engl.)