Usunięcie bieżącego katalogu nie wpływa na integralność systemu plików ani jego logiczną organizację. Zapobieganie .
usuwaniu odbywa się zgodnie ze standardem POSIX, który stwierdza na rmdir(2)
stronie podręcznika:
Jeśli argument ścieżki odnosi się do ścieżki, której końcowym składnikiem jest kropka lub kropka-kropka, rmdir () zawiedzie.
Jedno uzasadnienie można znaleźć na rm
stronie podręcznika:
Narzędzie rm nie może usuwać nazw kropka-kropka-kropka, aby uniknąć konsekwencji niezamierzonego zrobienia czegoś takiego:
rm -r. *
Z drugiej strony, jawne usunięcie bieżącego katalogu (tj. Poprzez podanie jego pełnej lub względnej ścieżki) jest dozwoloną operacją w systemie Unix, przynajmniej od SVR3, ponieważ było to zabronione w systemie Unix w wersji 7 do SVR2. Jest to bardzo podobne do tego, co dzieje się po usunięciu pliku, który jest aktywnie odczytywany lub zapisywany. Procesy uzyskujące dostęp do pliku usuwania kontynuują operacje odczytu i zapisu, tak jakby nic się nie wydarzyło. Po usunięciu bieżącego katalogu procesu ten katalog nie jest już dostępny, ale jego i-węzeł pozostaje w systemie plików, dopóki proces nie umrze lub nie zmieni własnego katalogu.
Zauważ, że proces nie będzie mógł użyć ścieżki względem bieżącego katalogu do zmiany cwd (np. cd ..
), Ponieważ nie ma już ..
wpisu w jego bieżącym katalogu.
Kiedy rodzaj ktoś rmdir .
, oni prawdopodobnie oczekują, że aktualny wpis do katalogu zostać usunięty, ale kiedy katalog jest usuwana (przy użyciu jego ścieżki), trzy wpisy w katalogach są faktycznie usunięte, .
, ..
, a katalog sam.
Usunięcie tylko .
tego katalogu, a nie wpisu tego katalogu, spowodowałoby utworzenie katalogu niezgodnego, ale jak już wspomniano, jest to zabronione przez standard.
Jak słusznie zauważył @Emmanuel, istnieje drugi powód, dla którego usunięcie .
jest niedozwolone. Istnieje co najmniej jeden system operacyjny zgodny z POSIX (Mac OS X z HFS +), który z silnymi ograniczeniami obsługuje tworzenie twardych dowiązań do istniejących katalogów. W takim przypadku z katalogu nie ma jasnego sposobu, aby dowiedzieć się, który hardlink ma zostać usunięty.