No puedo entender por qué obtengo los siguientes resultados:
ls -l
me dice que el tamaño de un archivo dado (HISTORIA) es "581944":
$ ls -l HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
ls -s
dice que es "572":
$ ls -s HISTORY
572 HISTORY
Obviamente necesito hacer que los valores utilicen una escala comparable. Así que primero confirmo que usar --block-size 1
in ls -l
me da el mismo resultado que antes:
$ ls -l --block-size 1 HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
Luego hago lo mismo para ls -s
obtener un valor en la misma escala:
$ ls -s --block-size 1 HISTORY
585728 HISTORY
Diferentes resultados! 581944 ≠ 585728 .
Intenté generar valores comparables al revés, usando -k
, pero obtengo:
$ ls -lk HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY
572 HISTORY
De nuevo, diferentes resultados, 569 ≠ 572 .
Traté de especificar --si para asegurarme de que ambas opciones usaban la misma escala, sin éxito:
$ ls -lk --si HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY
586k HISTORY
... de nuevo, diferentes valores: 582k ≠ 586k .
Intenté buscar en la web, pero lo único que pude encontrar que parecía relevante fue esto :
Algunos archivos tienen "agujeros" en ellos, de modo que el uso indicado por
ls -s
(...) es menor que el tamaño de archivo indicado porls -l
".
(tenga en cuenta que en mis resultados sucede lo contrario: ls -s
devuelve tamaños más grandes que ls -l
, no más pequeños).
Mientras tanto, esta página dice que
No hay una manera elegante de detectar agujeros de archivos Unix.
Entonces, ¿cómo puedo lidiar con esta discrepancia? ¿Cuál de estos valores puede considerarse correcto? ¿Podría ser esto un error ls
?
fuente
ls -s
cuenta eso?sudo tune2fs -l /dev/sdaX|grep Inode
odf -i
para todas las particiones.ls -lsh ~/Downloads/torrents
me da, por ejemplo,92K -rw-r--r-- 1 waldir waldir 350M Sep 15 2012 video.avi.part
. Es decir, el 92K, devuelto por la opción -s, es el espacio real que ocupa el archivo, en el sistema de archivos, y 350M, devuelto por la opción -l, es el tamaño completo que tendría el archivo si se descargara por completo (es decir, si todos los bytes, de principio a fin, no fueran cero). Ver lists.freebsd.org/pipermail/freebsd-questions/2012-June/…ls -s
le indica el tamaño asignado del archivo, siempre un múltiplo de la unidad de asignación.ls -l
Indica el tamaño real. Una forma fácil de probar:fuente