Qual é a diferença entre du -h e ls -lh?

29

Estou tendo dificuldade em compreender qual é a maneira correta de ler o tamanho dos arquivos, já que cada comando fornece resultados variados. Também encontrei uma postagem no link que afirma o seguinte:

du gives you the size of the file as it resides on the file system. ( IE will will always give you a result that is divisible by 1024 ).

ls will give you the actual size of the file.

What you are looking at is the difference between the actual size of the file and the amount of space on disk it takes. ( also called file system efficiency ).

Qual é a diferença entre como reside no sistema de arquivos e tamanho real do arquivo

    
por PeanutsMonkey 13.07.2011 / 22:31

4 respostas

45

Isso se chama espaço de folga :

Each layer of abstraction on top of individual bits and bytes results in wasted space when a datafile is smaller than the smallest data unit the file system is capable of tracking. This wasted space within a sector, cluster, or block is commonly referred to as slack space, and it cannot normally be used for storage of additional data. For individual 256-byte sectors, the maximum wasted space is 255 bytes. For 64 kilobyte clusters, the maximum wasted space is 65,535 bytes.

Portanto, se o sistema de arquivos alocar espaço em unidades de 64 KB e você armazenar um arquivo de 3 KB, então:

  • o tamanho real do arquivo é de 3 KB.
  • o tamanho de residente do arquivo é de 64 KB, pois os 61 KB restantes nessa unidade não podem ser alocados para outro arquivo e, portanto, são perdidos.

Observação : alguns sistemas de arquivos oferecem suporte a subalocação de blocos , o que ajuda a atenuar esse problema atribuindo vários arquivos pequenos (ou as extremidades finais de arquivos grandes) no mesmo bloco.

    
por 13.07.2011 / 22:41
15

Há outra opção aqui, que não foi abordada - arquivos esparsos . Nesse caso, du mostrará um tamanho menor do que um simples ls -l , porque ls está reportando o "tamanho" do arquivo como sendo o tamanho aparente (o número de bytes você poderia ler, se quisesse um monte de zeros), enquanto du continuaria a usar o número real de blocos de disco em uso.

Divertido truque: crie um grande número de arquivos grandes e esparsos e, em seguida, impressione seus amigos com o espaço em disco que você tem ("veja, estou armazenando arquivos de 1 bilhão de zilhão no meu disco rígido!"). OK, talvez não tão divertido assim.

    
por 14.07.2011 / 01:22
5

Sistemas de arquivos são compostos de blocos. Os arquivos não precisam se encaixar perfeitamente nos blocos. Se um arquivo tivesse 1024 bytes, seu tamanho seria em ls e du seria 1024. Se o tamanho do arquivo fosse 1025, o tamanho seria 1025 em ls e 2048 em du.

Observe que o exemplo acima assume um tamanho de bloco de 1024. Tamanhos de bloco maiores são a norma nos dias de hoje e, g,

ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred

du -h fred
8.0K    fred
    
por 13.07.2011 / 22:49
0

Ainda há mais um motivo pelo qual eles podem ser diferentes. du -h sabe quando vê o mesmo arquivo sob outro nome (links físicos, em oposição a links simbólicos) e relata cada arquivo para o tamanho que é, mas apenas adiciona o tamanho uma vez ao diretório pai comum.

    
por 14.07.2011 / 09:33