Não consigo entender por que estou obtendo os seguintes resultados:
ls -l
diz-me que o tamanho de um determinado arquivo (HISTORY) é "581944":
$ ls -l HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
ls -s
diz que é "572":
$ ls -s HISTORY
572 HISTORY
Obviamente, preciso fazer com que os valores usem uma escala comparável. Primeiro, confirmo que o uso de --block-size 1
in ls -l
me dá o mesmo resultado de antes:
$ ls -l --block-size 1 HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
Então faço o mesmo para ls -s
obter um valor na mesma escala:
$ ls -s --block-size 1 HISTORY
585728 HISTORY
Resultados diferentes! 581944 ≠ 585728 .
Tentei gerar valores comparáveis ao contrário, usando -k
, mas obtive:
$ ls -lk HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY
572 HISTORY
Novamente, resultados diferentes, 569 × 572 .
Tentei especificar --si para garantir que ambas as opções usassem a mesma escala, sem sucesso:
$ ls -lk --si HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY
586k HISTORY
... novamente, valores diferentes: 582k ≠ 586k .
Tentei pesquisar na web, mas a única coisa que pude achar relevante era o seguinte :
Alguns arquivos têm "brechas" neles, de modo que o uso listado por
ls -s
(...) é menor que o tamanho do arquivo listado porls -l
".
(observe que, em meus resultados, acontece o oposto: ls -s
retorna tamanhos maiores que ls -l
, não menores.)
Enquanto isso, esta página diz que
não há uma maneira elegante de detectar falhas no arquivo Unix.
Então, como posso lidar com essa discrepância? Quais desses valores podem ser considerados corretos? Isso poderia ser um bug ls
?
fonte
ls -s
conta isso?sudo tune2fs -l /dev/sdaX|grep Inode
oudf -i
para todas as partições.ls -lsh ~/Downloads/torrents
me dá, por exemplo92K -rw-r--r-- 1 waldir waldir 350M Sep 15 2012 video.avi.part
,. Ou seja, o 92K, retornado pela opção -s, é o espaço real que o arquivo ocupa, em termos de sistema de arquivos, e 350M, retornado pela opção -l, é o tamanho total que o arquivo teria se fosse completamente baixado (por exemplo, se todos os bytes, do início ao fim, forem diferentes de zero). Veja lists.freebsd.org/pipermail/freebsd-questions/2012-June/…ls -s
informa o tamanho alocado do arquivo, sempre um múltiplo da unidade de alocação.ls -l
informa o tamanho real. Uma maneira fácil de testar:fonte