Почему такой команды нет в команде 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) , который когда-либо будет успешным, - это когда целевой каталог пуст, достижение этой точки с помощью / означает, что система уже выполнила.