Vergessen Sie nicht die Möglichkeit, dass der Server, der nach dem rm
Befehl nicht erreichbar ist, nichts damit zu tun hat. Es könnte ein Zufall sein!
Höchstwahrscheinlich war das aktuelle Arbeitsverzeichnis jedoch nicht das, was Sie dachten, als der Befehl ausgegeben wurde.
Warst du dabei root?
Folgendes passiert bei der Ausgabe des Befehls rm -rf *
:
- Die Shell löst die Platzhaltermuster (
*
in diesem Fall) in alle Dateien (einschließlich Verzeichnisse, symbolische Links und Gerätespezialdateien) auf, die dem verwendeten Globbing-Muster entsprechen. In diesem Fall beginnt alles, was nicht mit einem .
Normalerweise beginnt , "alphabetisch" nach dem Schale.
- Die Schale gabelt sich dann einen neuen Prozess und
exec()
s die erste Version von rm
Gefunden in Ihrem $PATH
, mit -rf
als erstes Argument, und die angepassten Dateien, eins nach dem anderen , wie die aufeinander folgenden Argumente.
Wenn der rm
aufgerufene rm
Befehl der Standardbefehl war , analysiert er zuerst die Argumente nacheinander und behandelt alle Argumente (einschließlich der Argumente, die sich aus dem Shell-Globbing ergeben), die mit a beginnen, -
als Optionen, bis es zu einem Argument kommt, das nicht mit einem -
( beginnt) mit Ausnahme von Befehlen, die GNU verwenden getopt()
und Optionen nach Nichtoptionen akzeptieren) oder genau --
. Alles danach wird als Dateiname betrachtet.
Mit anderen Worten, wenn Sie eine Datei mit dem Namen (zum Beispiel) --no-preserve-root
im aktuellen Verzeichnis hätten, wäre dies als Option interpretiert worden rm
, nicht als zu entfernender Dateiname!
Seien Sie vorsichtig mit Platzhaltern (und mit der Benennung von Dateien). Wenn Sie eine Datei -r
im aktuellen Verzeichnis haben, ls *
listet der Befehl die anderen Dateien in umgekehrter Reihenfolge auf und zeigt die Datei '-r' nicht an.
Mit anderen Worten, wenn Sie eine Datei aufgerufen hätten --no-preserve-root
, wäre diese als Option an rm
und nicht als Dateiname übergeben worden.
Verwenden Sie rm -rf -- *
diese Option , um dies zu verhindern, und entfernen Sie auch die Dateien, die mit beginnen -
. Oder verwenden Sie einfach absolute oder relative Pfadnamen, damit die Dateinamen mit etwas anderem beginnen als -
wie in: rm ./--flagfile
oder rm /abs/path/to/--flagfile
.
Es gibt auch ein -i
Flag rm
, das es auffordert ("interaktiv"), bevor etwas entfernt wird.
rm -rf *
macht so ziemlich das, was Sie sagen (mit Ausnahme der Tatsache, dass versteckte Dateien ignoriert werden). Im Allgemeinen ist es besser, ein Verzeichnis undrm -r
das Verzeichnis selbst aufzurufen und es bei Bedarf neu zu erstellen.