Por que o tamanho do arquivo "ponto" pode ser "." exceder 4096?


10

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

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

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

Aqui está a saída do shell (anonimizada):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (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
...

Respostas:


14

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

Após a saída dos arquivos, o sistema de arquivos não reduz automaticamente o arquivo de diretório novamente.

Você pode experimentar isso criando um novo diretório vazio, faça ls -la-o para ver o tamanho inicial (4096 na minha máquina) e, em seguida, touchmuitos arquivos, o que aumentará o tamanho do diretório.

(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.)


2
Obrigado, isso parece explicar o fenômeno. Duas perguntas apenas por curiosidade: quando o arquivo de diretório diminuiria novamente? E existe uma maneira de mostrar o conteúdo desse arquivo?
22812 Martin Hennings

3
(1) Consulte também unix.stackexchange.com/questions/38639/… - resposta curta, exclua o diretório e recrie-o.
Bristol

2
(2) Infelizmente, não mais. Isso costumava ser possível em versões antigas do UNIX.
Bristol

Você também pode executar e2fsck -Dno sistema de arquivos, mas isso requer que seja desmontado.
Psr #

@Bristol debugfspode ser perspicaz
Volker Siegel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.