В течение нескольких лет rm
утилита GNU не будет удалять, /
если она не вызывается с --no-preserve-root
опцией. Тем не менее, команда rm -rf /
в течение долгого времени находилась в коллективном подсознании как опасная, и люди до сих пор часто называют ее «страшной» командой.
Мне было интересно, когда появилось это правило, которое rm
нельзя удалить /
. Я проверил спецификации POSIX и вижу, что, хотя POSIX: 2008 включает в себя эту функцию безопасности, POSIX: 2001 не включает. Поскольку онлайн-версии спецификаций POSIX время от времени обновляются, с каждым новым дополнительным выпуском я также проверял машину возврата и находил соответствующую страницу POSIX: 2008 от 2010 года и смог подтвердить, что правило, которое rm
не может удалить /
был уже в списке тогда.
Итак, мои вопросы:
- Когда было добавлено правило, которое
rm
нельзя удалить,/
в спецификации POSIX? Было ли это в оригинальной редакции 2008 года Единой спецификации UNIX версии 4 или было добавлено в редакцию? - Когда это ограничение было добавлено в GNU
rm
? Я уверен, что это было до того, как он был добавлен в POSIX, но когда это случилось?
Ответы:
Вы можете найти HTML-версию всех выпусков POSIX 2008 онлайн:
Это было добавлено в выпуске 2008 года.
Технические исправления обычно не добавляют новые функции.
Вы можете видеть, что предыдущая версия ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) не имела этого текста.
Новый текст был принят на конференции группы Остин 2003-05-09 для включения в более поздний пересмотр стандарта.
Это было запрошено Джоном Беком из Sun Microsystems в марте того же года (ссылка требует регистрации в открытой группе, см. Также запрос № 5 здесь ).
GNU
rm
добавил--preserve-root
и--no-preserve-root
опции в этом коммите 2003-11-09 , но--preserve-root
стал только по умолчанию в этом коммите 2006-09-03 , поэтому в coreutils 6.2FreeBSD сохраняет косую черту с момента коммита 2004-10-04 (с журналом коммита «Узнай, насколько огнестойким на самом деле мое белье» ), но изначально не когда был
POSIXLY_CORRECT
, пока они не вспомнили, что проверяли десятилетие спустя, что POSIX теперь поручив это в этот момент это было сделано также в режиме POSIX .Первоначальный коммит FreeBSD упоминает, что Solaris уже делал это в то время.
@JdePB (в комментариях ниже) обнаружил, что эта ссылка на историю инсайдеров Sun подтверждает и дает более подробную информацию о происхождении Solaris и говорит о том, что Solaris уже имела защиту, прежде чем они обратились к группе Austin.
Это объясняет обоснование для добавления этого исключения. Хотя можно винить себя только в том случае, если они это делают
rm -rf /
, в одном случае сценарий мог бы сделать это, если быrm -rf -- "$1/$2"
не проверял, что$1
/$2
были предоставлены, и это плохо ударило некоторых клиентов Sun при неправильном применении патча Solaris (по этой ссылке).Запрет на удаление
.
и..
был добавлен задолго до этого и снова для защиты от возможных неудач.rm
все еще опасная команда. Он делает то, что должен: удалить то, что вы говорите.Также удалил бы все. Известно, что завершение имени файла оболочки вызывает такие проблемы, когда вы
Расширен до:
Потому что
something
так случилось, что это не каталог.Оболочки, такие как
tcsh
илиzsh
добавят дополнительную подсказку при попытке вызоваrm
с*
подстановочным знаком (tcsh
не по умолчанию).источник
rm -rf .*
с его домашнего каталога . Вскоре после этого все телефонные линии загорелись ...