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.