Qual é a diferença entre o tamanho do arquivo em ls -l e du-sh?

4

Eu tenho uma busca muito confusa que me incomoda há anos. Qual é a diferença entre o tamanho do arquivo dado por ls -l e du -sh *.

GRILL:/user/MAIL/DATA>ll
total 270
drwxr-xr-x  11 user     users         1024 Mar 21  2013 .
drwxr-xr-x   6 user     users           96 May 28  2008 ..
drwxr-xr-x  10 user     users         1024 Jun 14 09:40 Rod
drwxr-xr-x   3 user     users           96 Sep 17  2010 Atlas
drwxr-xr-x  2339 user     users       132096 Jun 14 15:00 Admin    
drwxr-xr-x   3 user     users           96 Jul 11  2014 DE
drwxr-xr-x   5 user     users           96 Jun 14 08:30 Express
drwxr-xr-x   3 user     users           96 Sep 17  2010 Deferred
drwxr-xr-x   2 user     users           96 Feb 10  2009 Imagi
drwxr-xr-x   6 user     users         1024 Jul 11  2014 NO
drwxr-xr-x   3 user     users         2048 Mar 21  2013 SE
-rw-r--r--   1 user     users           55 Mar 21  2013 cmd

GRILL:/user/MAIL/DATA>du -sk *
6723    Rod
0       Atlas
435494  Admin
2       DE
111273  Express
2       Deferred
0       Imagi
541     NO
12      SE
1       cmd

O tamanho do Admin em ls -l é 132096 , tentei remover 400000+ arquivos do diretório Admin e não achei o espaço reduzido nem um pouco.

Considerando que du -sk fornece o tamanho como 435494 . Qual é o tamanho original do arquivo e qual é a diferença entre eles? Alguém poderia por favor elaborar?

    
por sabarish jackson 15.06.2017 / 06:04

2 respostas

3

Para arquivos, ls -l file mostra (entre outras coisas) o tamanho de file em bytes, enquanto du -k file mostra o espaço ocupado por file no disco (em unidades de 1 kB = 1204 bytes). Como o espaço em disco é alocado em blocos, o tamanho indicado por du -k é sempre um pouco maior que o espaço indicado por ls -kl (que é o mesmo que ls -l , mas em unidades de 1 kB).

Para diretórios, ls -ld dir mostra (entre outras coisas) o tamanho da lista de nomes de arquivos (junto com vários atributos) dos arquivos e subdiretórios em dir . Esta é apenas a lista de nomes de arquivos, não o conteúdo dos arquivos ou subdiretórios. Portanto, esse tamanho aumenta quando você adiciona arquivos a dir (mesmo quando os arquivos estão vazios), mas permanece inalterado quando um dos arquivos em dir cresce.

No entanto, quando você exclui arquivos de dir , o espaço da lista não é recuperado imediatamente, mas as entradas dos arquivos excluídos são marcadas como não usadas e depois são recicladas (isso depende da implementação, mas o que eu descrito é praticamente o comportamento universal nos dias de hoje). É por isso que você pode não ver nenhuma alteração na saída ls -ld quando excluir arquivos até muito mais tarde, se é que vai acontecer.

Finalmente, du -ks dir mostra (uma estimativa) do espaço ocupado no disco por todos os arquivos em dir , junto com todos os arquivos em todos os subdiretórios dir , em unidades de 1 kB = 1024 bytes. Levando em conta a descrição acima, isso não tem qualquer relação com a saída de ls -kld dir .

    
por 15.06.2017 / 07:08
0

ls -l mostra apenas tamanhos de arquivo em 1 nível.

du mostrará os tamanhos das pastas de forma recursiva (soma dos tamanhos dos arquivos na pasta).

    
por 15.06.2017 / 06:14