A remoção do diretório atual não afeta a integridade do sistema de arquivos ou sua organização lógica. A prevenção da .
remoção é feita para seguir o padrão POSIX, que declara na rmdir(2)
página do manual:
Se o argumento do caminho se referir a um caminho cujo componente final seja ponto ou ponto, rmdir () falhará.
Uma justificativa pode ser encontrada na rm
página de manual:
O utilitário rm é proibido de remover os nomes ponto e ponto a ponto, a fim de evitar as conseqüências de se fazer algo inadvertidamente:
rm -r. *
Por outro lado, remover explicitamente o diretório atual (declarando seu caminho completo ou relativo) é uma operação permitida no Unix, pelo menos desde o SVR3, pois foi proibido com o Unix versão 7 até o SVR2. Isso é muito semelhante ao que acontece quando você remove um arquivo que está sendo lido ou gravado ativamente. Os processos que acessam o arquivo de exclusão continuam suas operações de leitura e gravação como se nada tivesse acontecido. Após a remoção de um diretório atual do processo, esse diretório não fica mais acessível por seu caminho, mas seu inode permanece presente no sistema de arquivos até o processo morrer ou alterar seu próprio diretório.
Observe que o processo não poderá usar um caminho relativo ao diretório atual para alterar seu cwd (por exemplo cd ..
), porque não há mais uma ..
entrada no diretório atual.
Quando alguém tipo rmdir .
, eles provavelmente esperar a entrada do diretório atual a ser removido, mas quando um diretório é removido (usando seu caminho), três entradas de diretório são realmente removido, .
, ..
, e o próprio diretório.
Remover apenas .
e não a entrada de diretório deste diretório criaria um diretório não compatível, mas, como já declarado, é proibido pelo padrão.
Como o @Emmanuel apontou corretamente, há uma segunda razão pela qual a remoção .
não é permitida. Há pelo menos um sistema operacional compatível com POSIX (Mac OS X com HFS +) que, com fortes restrições, suporta a criação de links físicos para diretórios existentes. Nesse caso, não há uma maneira clara de dentro do diretório para saber qual o hardlink que se espera que seja removido.