É tecnicamente possível excluir . , pelo menos em sistemas de arquivos EXT4. Se você criar uma imagem do sistema de arquivos em test.img , montá-la e criar uma pasta test , desmonte-a novamente, edite-a usando debugfs :
debugfs -w test.img
cd test
unlink .
debugfs não recusa e elimina obedientemente a entrada de diretório . no sistema de arquivos. O diretório test ainda é utilizável, com uma surpresa:
sudo mount test.img /mnt/temp
cd /mnt/temp/test
ls
mostra apenas
..
então . realmente desapareceu. Ainda cd . , ls . , pwd ainda se comporta como de costume!
Eu já fiz esse teste usando rmdir . , mas isso exclui o inode do diretório ( enorme graças a BowlOfRed para apontando isto ), o que deixa test uma entrada de diretório pendente e é a verdadeira razão para os problemas encontrados. Nesse cenário, a pasta test se torna inutilizável; depois de montar a imagem, executando ls produz
ls: cannot access '/mnt/test': Structure needs cleaning
e o log do kernel mostra
EXT4-fs error (device loop2): ext4_lookup:1606: inode #2: comm ls: deleted inode referenced: 38913
A execução de e2fsck nessa situação na imagem exclui completamente o diretório test (o inode do diretório desapareceu, por isso não há nada para restaurar).
Tudo isso mostra que . existe como uma entidade específica no sistema de arquivos EXT4. Eu tenho a impressão de que o código do sistema de arquivos no kernel espera que . e .. existam, e avisa se eles não o fizerem (veja namei.c ), mas com o teste unlink . -based eu não vi esse aviso. e2fsck não gosta da entrada de diretório . ausente e oferece a correção:
$ /sbin/e2fsck -f test.img
e2fsck 1.43.3 (04-Sep-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Missing '.' in directory inode 30721.
Fix<y>?
Isso recria a entrada de diretório . .