Jaki jest powód tej konkretnej sekwencji „rm” w dowcipie xkcd?

14

Oto część tego komiksu xkcd, w którym pomysł polega na tym, że autor nie może napisać programu sortującego, więc dodaje kod, aby usunąć wszystkie pliki

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

AFAIK kanonicznym sposobem na usunięcie wszystkiego jest usunięcie wszystkiego rm /. Oto ostatnie polecenie i dwa poprzednie polecenia, które próbują przejść rmdo bieżącego katalogu i zawartości katalogu domowego.

Dlaczego nie tylko rm /?

sharptooth
źródło

Odpowiedzi:

19

Jeśli zaczniesz od samego szczytu, możliwe jest, że usuniesz coś, co rm(lub jakaś inna krytyczna część systemu) musi być kontynuowana, a zło pozostanie niekompletne.

Te polecenia sprawią, że przynajmniej cwd i katalog domowy użytkownika znikną przed przejściem do jądra.

Flup
źródło
5
JFTR, ponieważ rm jest ładowany do pamięci, powinien działać i działać nawet po usunięciu niezbędnych zmiennych. Po uruchomieniu rm -rf /sesji interaktywnej twoja powłoka powinna nadal działać
Ulrich Dangel
8
Ostatnie rms nie powiedzie się na ostatnim poleceniu za pomocą rm: it is dangerous to operate recursively on ‘/’; inne niż rmto nie wymaga dostępu do żadnego zasobu po inicjalizacji. Przyczyną używania wielu poleceń może być to, że użytkownik może mieć różne uprawnienia dostępu do tych katalogów.
Stéphane Gimenez
@UlrichDangel, dawno temu dowiedziałem się trudnej drogi na Solarisie ...
vonbrand
1
To będzie. Musisz to wykorzystać, żeby rm --no-preserve-root /to zadziałało
Max
1
„Te polecenia sprawią, że przynajmniej cwd i katalog domowy użytkownika znikną przed przejściem na nuklearne”. Co jeśli uruchomimy ten skrypt, gdy jesteśmy w „/ bin /” :)? Ostatnie dwa polecenia w ogóle się nie uruchomią.
XzKto,
8

Aby pokazać rosnący poziom destruktywności: Usuń bieżący katalog, a następnie $HOMEzniszcz wszystko.

vonbrand
źródło