O design fundamental do sistema de arquivos Unix remonta aos primórdios. É descrito no documento Sistema de Compartilhamento de Tempo do UNIX , de Dennis M. Ritchie e Ken Thompson.
Os designers queriam se referir ao diretório atual e ter um caminho para ir de um diretório para o diretório pai. Em vez de introduzir a sintaxe especial do shell, eles decidiram usar um recurso que já existia: diretórios podem conter entradas para outros diretórios, então eles decidiram que uma entrada com o nome especial .
sempre apontaria para o próprio diretório, e uma entrada com o nome especial ..
sempre apontaria para o pai de um diretório. Por exemplo, se o diretório raiz contiver um subdiretório chamado foo
,% foo
..
pontos de entrada para o diretório raiz e foo
.
pontos de entrada para foo
.
Assim, a contagem de links de um diretório (o número de entradas de diretório apontando para ele) sempre seria 2 para um diretório sem subdiretório: a entrada esperada no diretório pai, mais o diretório .
. Cada subdiretório adiciona 1 à contagem de links devido à entrada ..
.
As entradas especiais .
e ..
foram criadas originalmente pelo comando mkdir
, copiando a representação em disco do sistema de arquivos diretamente. Sistemas posteriores mudaram isso para o kernel. Atualmente, muitos sistemas de arquivos não incluem mais as entradas .
e ..
na representação em disco. O driver do sistema de arquivos não precisa de .
e não precisa de ..
se lembra sempre a localização do pai de um diretório (o que aumenta um pouco o consumo de memória, insignificante para os padrões de hoje, mas não para os padrões de 1970). Nos sistemas de arquivos que incluem entradas .
e ..
no disco, o driver do sistema de arquivos garante que essas entradas estejam sempre presentes. Nos sistemas de arquivos que não incluem essas entradas na representação em disco, o driver do sistema de arquivos finge que essas entradas estão presentes.