Estou tendo dificuldades para entender qual é a maneira correta de ler o tamanho dos arquivos, pois cada comando fornece resultados variados. Eu também me deparei com uma postagem em http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html, que afirma o seguinte;
du fornece o tamanho do arquivo em que reside no sistema de arquivos. (O IE sempre fornecerá um resultado divisível por 1024).
ls lhe dará o tamanho real do arquivo.
O que você está vendo é a diferença entre o tamanho real do arquivo e a quantidade de espaço em disco que ele ocupa. (também chamado de eficiência do sistema de arquivos).
Qual é a diferença entre como ele reside no sistema de arquivos e o tamanho real do arquivo
du
está mostrando o sábiod
isku
, ele está olhando para o espaço ocupado na unidade atual e, portanto, mostra o tamanho do residente.df -h
?df
relata o número de blocos restantes * o tamanho do bloco do sistema de arquivos. Nesse caso, seria mais parecidodu
, já que até os blocos parcialmente usados são considerados totalmente alocados.df
basicamente traduz statvfs , para que você possa ver a chamada do sistema para ter uma idéia melhor do que está acontecendo.Há outra opção aqui, que não foi abordada - arquivos esparsos . Nesse caso,
du
mostrará um tamanho menor do que um simplesls -l
, porquels
está relatando o "tamanho" do arquivo como sendo o tamanho aparente (o número de bytes que você pode ler, se quiser muitos zeros), enquantodu
vai continue usando o número real de blocos de disco em uso.Truque divertido: crie muitos arquivos esparsos grandes e depois impressione seus amigos com quanto espaço em disco você tem ("veja, eu estou armazenando arquivos de 1 TB de onze gazilhões no meu disco rígido!"). OK, talvez não seja tão divertido então.
fonte
Os sistemas de arquivos são compostos de blocos. Os arquivos não precisam se encaixar perfeitamente em blocos. Se um arquivo tivesse 1024 bytes, o tamanho 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 atualmente e, g,
fonte
Ainda há mais uma razão pela qual eles podem ser diferentes. O du -h sabe quando vê o mesmo arquivo com outro nome (links físicos, ao contrário de links simbólicos) e reportará cada arquivo pelo tamanho, mas adicione o tamanho apenas uma vez ao diretório-pai comum.
fonte