desenv-web-rp.com

Por que um novo diretório tem uma contagem de links físicos de 2 antes que algo seja adicionado a ele?

Digamos que eu apenas criei o diretório newDirectory e, em seguida, eu faço o comando ls -ld. Vejo que o número de links físicos é 2. O que exatamente torna o link físico 2 desde o início? Além disso, o número de subdiretórios no diretório atual é igual ao número de links físicos - 2?

40
John

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 proporcionou uma maneira fácil de percorrer o sistema de arquivos, tanto para aplicativos quanto para o próprio sistema operacional.

Assim, cada diretório tem uma contagem de links de 2 + n, em que n é o número de subdiretórios. Os links são a entrada para esse diretório em seu pai, a 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

Então 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 um dos /parent/dir/sub1, /parent/dir/sub2 E /parent/dir/sub3. Como /parent/dir/sub1 Não possui 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 maiúsculas e minúsculas no diretório raiz, que não possui um pai "adequado", o diretório raiz contém uma entrada .. Apontando para si mesma. Dessa forma, ele também possui uma contagem de links de 2 mais o número de subdiretórios, sendo os 2 /. E /...

Os sistemas de arquivos posteriores tendem a acompanhar os diretórios pai na memória e geralmente não precisam que . E .. Existam como entradas reais; sistemas unix modernos típicos tratam . e .. como valores especiais como parte do código do sistema de arquivos independente do tipo de sistema de arquivos. Alguns sistemas de arquivos ainda incluem as entradas . E .. Ou fingem que nada aparece no disco.

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

41

Há um para o próprio diretório e outro para . dentro dele.

Além disso, o número de subdiretórios no diretório atual é igual ao número de links físicos - 2?

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

Se você está apenas olhando para a saída ls para ter uma idéia de quantos subs existem, é uma boa idéia.

1 Ou pelo menos, você não pode com ln. Eu não tentei programaticamente e man 2 link é ambíguo - não há erro óbvio para vincular a um diretório, embora haja alguns que possam ser aplicados (EMLINK, EPERM). Portanto, a menos que haja algum padrão em algum lugar que diga que os únicos possíveis links físicos para um diretório são . e .., novamente, eu trataria apenas essa contagem de links físicos como uma pista casual.

13
goldilocks