rm (Abkürzung fürenglischremove‚entfernen‘) ist in derUnix-Welt der übliche Befehl,Datei- undVerzeichniseinträge zu entfernen/löschen. Der Befehl ist imPOSIX-Standard definiert. Es handelt sich dabei um ein eigenständigesProgramm, nicht um einenUnix-Shell-Befehl.
Beim Einsatz vonrm ist Vorsicht geboten, da standardmäßig keine Rückfrage zur Bestätigung des Befehls erfolgt; versehentlich können daher systemrelevante Dateien entfernt werden.[1]
Dateien bei Unix- und abgeleiteten Dateisystemen bestehen einerseits aus dem eigentlichen Datenbestand, demDatenobjekt (der Dateiinhalt), dem eineindeutiger Datenknoten, ein sogenannterInode, zugeordnet ist, und andererseits aus mindestens einemHardlink (englischlink, auch Verweis oderVerknüpfung) auf jenen Inode, der als „voller“ Dateiname(d. h. inkl. Pfad) repräsentiert wird. Ein Inode kann dabei mehrere Dateinamen – also Dateiobjektverweise bzw.englischhard links – haben.
Tatsächlich löscht der Befehlrm ./pfad/dateiname nicht das Datenobjekt (die Dateiinhalte) selbst, sondern entfernt nur den Verweis, also den Hardlink, auf dessen Inode aus dem Verzeichnisbaum des Dateisystems.
Wenn der letzte (Hard-)Link auf einen Inode entfernt wird (und kein Prozess mehr auf die Daten zugreift), gilt eine Datei als gelöscht. Tatsächlich werden nur die entsprechendenDatenblöcke zum Überschreiben freigegeben. Solange diese Datenblöcke nicht überschrieben wurden, kann eine gelöschte Datei daher wiederhergestellt werden.
Das Programmrm kann problemlos auch bereits aufgerufen werden, wenn noch ein Prozess auf die Daten zugreift. Jener kann die Daten ohne Störung bis zu seinem Beenden weiterhin lesen; erst danach werden die Blöcke freigegeben.
Während der Befehlrm durchPOSIX standardisiert ist, istunlink durch die zweite Version derSingle UNIX Specification (SUSv2) festgelegt und hat einen geringeren Funktionsumfang.
Die konkrete Funktionsweise, also ob etwa derSystemaufrufunlink verwendet wird, hängt von der eingesetztenImplementierung ab (bei der ursprünglichen Unix-Variante war dies beiunlink der Fall). In der Regel werden heute beide Befehle,rm undunlink, vom Programmrm verarbeitet.
Das Betriebssystem gibt nachrm 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]
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 jedochDateisysteme, die eine Wiederherstellung unterstützen. Obwohl es bereits seit einigen Jahren entsprechende Entwicklungen gibt, hat sich das „undelete“ noch nicht durchgesetzt.
rm [Optionen] Dateiname
Beispiel:
rm test.txt
Dieses Beispiel löscht die Datei „test.txt“ aus dem Verzeichnis, in dem man sich aktuell befindet.
Optionen:
Drei Optionen vonrm sind durchPOSIX festgelegt:[3]
-f-i-rEinigeImplementierungen vonrm bieten darüber hinaus verschiedene zusätzliche Optionen.[4][5]
Dasrm -rf /-Kommando wird wegen seiner katastrophalen Wirkung bereits von derNetzkultur metaphorisch verwendet, ähnlich wie/dev/null. Der Aufruf vonrm mit den Parameternr undf auf dasWurzelverzeichnis (Root-Verzeichnis) bewirkt, wie man derSyntaxbeschreibung bereits entnehmen kann, das rekursive Löschen aller Dateien auf dem ausführenden Gerät (genauer: auf alleneingebundenen Datenträgern) ohne Rückfrage. Führt man dieses Kommando alsAdministrator (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 (sieheUnix-Dateirechte für Details zur Rechtehandhabung und demEigentum von Dateien).
Sun Microsystems führte einen „rm -rf /“-Schutz mitSolaris 10 ein (erste Version von 2005). Beim Aufruf des besagtenUnix-Kommandos bricht das Programm mit der Fehlermeldung ab, dass das Löschen von/ nicht erlaubt sei.[6] Kurz darauf wurde die gleiche Funktion inFreeBSD eingeführt.
Wie durch die POSIX-Spezifikation[7] gefordert, bricht auch dieGNU-Version vonrm 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] derGNU Core Utilities eingeführt, und mit Version 6.2[9] (2006 veröffentlicht) wurde letztere Option Standard.