Por que um novo diretório tem uma contagem de hard link de 2 antes que qualquer coisa seja adicionada a ele?

29

Digamos que acabei de criar o diretório newDirectory e depois o comando ls -ld. Eu vejo que o número de hard links é 2. O que exatamente faz o hard link 2 desde o início? Também é o número de subdiretórios no diretório atual igual ao número de links físicos - 2?

    
por John 17.11.2013 / 17:30

2 respostas

32

Historicamente , o primeiro sistema de arquivos Unix criou duas entradas em cada diretório: . apontando para o próprio diretório e .. apontando para seu pai. Isso forneceu uma maneira fácil de percorrer o sistema de arquivos, tanto para aplicativos quanto para o próprio SO.

Assim, cada diretório possui uma contagem de links de 2 + n, onde n é o número de subdiretórios. Os links são a entrada desse diretório em seu pai, a própria entrada . do diretório e a entrada .. em cada subdiretório. Por exemplo, suponha que este seja o conteúdo da subárvore com raiz em /parent , todos os diretórios:

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Em seguida, dir tem uma contagem de links de 5: a entrada dir em /parent , a entrada . em /parent/dir e as três entradas .. em cada uma das /parent/dir/sub1 , /parent/dir/sub2 e /parent/dir/sub3 . Como /parent/dir/sub1 não tem subdiretório, sua contagem de links é 2 (a entrada sub1 em /parent/dir e a entrada . em /parent/dir/sub1 ).

Para minimizar a quantidade de invólucro especial para o diretório raiz, que não tem um pai “adequado”, o diretório raiz contém uma entrada .. apontando para si mesma. Dessa forma, ele também tem uma contagem de links de 2 mais o número de subdiretórios, sendo os dois /. e /.. .

Sistemas de arquivos posteriores tendem a manter o controle dos diretórios pai na memória e geralmente não precisam que . e .. existam como entradas reais; Os sistemas Unix modernos típicos tratam . e .. como valores especiais como parte do código do sistema de arquivos independente do sistema de arquivos. Alguns sistemas de arquivos ainda incluem . e .. entradas, ou fingem, mesmo que nada apareça no disco.

A maioria dos sistemas de arquivos ainda relata uma contagem de links de 2 + n para diretórios, independentemente de haver . e .. entradas, mas existem exceções, por exemplo, btrfs não faz isso.

    
por 17.11.2013 / 22:51
12

Existe um para o diretório em si e outro para . dentro dele.

Also is the number of subdirectories in the current directory equal to the number of hard links - 2?

Isso faz sentido, já que cada subdiretório cria um% hard_de% hardlink e, além disso, você não pode criar hardlinks para diretórios. 1 No entanto, eu não confiaria isso para nada sério, esp . já que é fácil contar os subdiretórios e obter o número real.

Se você está apenas olhando para .. output para ter uma ideia de quantos subs existem, então você tem uma idéia decente.

1 Ou pelo menos, você não pode com ls . Eu não tentei programaticamente, e ln é ambíguo - não há erro óbvio para vincular a um diretório, embora haja um par que pode ser aplicado ( man 2 link , EMLINK ). Então, a menos que haja algum padrão em algum lugar que diga que os únicos hard links possíveis para um diretório são EPERM e . , novamente, eu consideraria essa contagem de links rígidos apenas como uma dica casual.

    
por 17.11.2013 / 17:50

Tags