Я обсуждал с другом, пытаясь выяснить, почему команда rm, например, не проверяет, является ли путь к файлу или папке автоматически, и при необходимости по умолчанию удаляет его рекурсивно. Все время без необходимости использовать "-r" для довольно распространенной задачи. Я знаю, что могу поставить для этого псевдоним. Но на самом деле я хочу знать причину (я думаю, что она существует, просто не знаю).
Вторая гипотеза заключается в том, что рекурсивный режим был сделан специально.
Ведь обычный rm
тоже небезопасен. И не обязательно даже безопаснее, поскольку разные файлы не являются одинаково важными или незаменимыми. Что бы вы предпочли удалить: каталог, клонированный с Github с флагом -r
или /boot/vmlinuz*
без опции -r
.
С rm
вы стреляете себе в ногу. Но с rm -r
вы стреляете в каждую ногу, которую видите, и если вам повезет, ни одна из этих ног не окажется вашей собственной.
А rm -r
делает нечто совершенно иное, чем обычный rm
, он должен отвязать(2) каждый файл, идущий по дереву, а затем rmdir(2) пустые каталоги.
О действительной причине вы должны спросить автора (ов). Я могу только сказать вам, что это очень хорошая практика:
Из статьи в Википедии о железнодорожном пневматическом тормозе :
Система Westinghouse использует давление воздуха для зарядки резервуаров (баков) воздуха на каждой машине. Полное давление воздуха дает сигнал каждой машине отпустить тормоза. Снижение или потеря давления воздуха дает сигнал каждой машине задействовать тормоза, используя сжатый воздух в своих резервуарах.
Это означает, что по умолчанию тормоз включен. Вам нужно усилие, чтобы освободить его и привести поезд в потенциально опасное состояние.
Конечно, это не объясняет, почему существуют два режима rm
(рекурсивный и нерекурсивный). Может быть, это то, о чем вы спрашиваете. Тем не менее, сделать более безопасный вариант по умолчанию было правильным решением.
A file
не то же самое, что directory
, и не то же самое, что block or character device file
, pipe
, semaphore
и т. д....
rm
удаляет файл (обычный, устройство, включенные каналы ), однако
rmdir
удаляет каталог.
rm
-по умолчанию каталог не удаляется.
rmdir
-по умолчанию не будет удаляться не -пустой каталог.
rm -d
-заставляет rm принимать как каталог, так и файл, но удаляет только пустой каталог (, как иrmdir
).
rm -r
-перейдет к нижней части дерева и удалит как файлы, так и каталоги по мере продвижения вверх по дереву. Сначала он удаляет файлы, поэтому каталог будет пустым, когда он попытается удалить его.
rmdir -p a/b/c
удаляет каталог и его родителей, но каталог удаляется только в том случае, если он пуст. Учитывая структуру каталогов a/b/c, команды rmdir -p a/b/c
и rm -r a
почти обратны, за исключением того, что rm -r
удалит непустой каталог, rmdir
будет жаловаться.
Это дает нам довольно гибкую систему для работы.
Ничто не мешает вам создать собственный псевдоним,
`псевдоним ZapIt='rm -r $ *'
mkdir -p a/b/c ; touch a/b/c/fc1
ZapIt a
удалит a/b/c/fc1 a/b/c a/b и a.