В чем причина этой специфической последовательности «rm» в шутке xkcd?

14

Вот часть этого комикса xkcd, где идея заключается в том, что автор не может написать программу сортировки, поэтому он добавляет код для удаления всех файлов

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

AFAIK канонический способ удалить все, rm /чтобы все, начиная с корня, было удалено. Здесь это последняя команда и две команды перед ней, которые пытаются найти rmтекущий каталог и содержимое домашнего каталога.

Почему не просто rm /?

Sharptooth
источник

Ответы:

19

Если вы начнете с самого верха, вполне возможно, что вы уничтожите что-то, что rm(или какая-то другая критическая часть системы) необходимо продолжить, и зло останется незавершенным.

Эти команды гарантируют, что, по крайней мере, cwd и домашний каталог пользователя исчезнут, прежде чем станут ядерными.

Flup
источник
5
JFTR, поскольку rm загружен в память, он должен работать и продолжать работать, даже если необходимые переменные удалены. После запуска rm -rf /из интерактивного сеанса ваша оболочка должна все еще работать
Ульрих Дангел
8
Последние rms потерпят неудачу в последней команде с rm: it is dangerous to operate recursively on ‘/’; кроме этого rmне требует доступа к любому ресурсу после инициализации. Причиной использования нескольких команд может быть то, что у пользователя могут быть разные права доступа к этим каталогам.
Стефан Гименес
@UlrichDangel, я давно нашел нелегкий путь в Солярисе ...
vonbrand
1
Это будет. Вы действительно должны использовать rm --no-preserve-root /это, чтобы действительно работать
Макс
1
«Эти команды гарантируют, что по крайней мере cwd и домашний каталог пользователя исчезнут, прежде чем перейти к ядерной». Что если мы запустим этот скрипт, когда будем в "/ bin /" :)? Последние две команды не будут выполняться вообще.
XzKto
8

Просто чтобы показать растущий уровень разрушительности: удалите текущий каталог, а затем $HOME, наконец, уничтожьте все.

vonbrand
источник