В некоторых версиях UNIX man-страница rm определяет ее как команду для удаления связи с файлом.
В UNIX файлы - это объекты в файловой системе, называемые Inodes, без имен или расположения, кроме идентификатора в файловой системе. Их имена являются ссылками на них в различных каталогах, которые представляют собой тип файла, который индексирует файлы (или каталоги, поскольку они являются файлами), которые перечислены в нем.
При отмене связывания файла счетчик ссылок файла уменьшается, а когда он достигает 0, он фактически удаляется, поскольку файловая система помечает его как свободный, а его блоки / экстенты также помечаются как свободные.
Если у вас была возможность создать каталог без предварительного отсоединения файлов внутри него, вы достигнете точки, когда у вас есть inode-ы, на которые есть ссылки в вашей файловой системе, но к которым нельзя получить доступ никакими обычными способами.
Поскольку существует ссылка на них в соответствии с их количеством ссылок, они не помечаются как удаленные и становятся потерянными файлами.
Это становится еще более сложным, когда потерянные «файлы» являются каталогами, и поэтому увеличивает потенциальный объем потерянного хранилища в файловой системе.
Таким образом, rm -r был добавлен в качестве функции, облегчающей жизнь пользователей UNIX, за счет стандартного «духа UNIX», поскольку он более сложен, чем классические утилиты UNIX, так как он спускается в каталоги и удаляет файлы внутри,
Кроме того, в ранние времена UNIX системы не имели большого объема памяти, а отображение рекурсивной структуры каталога приводило к снижению производительности, и иногда было невозможно обойтись без разделения работы.
cp, читает файл и копирует его, блок за блоком. Если бы он копировал каталог так же, как и файл, он добавил бы ссылки на файлы внутри, не увеличивая их счетчик ссылок, что могло бы привести к несогласованности данных (при чтении / записи в инод, чьи блоки помечены как свободные с момента их исходный индекс был удален), потерянные данные - поскольку удаление последней (известной) ссылки на файл может привести к повторному использованию его номера индекса.
Для группы tl; dr:
каталоги в UNIX - это тип файла, это правда, но поскольку информация в них обрабатывается системой по-разному, так как это метаданные файловой системы, команды, управляющие файлами, не могут работать с каталогами без изменить их поведение, чтобы манипулировать зависимыми метаданными.
rm
крайней мере, если вы хотите, чтобы игнорировать разницу между файлами и каталогами, вы можете поместить в вашем~/.bashrc
файле:alias rm='rm -r'
.