O valor do link é 2 por padrão para pastas

5

Alguém pode me ajudar a entender a lógica por trás do valor do link sendo "2" pela primeira vez quando criamos pastas / diretório no linux.

Pesquisei muito, mas não consegui obter uma lógica satisfatória

    
por Pallab 03.09.2014 / 10:48

2 respostas

5

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.

    
por 04.09.2014 / 00:21
5

Todo diretório tem contagem de links, pelo menos dois, devido a

  1. a referência ao diretório de seu diretório pai
  2. a auto-referência dentro do diretório ( . )

Exemplo: Suponha que em algum diretório base exista um diretório foo :

$ ls -i /basedir
1056868 foo
$ ls -ia /basedir/foo
1056868 .  1056849 ..

A ls option -i mostra os números de inode das entradas de diretório, a opção -a mostra entradas que começam com um ponto ( ls não mostra essas por padrão). Observe que /basedir/foo e /basedir/foo/. têm o mesmo número de inode. Como há (pelo menos) duas referências diferentes ao inode correspondente, a contagem de links para esse inode é dois (ou mais).

    
por 03.09.2014 / 11:04