19

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

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

3 ответа3

19

ВАЖНО: Современные системы 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 / была совершенно допустимой командой. На исторической ноте . и .. каталоги всегда были защищены от rm , начиная с 1979 года, когда rm впервые получил возможность удалять каталоги. Подробнее об этом здесь.

9

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

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

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

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

http://archive.is/5lmc9

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .