Флаг preserve-root для команды rm

Перевод: Unix/Linux tutorials for beginners preserve-root flag for rm command

Флаг preserve-root Флаг preserve-root

Команда rm, используемая для удаления файлов и каталогов, может быть очень опасной, если запускать её с привилегиями супер-пользователя root. Приятно осознавать, что большинство современных реализаций команды rm помогают предотвратить катастрофу (удаление всей информации на вашем диске).

Что делает флаг preserve-root

Поведение rm по умолчанию в системах Linux означает включение флага preserve-root – это опция, защищающая корневую (root, /) файловую систему от удаления. При попытке удаления этого верхнего уровня файловой системы, вы получите предупреждение:

greys@stream:/ $ rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe

Почему сообщение говорит, что рекурсивное удаление в разделе / опасно? Потому что абсолютно все каталоги и другие файловые системы в Unix и Linux монтируются как ветки дерева /. То есть они являются подкаталогами, удалив которые рекурсивно вы можете стереть всю информацию, доступную на вашем системном разделе (и довольно большой объём других подмонтированных и активных файловых систем, если уж совсем не повезло).

Я-то запустил команду из-под обычного пользователя, так что тотальной катастрофы бы не получилось. Но под пользователем root такая команда могла бы кончиться довольно скверно.

Почему preserve-root это реально круто

Ясное дело, что сознательно мало кто будет планировать удалять все файлы из корневого каталога /, но вот вам очень типичный пример ошибки, допускаемой новичками: использование не инициализированных (нулевого значения) переменных:

greys@stream:/ $ MYDIR=mydir
greys@stream:/ $ echo rm -rf /${MYDIR}
rm -rf /mydir
greys@stream:/ $ rm -rf /${MYDIR}

Казалось бы, всё правильно: у меня есть переменная $MYDIR, у неё есть какое-то значение – оно указывает на каталог. Я запускаю команду rm и указывают ей в качестве параметра мою переменную MYDIR.

Но вот если переменная MYDIR не имеет значения (забыли её создать), то наша команда превратится вот во что:

greys@stream:/ $ MYDIR=
greys@stream:/ $ echo rm -rf /${MYDIR}
rm -rf /
greys@stream:/ $ rm -rf /${MYDIR}
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe

Так что опция –preserve-root – прямо-таки спасение.

Также в тему




Давайте учиться вместе!

Заходите на страницу Facebook или присоединяйтесь к чату в Telegram:
Я использую браузер Brave
Попробуйте сами: Brave Browser
IT Консалтинг
У меня есть консалтинговая компания: Tech Stack Solutions. Я помогаю планировать и создавать облачные решения на базе AWS и помогаю с развёртыванием и поддержкой сервисов на Unix/Linux. Свяжитесь со мной тут.

Recent Tweets