Удаление текущего каталога не влияет на целостность файловой системы или ее логическую организацию. Предотвращение .
удаления выполняется в соответствии со стандартом POSIX, который указан на rmdir(2)
странице руководства:
Если аргумент пути ссылается на путь, конечный компонент которого - точка или точка-точка, rmdir () завершится ошибкой.
Одно объяснение можно найти на rm
странице руководства:
Утилита rm запрещает удалять имена точка и точка-точка, чтобы избежать последствий непреднамеренного выполнения чего-либо вроде:
рм -р. *
С другой стороны, явное удаление текущего каталога (т. Е. Путем указания его полного или относительного пути) является допустимой операцией в Unix, по крайней мере, начиная с SVR3, поскольку это было запрещено в Unix версии 7 до SVR2. Это очень похоже на то, что происходит при удалении файла, который активно читается или записывается. Процессы, обращающиеся к файлу удаления, продолжают свои операции чтения и записи, как будто ничего не произошло. После удаления текущего каталога процесса этот каталог больше не доступен, хотя его путь, но его inode остаются в файловой системе до тех пор, пока процесс не прекратит работу или не изменит свой собственный каталог.
Обратите внимание, что процесс не сможет использовать путь относительно своего текущего каталога для изменения своего cwd (например cd ..
), потому что ..
в его текущем каталоге больше нет записи.
Когда кто - то тип rmdir .
, они , вероятно , ожидают , что текущая запись каталога быть удалена , но когда каталог удаляются ( с помощью пути), три записи каталога фактически удалена, .
, ..
и каталога сам.
Только удаление, .
а не запись каталога этого каталога, может создать каталог, не соответствующий требованиям, но, как уже было сказано, он запрещен стандартом.
Как правильно заметил @Emmanuel, есть и вторая причина, по которой удаление .
запрещено. Существует по крайней мере одна POSIX-совместимая ОС (Mac OS X с HFS +), которая с жесткими ограничениями поддерживает создание жестких ссылок на существующие каталоги. В таком случае из каталога нет четкого способа узнать, какая жесткая ссылка является той, которую предполагается удалить.