Quantas entradas são criadas quando você cria um novo diretório no * nix?

2

De acordo com a pergunta, acho que mkdir ~/a é dois ou três:

  • 1 entrada para o diretório em que está ( ~/a )
  • 1 entrada para si mesmo ( cd a && ls . )
  • e / ou 1 entrada para si mesmo novamente ( cd a && ls .. )

Alguém poderia esclarecer se isso é dois ou três?

    
por Deuterium 22.02.2011 / 08:31

2 respostas

3

Em um diretório vazio:

% stat .
  File: '.'
  Size: 6               Blocks: 0          IO Block: 4096   directory
Device: fe04h/65028d    Inode: 537317737   Links: 2
Access: (0750/drwxr-x---)  Uid: ( 1000/stribika)   Gid: (  100/   users)
Access: 2011-02-22 08:47:20.935036074 +0100
Modify: 2011-02-22 08:47:20.935036074 +0100
Change: 2011-02-22 08:47:20.935036074 +0100
 Birth: -
% mkdir foo
% stat .
  File: '.'
  Size: 16              Blocks: 0          IO Block: 4096   directory
Device: fe04h/65028d    Inode: 537317737   Links: 3
Access: (0750/drwxr-x---)  Uid: ( 1000/stribika)   Gid: (  100/   users)
Access: 2011-02-22 08:47:20.935036074 +0100
Modify: 2011-02-22 08:47:57.465036072 +0100
Change: 2011-02-22 08:47:57.465036072 +0100
 Birth: -
% stat foo
  File: 'foo'
  Size: 6               Blocks: 0          IO Block: 4096   directory
Device: fe04h/65028d    Inode: 509269      Links: 2
Access: (0750/drwxr-x---)  Uid: ( 1000/stribika)   Gid: (  100/   users)
Access: 2011-02-22 08:47:57.465036072 +0100
Modify: 2011-02-22 08:47:57.465036072 +0100
Change: 2011-02-22 08:47:57.465036072 +0100
 Birth: -

Como você pode ver, existem 2 links para um diretório vazio. Quando eu criar um novo dentro dele, a contagem de links aumenta para 3. Além disso, há dois links para o novo diretório. O total é de três novos links.

Isso ocorre porque cada diretório possui um link para ele mesmo (.) e seu pai (..).

    
por 22.02.2011 / 08:55
3

Na implementação original do Unix, para manter o código do sistema de arquivos dentro do kernel simples, os programas de manipulação de diretório fizeram algum trabalho extra: em particular, mkdir /parent/a criou uma entrada para a in /parent , mais uma entrada chamado . em a (apontando para a em si) e uma entrada chamada .. em a (apontando para /parent ¹).

Muito em breve, o código para mkdir e amigos foi transferido para o kernel, mas o formato do sistema de arquivos continuava tendo entradas explícitas de . e .. , cujo código de sistema encontrado pelo nome (em oposição a ter dois especiais ponteiros de formatação em cada diretório).

Hoje em dia, alguns sistemas de arquivos (a maioria deles) fingem: os diretórios não possuem . e .. entradas no disco, eles são gerados pelo driver. No entanto, do ponto de vista do usuário, isso é transparente. A contagem de links de um diretório ainda é dois mais o número de subdiretórios (a entrada no pai, o próprio diretório . e o .. de cada subdiretório). Em particular, um diretório vazio tem uma contagem de links de dois (ou seja, há duas entradas no sistema de arquivos apontando para ele), mas criá-lo cria três entradas (a terceira é .. , que aponta para o pai).

Por referência, não por nome. Portanto, se você renomear /parent , a .. continuará apontando para o diretório pai de a , para onde for movido na estrutura do sistema de arquivos.

    
por 22.02.2011 / 21:41