Por favor, defina qué quiere decir con tamaño "físico".
Jörg W Mittag
Respuestas:
28
ls -lle dará el tamaño aparente del archivo, que es la cantidad de bytes que leería un programa si leyera el archivo de principio a fin. dule daría el tamaño del archivo "en el disco".
Por defecto, dule da el tamaño del archivo en número de bloques de disco, pero puede usarlo -hpara obtener una unidad legible por humanos. Consulte también el manual de dusu sistema.
Tenga en cuenta que con GNU coreutil's du(que es probablemente lo que tiene en Linux), -bobtener bytes implica la --apparent-sizeopción. Esto no es lo que desea usar para obtener el número de bytes realmente utilizados en el disco. En su lugar, use --block-size=1o -B 1.
Con GNU ls, también puede hacerlo ls -s --block-size=1en el archivo. Esto le dará el mismo número que du -B 1para el archivo.
Ejemplo:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
Esto significa que este es un archivo de 512 MB que ocupa aproximadamente 24 KB en el disco. Es un archivo disperso (en su mayoría ceros que no se escriben realmente en el disco pero se representan como "agujeros" lógicos en el archivo). Los archivos dispersos son comunes cuando se trabaja con archivos grandes preasignados, por ejemplo, imágenes de disco para máquinas virtuales o archivos de intercambio, etc. Crear un archivo disperso es rápido, mientras que llenarlo con ceros es lento (e innecesario).
Consulte también el manual de fallocatesu sistema Linux.
en cuyo caso esta diferencia es importante? ¿Puedes dar un ejemplo práctico? gracias de antemano.
D'Arcy Nader
1
@ D'ArcyNader Ver respuesta actualizada.
Kusalananda
Corríjame si malinterpreto algo, pero parece que la primera oración es al revés: stackoverflow.com/a/31437673/3701431du mostraría cuántos datos se pueden leer realmente, mientras lsmuestra hasta qué punto se asignan los sectores del disco.
Sergiy Kolodyazhnyy
2
@SergiyKolodyazhnyy (perdón por responder tarde) No, dumuestra la cantidad de disco realmente en uso por el archivo, mientras que el tamaño aparente (tamaño lógico) que se muestra lses cuántos bytes podría leer un programa. Si el archivo es escaso, algunos de los bytes leídos serían ceros, pero aún se entregarían al programa que los leyó (simplemente no desde el disco).
Respuestas:
ls -l
le dará el tamaño aparente del archivo, que es la cantidad de bytes que leería un programa si leyera el archivo de principio a fin.du
le daría el tamaño del archivo "en el disco".Por defecto,
du
le da el tamaño del archivo en número de bloques de disco, pero puede usarlo-h
para obtener una unidad legible por humanos. Consulte también el manual dedu
su sistema.Tenga en cuenta que con GNU coreutil's
du
(que es probablemente lo que tiene en Linux),-b
obtener bytes implica la--apparent-size
opción. Esto no es lo que desea usar para obtener el número de bytes realmente utilizados en el disco. En su lugar, use--block-size=1
o-B 1
.Con GNU
ls
, también puede hacerlols -s --block-size=1
en el archivo. Esto le dará el mismo número quedu -B 1
para el archivo.Ejemplo:
Esto significa que este es un archivo de 512 MB que ocupa aproximadamente 24 KB en el disco. Es un archivo disperso (en su mayoría ceros que no se escriben realmente en el disco pero se representan como "agujeros" lógicos en el archivo). Los archivos dispersos son comunes cuando se trabaja con archivos grandes preasignados, por ejemplo, imágenes de disco para máquinas virtuales o archivos de intercambio, etc. Crear un archivo disperso es rápido, mientras que llenarlo con ceros es lento (e innecesario).
Consulte también el manual de
fallocate
su sistema Linux.fuente
du
mostraría cuántos datos se pueden leer realmente, mientrasls
muestra hasta qué punto se asignan los sectores del disco.du
muestra la cantidad de disco realmente en uso por el archivo, mientras que el tamaño aparente (tamaño lógico) que se muestrals
es cuántos bytes podría leer un programa. Si el archivo es escaso, algunos de los bytes leídos serían ceros, pero aún se entregarían al programa que los leyó (simplemente no desde el disco).Obtengo el tamaño del archivo en bytes como este:
fuente