Видалення поточного каталогу не впливає на цілісність файлової системи або її логічну організацію. Запобігання .
видаленню виконується відповідно до стандарту POSIX, який зазначено на rmdir(2)
сторінці керівництва:
Якщо аргумент шляху посилається на шлях, кінцевим компонентом якого є крапка або точка-крапка, rmdir () вийде з ладу.
Одне обґрунтування можна знайти на rm
сторінці керівництва:
Утиліта rm забороняє видаляти імена dot і dot-dot, щоб уникнути наслідків випадкового вчинити щось на зразок:
rm -r. *
З іншого боку, явне видалення поточного каталогу (тобто, зазначення його повного або відносного шляху) - це дозволена операція під Unix, принаймні з часу SVR3, як це було заборонено для Unix версії 7 до SVR2. Це дуже схоже на те, що відбувається, коли ви видаляєте файл, який активно читається або записується. Процеси доступу до файлу видалення продовжують операції з читання та запису так само, якби нічого не сталося. Після того, як ви видалили поточний каталог процесу, цей каталог стає не більш доступним, хоча його шлях, але його inode залишається у файловій системі до тих пір, поки процес не помре або не змінить власний каталог.
Зауважте, що процес не зможе використати шлях відносно поточного каталогу для зміни свого cdd (наприклад cd ..
), оскільки ..
в поточному каталозі більше немає запису.
Коли хто - то тип rmdir .
, вони , ймовірно , чекають , що поточна запис каталогу бути видалена , але коли каталог видаляються ( з допомогою шляху), три записи каталогу фактично вилучена, .
, ..
і каталогу сам.
Видалення лише .
цього каталогу, а не введення цього каталогу, створило б невідповідний каталог, але, як уже було зазначено, це заборонено стандартом.
Як справедливо зазначав @Emmanuel, є друга причина, чому видалення .
заборонено. Існує щонайменше одна сумісна з POSIX ОС (Mac OS X з HFS +), яка з сильними обмеженнями підтримує створення жорстких посилань на існуючі каталоги. У такому випадку всередині каталогу немає чіткого способу дізнатися, яке жорстке посилання - це таке, яке очікується видалити.