Was ist der Grund für diese spezielle "rm" -Sequenz im xkcd-Witz?

14

Hier ist ein Teil dieses xkcd-Comics, in dem der Autor kein Sortierprogramm schreiben kann, also fügt er Code hinzu, um alle Dateien zu löschen

system("rm -rf ./");
system("rm -rf ~/*");
system("rm -rf /");

AFAIK die kanonische Möglichkeit, alles zu löschen, besteht darin rm /, alles, was mit root beginnt, zu löschen. Hierbei handelt es sich um den letzten Befehl und die beiden zuvor ausgeführten Befehle, die versuchen, rmdas aktuelle Verzeichnis und den Inhalt des Basisverzeichnisses zu ermitteln.

Warum nicht einfach rm /?

scharfer Zahn
quelle

Antworten:

19

Wenn Sie ganz oben anfangen, ist es möglich, dass Sie etwas auslöschen, das rm(oder einen anderen kritischen Teil des Systems) benötigt, um fortzufahren, und die Bösartigkeit wird unvollständig bleiben.

Diese Befehle stellen sicher, dass mindestens das cwd-Verzeichnis und das Home-Verzeichnis des Benutzers gelöscht sind, bevor Sie nuklear werden.

Flup
quelle
5
JFTR, während rm in den Speicher geladen wird, sollte funktionieren und weiter funktionieren, auch wenn notwendige Variablen entfernt werden. Nachdem Sie rm -rf /eine interaktive Sitzung beendet haben, sollte Ihre Shell noch funktionieren
Ulrich Dangel
8
Letzte rms schlagen beim letzten Befehl mit fehl rm: it is dangerous to operate recursively on ‘/’. außer dass rmnach der Initialisierung Zugriff auf jede Ressource erfordert nicht. Ein Grund für die Verwendung mehrerer Befehle kann sein, dass der Benutzer möglicherweise unterschiedliche Zugriffsberechtigungen für diese Verzeichnisse hat.
Stéphane Gimenez
@UlrichDangel, ich habe den harten Weg auf Solaris vor langer Zeit herausgefunden ...
vonbrand
1
Es wird. Sie müssen tatsächlich verwenden, rm --no-preserve-root /damit dies tatsächlich funktioniert
Max
1
"Diese Befehle stellen sicher, dass mindestens das cwd- und das Home-Verzeichnis des Benutzers gelöscht sind, bevor nuklear geschaltet wird." Was ist, wenn wir dieses Skript ausführen, wenn wir uns in "/ bin /" befinden :)? Die letzten beiden Befehle werden überhaupt nicht ausgeführt.
XzKto
8

Nur um ein zunehmendes Maß an Destruktivität zu zeigen: Löschen Sie das aktuelle Verzeichnis und $HOMEzerstören Sie dann alle.

vonbrand
quelle