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

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

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

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

  

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

199 голосов | спросил n0pe 20 J000000Wednesday11 2011, 17:48:09

9 ответов


188

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

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

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

ответил Ambroz Bizjak 20 J000000Wednesday11 2011, 18:36:09
41

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

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

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

ответил Xeoncross 21 J000000Thursday11 2011, 03:23:03
22

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

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

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

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

ответил PriceChild 20 J000000Wednesday11 2011, 17:52:39
11

Ну, попробовав его на 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: невозможно удалить '/': занято устройство или ресурс

ответил Hello71 20 J000000Wednesday11 2011, 18:23:17
7

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

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

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

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

ответил zwol 21 J000000Thursday11 2011, 04:06:48
4

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 /не допускается
[29]
 
ответил jlliagre 20 J000000Wednesday11 2011, 19:58:55
3

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

ответил CarlF 20 J000000Wednesday11 2011, 21:12:23
1

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

ответил Anarko_Bizounours 20 J000000Wednesday11 2011, 17:55:34
1

Насколько вы можете получить, в основном это зависит от конкретных дистрибутивов Unix /Linux.

Но чтобы ответить на ваш базовый вопрос, да - команда rm будет удалена вместе с ним, а также любая другая стандартная команда в /bin и других папках.

Вот простой тест, который я выполнил в Linux Ubuntu 15.04 с помощью VM.

  1. Инициализировать виртуальную машину с помощью vagrant :

      vagrant init ubuntu /vivid64 & amp; & amp; & amp; & amp; vagrant up --provider virtualbox & amp; & amp; & amp; бродячий шш
     
  2. Затем, когда вы пытаетесь удалить все файлы стандартным образом, это не позволяет вам:

      vagrant @ vagrant-ubuntu-vivid-64: ~ $ sudo rm -fr /
    rm: опасно работать рекурсивно на '/'
    rm: используйте --no-preserve-root, чтобы переопределить это безотказное
     
  3. Итак, попробуйте - no-preserve-root . Всегда проверяйте, что вы вошли в виртуальную машину (так что у вас есть vagrant @ vagrant-ubuntu-vivid-64: ~ $ ), затем запустите (не пробуйте это у себя дома):

      vagrant @ vagrant-ubuntu-vivid-64: ~ $ sudo rm -vfr --no-preserve-root /
    удаленный каталог: '/lost + found'
    удаленный каталог: '/opt'
    удалено '/bin /nc'
    удалено '/bin /less'
    удалено '/bin /wdctl'
    удалено '/bin /nano'
    ...
    remove '/bin /rmdir'
    удалено '/bin /sh'
    удалено '/bin /rm'
    ...
    удаленный каталог: '/bin'
    удаленный каталог: '/usr /games'
    удалено '/usr /bin /byobu-launcher-install'
    удалено '/usr /bin /ipcmk'
    удалено '/usr /bin /sum'
    удаленный каталог: '/usr /bin'
    remove '/usr/lib/gcc/x86_64-linux-gnu/4.9.2'
    remove '/usr/lib/gcc/x86_64-linux-gnu/5.0.1'
    удаленный каталог: '/usr /lib /gcc /x86_64-linux-gnu /5'
    удалено '/usr/lib/gcc/x86_64-linux-gnu/4.9/libquadmath.so'
    remove '/usr/lib/gcc/x86_64-linux-gnu/4.9/libgomp.so'
    ...
    удаленный каталог: '/run /initramfs'
    удаленный каталог: '/media'
    rm: невозможно удалить '/proc /fb': операция не разрешена
    rm: невозможно удалить '/proc /fs /ext4 /sda1 /options': операция не разрешена
    ...
    удалено '/vmlinuz'
    remove '/boot/config-3.19.0-23-generic'
    remove '/boot /grub /grubenv'
    ...
    удаленный каталог: '/boot'
    удалено '/lib64/ld-linux-x86-64.so.2'
    rm: не удается удалить '/dev /hugepages': занятое устройство или ресурс
    rm: невозможно удалить '/dev /mqueue': занятое устройство или ресурс
    rm: не удается удалить '/dev /shm': занятое устройство или ресурс
    remove '/dev /vcsa7'
    ...
    remove '/dev /mem'
    remove '/dev /rfkill'
    remove '/dev /vga_arbiter'
    ...
    rm: невозможно удалить '/sys /fs /ecryptfs /version': операция не разрешена
    удаленный каталог: '/etc'
    удаленный каталог: '/mnt'
    удалено '/vagrant/.vagrant/machines/default/virtualbox/action_provision'
    remove '/vagrant/.vagrant/machines/default/virtualbox/action_set_name'
    remove '/vagrant/.vagrant/machines/default/virtualbox/creator_uid'
    remove '/vagrant/.vagrant/machines/default/virtualbox/id'
    remove '/vagrant/.vagrant/machines/default/virtualbox/index_uuid'
    remove '/vagrant/.vagrant/machines/default/virtualbox/private_key'
    remove '/vagrant/.vagrant/machines/default/virtualbox/synced_folders'
    удаленный каталог: '/vagrant/.vagrant/machines/default/virtualbox'
    удаленный каталог: '/vagrant/.vagrant/machines/default'
    удаленный каталог: '/vagrant/.vagrant/machines'
    удаленный каталог: '/vagrant/.vagrant'
    удаленный '/vagrant /Vagrantfile'
    rm: не удается удалить '/vagrant': устройство или ресурс заняты
     

    После этого он возвращается к приглашению оболочки, как будто ничего не произошло, но вы не можете выполнять какие-либо команды больше, кроме нескольких встроенных и kill , чтобы вы могли закончить свою работу и убить свою сессия:)

    Например:

      $ rm
    Команда rm: command не найдена
    $ kill
    kill: use: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... или kill -l [sigspec]
    $, которые убивают
    -bash: /usr /bin /который: Нет такого файла или каталога
    $ kill -9 $$
    Соединение с 127.0.0.1 закрыто.
     

Итак, он довольно удалил все, включая rm , ls и все остальные команды, но все же вы вошли в систему. Существуют некоторые специальные папки, которые не были удалены, например, некоторые устройства из /dev , /proc или /sys , которые не являются регулярными каталогов /файлов, но это псевдо-файловая система, предоставляющая интерфейсы для обработки и данных ядра.

Если у вас нет Vagrant или Linux, вы можете играть с помощью эмуляторов JavaScript Linux x86 .

Если вас интересуют возможности восстановления после такой катастрофы, проверьте:

ответил kenorb 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 27 Sep 2015 18:17:09 +0300 2015, 18:17:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132