Почему такой команды нет в команде rm?
Есть уже три гарантии:
-r
, без которого каталог нельзя удалить.
-i
, который подтверждает, что вы действительно хотите удалить то, что просили удалить. Привязка rm
к rm -i
включает эту защиту, если только вы не добавили ключ -f
чтобы выключить ее.
- Владение файлами, которое не позволяет всем пользователям, кроме
root
удалять корневой каталог.
Набор инструментов Unix похож на бензопилу: он был разработан, чтобы делать очень мощные вещи и использоваться людьми, которые понимают, что они делают. Те, кто ступают небрежно, могут в конечном итоге травмировать себя. Это не означает, что опытные не делают ошибок, и, очевидно, Sun и другие считают, что пользователи с root
должны быть защищены от себя.
Однако не должен ли этот конкретный случай быть исключением из этого правила?
Люди спрашивают , почему мы не можем поставить защитный кожух над rm
бензопилой, по крайней мере , в 1980 - й год. (Возможно, дольше, но моя история с Unix не идет дальше.) Вы должны задать себе больше вопросов:
Поскольку мы добавляем исключения, что еще следует считать священным? Должны ли мы предотвратить рекурсивное удаление чего-либо в корневом каталоге, чтобы избежать столь же разрушительных ошибок, как rm -rf /*
? А как насчет домашнего каталога пользователя? Как насчет /lib
или /bin
? Нужна ли нам специальная версия rm
для предотвращения этих ошибок в системах с нетрадиционной разметкой файловой системы?
Куда мы положим исполнение этих запретов? Просто в rm
или мы даем ядру эту работу? Поскольку rm
самом деле ничего не удаляет (он делает много вызовов unlink(2)
и rmdir(2)
на основе аргументов), у ядра не будет возможности обнаружить, что rm
действительно стрелял для /
до момента на самом деле пришел, чтобы удалить его. Поскольку единственный вызов rmdir(2)
, который когда-либо будет успешным, - это когда целевой каталог пуст, достижение этой точки с помощью /
означает, что система уже выполнила.