Por que o tamanho do arquivo “ponto” “.” pode exceder 4096?

9

Hoje encontrei um diretório "vazio" com um tamanho de 4MB.

Não tinha conteúdo visível, por isso tentei ls -lah . Isso me mostrou alguns arquivos ocultos (não muito grandes). Procurando a razão pela qual o diretório era tão grande, descobri que o arquivo de pontos ( . ) tinha um tamanho de 3,9MB.

O que é armazenado nesse arquivo? Isso não é apenas um tipo de link para o mesmo diretório?

Aqui está a saída da shell (anônima):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 ([email protected]) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
    
por Martin Hennings 21.11.2012 / 10:14

1 resposta

13

O arquivo de ponto, como todo diretório, contém uma lista de nomes para os arquivos neste diretório e seus números de inode. Portanto, se você já tiver muitos arquivos nesse diretório (não é improvável que um diretório "tmp") faça com que a entrada do diretório cresça para esse tamanho.

Após os arquivos desaparecerem, o sistema de arquivos não reduz automaticamente o arquivo de diretório novamente.

Você mesmo pode experimentar isso fazendo um novo diretório vazio, faça ls -la nele para ver o tamanho inicial (4096 na minha máquina) e então touch ing muitos arquivos, o que fará com que o tamanho do diretório cresça .

(Sim, eu sei que estou ignorando / sendo impreciso sobre muitos detalhes aqui. Mas o OP não pediu uma explicação completa de como os sistemas de arquivos EXT * funcionam.)

    
por 21.11.2012 / 11:22