Есть ли сценарий, где нужен rm -rf -no-preserve-root?


27

Я видел здесь несколько вопросов, где люди случайно делают rm -rf --no-preserve-rootили rm -rf *, стирая большую часть или всю свою файловую систему, прежде чем они смогут реагировать.

Есть ли причина для использования --no-preserve-root, будь то в обычном режиме, в качестве разработчика или администратора?


4
Я не могу представить ни одного полезного случая ... Я думаю, что эта опция просто существует, чтобы получить ортогональность принципа UNIX (с точки зрения сохранения одинаковых вещей одинаковыми без исключений). Скорее всего, вы хотите исключение в случае /, но «общий случай» все еще представлен. Другими словами: «Работа моего компьютера не в том, чтобы говорить мне, что делать». И этого не должно быть.
Андреас Визе

Это там как возможное оружие, которое будет использоваться, когда SkyNet вступит во владение.
Митч Дарт

Ответы:


26

ВАЖНО: Современные системы UEFI монтируют прошивку в /sysкаталоге и делают ее доступной для ОС. НЕ запускайте эту команду в современной системе, так как она удалит эту прошивку, по существу блокируя вашу машину.


Самый простой сценарий, который я могу придумать, это то, что кто-то хочет удалить все данные со своего диска. Для этого могут быть совершенно законные причины, и самый простой способ, о котором я могу думать, это

rm -rf --no-preserve-root /

Оказывается, это на самом деле приведено в качестве примера в info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Еще одна веская причина - вы хотите удалить смонтированную файловую систему, в которую вы chrootввели. В этом случае rm -rf --no-preserve-root /удалит систему в chrootсреде, но оставит вашу нетронутой.

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

Во всяком случае, это относительно новое ограничение, оно было добавлено в 7-й версии спецификации POSIX ( предыдущая здесь), до того, как это rm -rf /была совершенно допустимая команда. На исторической записке .и ..каталоги всегда были защищены от rm, когда - либо с 1979 года, когда rmпервый приобретаемой возможность удаления каталогов. Подробнее об этом здесь .


21
НЕ ИСПОЛЬЗУЙТЕ ЭТО, ЧТОБЫ УДАЛИТЬ ВСЕ ДАННЫЕ, ЕСЛИ ВАША СИСТЕМА UEFI (новые компьютеры). Это удаляет все переменные прошивки и приводит к тому, что материнская плата становится бесполезной, как кирпич
Suici Doga

5
@SuiciDoga: источник или дальнейшее объяснение? Прошивка материнской платы не должна храниться на жестком диске, иначе они будут потеряны, если вы дерните диск.
Тарка

15
@Tarka: / sys / firmware / efi / efivars / можно смонтировать, а рекурсивное удаление может удалить эти переменные. Это действительно не должно блокировать систему, но может. См thenextweb.com/insider/2016/02/01/...
цианистый

4
@ Тарка, они не хранятся на жестком диске, и рывок диска не повлияет на них. Однако по причинам, которые мне еще предстоит понять, они смонтированы, поэтому на самом деле доступны под /.
Тердон

20
Правильный способ очистить диск - переформатировать его разделы (или переразбить его вообще). Не все файловые системы являются жесткими дисками, поэтому при использовании rm -rf /вы можете очистить удаленную машину, например, от чьего-либо монтирования NFS / CIFS / SSHFS.
Score_Under

12

Существование этого --no-preserve-rootпереключателя не в том, чтобы добавлять дополнительную функциональность, а в том, чтобы перекрыть очень вменяемое снижение функциональности. Этот переключатель, вероятно, основан на философии, согласно которой компьютер должен делать то, что ему говорят, и что должны быть доступны команды для выражения любого желаемого действия. Этот переключатель предшествует UEFI, и, исходя из моего опыта, я говорю, что сейчас он устарел.

В современной практике без этого переключателя rmкоманда избегает случайного удаления корневого каталога при использовании неинициализированной переменной или свободного пространства.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Забавная сноска: защита не была ее целью. За блогом Sun Microsystems, удаление /каталога будет неявно удалить текущий рабочий каталог, нарушение специального рассмотрения уже сделал для .и ..каталогов. Вот почему их комитет по стандартам допустил это специальное исключение - не для предотвращения несчастного случая. Это изменение было впервые введено в Solaris 10 build 36.

http://archive.is/5lmc9


Спасибо за ссылку! Я надеялся, что историческая информация будет процитирована, поскольку мне было интересно, в чем причина изменений.
Кэмерон Ганьон

Интересная дополнительная информация - спасибо
Марк

1

Возможно, это не тот ответ, который нужен оригинальному аскеру, но есть сценарий использования, который требует рекурсивного удаления всех файлов из корневого каталога. Хотя это не rmкоманда, но она является частью процесса switch_root (8) во время загрузки вашей (не встроенной) системы Linux.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.