Вопрос Как далеко вы получите команду «rm -rf /»?


Я часто задавался вопросом, как далеко система будет работать, если вы запустите rm -rf /, Я сомневаюсь, что ОС сможет стереть себя (?)

Бонусный вопрос: После выполнения команды будет rm удалились?

Обновить: Я тестировал это в нескольких основных дистрибутивах unix, используя VirtualBox, и ответы описывают, что именно происходит. Если заданы правильные параметры, rm удалит каждый физический бит данных на диске. Тем не менее, я столкнулся с некоторыми проблемами при использовании версии rm, отличной от GNU. Например, я считаю, что BusyBox имеет свою собственную версию, и она не позволяет вам удалять столько, сколько вы могли бы.

Этот вопрос был Суперпользовательский вопрос недели,
  Читать 7 июля 2011 г. запись в блоге для более подробной информации или представить свои собственные Вопрос недели.


200
2017-07-20 13:48


происхождения


Забавно, что вы задали этот вопрос. Я просто отвечал на другой вопрос rm -f на другом форуме и начал вспоминать статью, которую я прочитал некоторое время назад. К счастью, я спасал это время:  классическая история ужасов Unix Помимо того факта, что интересно посмотреть, как далеко он пойдет ... Я думаю, что это очень хорошо написанная статья и в целом хорошо читается! - akseli
Я только что попробовал sudo rm -rf / на tinycore / microcore linux, и кажется, что ОС защищает несколько каталогов (/ sys и другие) от их удаления. - n0pe
Я пытался rm -f /bin/rm один раз. К сожалению, это сработало, и я потратил следующий час на правильную версию rm назад от GNU coreutils. - squircle
Подождите секунду, я попробую ... - Martijn Courteaux
Я делаю это в магазине Apple все время - eggie5


ответы:


Если у вас есть rm от GNU coreutils (скорее всего, если это обычный дистрибутив Linux) rm -rf / будет отказано в встроенной защите (согласно manpage и Wikipedia, не пробовал это).

Вы можете переопределить эту защиту с помощью --no-preserve-root, rm затем удалит все, что возможно, без остановки после попытки удалить каждый файл. Конечно, он не удалит виртуальные файловые системы, такие как /proc а также /sys, но это не имеет значения - он удалит все на вашем диске.

После завершения команды диск будет очищен пустым, включая ОС. Ядро и текущие процессы будут продолжать работать из памяти, но многие процессы умрут, потому что они не смогут получить доступ к некоторому файлу. В следующий раз ОС не будет загружаться.


188
2017-07-20 14:36



Именно то, что я искал. Теперь, чтобы использовать эту власть, НАХОДЯТСЯ НА МИРЕ. - n0pe
+1 особенно для --no-preserve-root потому что это обычно не упоминается. - Matěj G.
@MaxMackie, стоит отметить, что хакеры очень быстро обнаружили, что это наименее полезная вещь, которую они могут сделать для пользователя. Он уничтожает любые данные, которые могут быть использованы для получения наличных денег, и не позволяет хакеру продолжать эксплуатировать машину. Как кошка с насекомым, вы не хотите ее убивать, вы просто хотите поиграть с ней какое-то время, потому что это весело. - zzzzBov
Чтобы ответить на другой вопрос OP, да, rm удалит себя. Вполне возможно изменить или удалить исполняемый файл, даже если есть экземпляр его запуска. Это также будет продолжаться, и изменения не будут затронуты. - thomasrutter
Я хотел бы упомянуть «chmod -R user: user *» at /, потому что это также рекурсивная и дорогостоящая ошибка. Я сделал это один раз, и к тому моменту, когда я смог прервать, у меня на полпути / домой. / bin / boot / etc / dev. К счастью, сервер продолжал работать, пока я провел следующие несколько часов вручную и перезапустил владельцы из системы ссылок. Однако никто не мог использовать su или sudo впоследствии. В конце концов выяснилось, что у / bin / su больше не установлен бит setuid. Обратите внимание на будущее: chowning / bin / su сбрасывает бит setuid! - Andy Lee Robinson


Для тех, кто любит делать такие вещи визуально, слушая техническую музыку.

Запуск rm-rf в Linux (видео)

Бонусные очки, если вы можете назвать процессы, когда они начинают умирать.


41
2017-07-20 23:23





Настроить виртуальную машину и попробовать развлечься?

Это пройдет довольно далеко ... если вы используете gui, вы можете повеселиться, заметив что-то более заметно. (значки на меню останавливают загрузку и т. д.)

Если вы его отпустите, OS будет в значительной степени не поддаваться восстановлению, хотя вы можете легко получить некоторые данные.

В любом случае вам захочется сделать переустановку ОС.


22
2017-07-20 13:52



Я даже не думал о том, чтобы попробовать его в виртуальной машине. Попробуй сейчас! ooo это весело. - n0pe
Ошибочно записывает команду на терминал хост-системы - slhck
Просмотрите статью, которую я опубликовал. «Классическая история ужасов Unix!» - akseli
Я сейчас работаю и не успеваю пройти полную установку популярного дистрибутива (ubuntu / slack / suse / fedora). Если кто-то еще может клонировать файл диска VM и попробовать его для нас, это будет потрясающе. - n0pe
С Amazon EC2 следует быстро запустить один из своих AMI, которые уже установили Linux и уволили ... - David d C e Freitas


Ну, попробуй это http://bellard.org/jslinux/ производит:

rm: не удается удалить '/ dev / pts': занятое устройство или ресурс
  rm: не удается удалить '/ dev': каталог не пуст
  rm: невозможно удалить '/ proc / swaps': операция не разрешена
  rm: невозможно удалить '/ proc / kallsyms': операция не разрешена
  rm: невозможно удалить '/ proc / dma': операция не разрешена

Записи SNIP 881

rm: невозможно удалить '/ proc / 149 / oom_adj': разрешение отклонено
  rm: невозможно удалить '/ proc / 149': операция не разрешена
  rm: невозможно удалить '/ proc': занятое устройство или ресурс
  rm: не удается удалить '/ tmp': занято устройство или ресурс
  rm: невозможно удалить '/': занятое устройство или ресурс


11
2017-07-20 14:23



Да, я получаю эти ошибки / предупреждения. Этот стандарт вы считаете? - n0pe
/ proc, / sys, иногда / dev, и любые точки монтирования являются свойствами операционной системы и не могут быть удалены. - pjc50
Соглашаясь с @ pcj50, это не буквально файлы на жестком диске, поэтому «удаление» их не имеет смысла. - CarlF


Я помню, что это было пережевано alt.sysadmin.recovery в те дни, когда не было такой вещи, как /proc, а также /dev был просто обычным каталогом, содержащим записи для кучи необычных инодов ...

... но, по некоторым вариантам Unix (мое воспоминание - HP-UX, но это может быть совершенно неправильно), вы могли бы не удалите последнюю запись каталога для запущенной программы. (Общие библиотеки? Что это такое?)

В таких системах, если вы запустили один в режиме обслуживания (так что ничего не было, но ваша оболочка, даже init, и никаких дополнительных файловых систем не было установлено) и exec /bin/rm -rf /, вы останетесь с полностью пустой корневой файловой системой Кроме что /bin а также /bin/rm выживет.

Жители монастыря страшного дьявола считали это подходящим и правильным.


7
2017-07-21 00:06





rm -rf / не следует допускать в недавних реализациях, поскольку было предложено нарушить стандарт POSIX:

"rm -rf /«защита на блоге Oracle

Во всяком случае, в конце концов, мы получили спецификацию, и Solaris 10 имеет (начиная с сборки 36) версию / usr / bin / rm (/ bin - сим-ссылка на / usr / bin на Solaris) и / usr / xpg4 / bin / rm, который ведет себя так:

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

4
2017-07-20 15:58



«указав, что если вы попытаетесь удалить« / »рекурсивно, в конечном итоге попытайтесь удалить« .. »и«. », и все, что мы делаем, это позволить rm заранее определить это эвристически. Удивительно, но они купили это ! "- er, не будет ли это запретить удаление Любые каталог? Фактическая спецификация только запрещает .. и. в действительных аргументах командной строки он ничего не говорит о том, что вы «в конечном счете пытаетесь удалить», - Random832
Почему это запрещает удаление любого каталога? Корневая директория здесь единственная, и ее удаление явно подразумевает удаление «.». и "..", независимо от текущего каталога. Здравый смысл не запрещен в стандартной интерпретации. - jlliagre
Эта линия аргументации - чистый гений. - Nate C-K
В стандарте указано, что rm не разрешено продолжать если аргумент имеет строку "." или ".." в качестве базового компонента. Вы не можете удалить /foo/.. даже если вы не в /foo, Оно делает не укажите, что вам не удастся удалить текущий каталог (например, rm -r `pwd`) или родитель текущего каталога. - Random832
В самом деле, я неправильно понял это утверждение, и вы правы. Хотелось бы надеяться, что стандартные ребята приняли более разумное поведение как стандартное. Удаление больших частей, если не вся файловая система быстро сделает OS нестандартной совместимостью в любом случае. - jlliagre


Один момент, который я не видел, сделал кто-либо еще: файлы, которые в настоящее время открыты (например, сам rm), даже если они удалены, фактически не исчезнут, пока диск не будет закрыт.


3
2017-07-20 17:12



Правильно, потому что они загружены в память правильно? - n0pe
Я не уверен, что это безопасно предположить; ядро может очень просто загрузить удаленный файл в память и немедленно удалить его на диске и сохранить эту копию в памяти до тех пор, пока файл не будет открыт (например, пока не будет запущен rm). - Ambroz Bizjak
Я не спекулирую. Если программа запущена, удаление ее, по крайней мере, не удаляет ее в моих Linux-ящиках. (Имейте в виду, я не проверял это, о, пару лет.) - CarlF
rm  будем удалите себя из fs - программа полностью загружен в память, а не файл - warren
@MaxMackie: не потому, что они загружены в память, а потому, что ссылка на открытый файл имеет ту же силу, что и жесткая ссылка (то есть если файл имеет хотя бы одну жесткую ссылку, он не будет удален с диска). - Lie Ryan


За то, что однажды попробовал (на сервере то, что меня разозлило), зарегистрированное как root, в терминале вы потеряете почти все. Единственное, что не будет удалено, будет только процессом, который был необходим для ОС.


1
2017-07-20 13:55



«[не стирается] только процесс, который был необходим для ОС» - о, не волнуйтесь. В отличие от Windows, Linux с удовольствием стирает что угодно, даже если файл имеет критическую ОС а также в использовании. /boot, /sbin, /etc, /bin, /vmlinuz? Бам, ушел. Удачи загрузиться без них - на самом деле, удачи что-нибудь навсегда после завершения удаления. - Piskvor
Если я помню, был файл, который не был удален, и я разрешил linux работать более 4 часов. Но все же, хорошо знать, что произойдет, например, сделать chmod 777 / * -fR;) - Anarko_Bizounours
«chmod 777 / * -fR» - это должно сделать систему очень небезопасной, хотя и очень удобной для пользователя. - Bart van Heukelom
сделал это, это очень небезопасно. Вы ничего не можете сделать, какой-то процесс должен иметь конкретное право, и chmod 777 изменится вправо, вы никогда не сможете загрузить сеанс и некоторый процесс. - Anarko_Bizounours
@BartvanHeukelom, некоторые инструменты будут выполнять быстрый самотестирование или быть протестированы системой для правильного владения и разрешений и отказаться от действий, если они неконфигурированы. - killermist