- Dave McKay
@thegurkha
- December 19, 2019, 8:00am EDT
Cuando utiliza el comando linux du
, obtiene tanto el uso real del disco como el tamaño real de un archivo o directorio. Explicaremos por qué estos valores no son los mismos.
uso real del disco y tamaño real
El tamaño de un archivo y el espacio que ocupa en su disco duro rara vez son los mismos., El espacio en disco se asigna en bloques. Si un archivo es más pequeño que un bloque, todavía se le asigna un bloque entero porque el sistema de archivos no tiene una unidad más pequeña de bienes raíces para usar.
a menos que el tamaño de un archivo sea un múltiplo exacto de bloques, el espacio que utiliza en el disco duro siempre debe redondearse al siguiente bloque completo. Por ejemplo, si un archivo es más grande que dos bloques pero más pequeño que tres, todavía se necesitan tres bloques de espacio para almacenarlo.
se utilizan dos medidas en relación con el tamaño del archivo., La primera es el tamaño real del archivo, que es el número de bytes de contenido que componen el archivo. El segundo es el tamaño efectivo del archivo en el disco duro. Este es el número de bloques del sistema de archivos necesarios para almacenar ese archivo.
Ejemplo
veamos un ejemplo sencillo., Redirigiremos un solo carácter a un archivo para crear un archivo pequeño:
echo "1" > geek.txt
ahora, usaremos la lista de formato largo, ls
, para ver la longitud del archivo:
ls -l geek.txt
La longitud es el valor numérico que sigue a la div id=»9c6e6dbf8e»> entradas, que son dos bytes. ¿Por qué son dos bytes cuando solo enviamos un carácter al archivo? Echemos un vistazo a lo que está pasando dentro del archivo.,
usaremos el comando hexdump
, que nos dará un recuento exacto de bytes y nos permitirá «ver» caracteres no imprimibles como valores hexadecimales. También usaremos la opción -C
(canonical) para forzar la salida a mostrar valores hexadecimales en el cuerpo de la salida, así como sus equivalentes de caracteres alfanuméricos:
hexdump -C geek.txt
la salida nos muestra que, comenzando en el offset 00000000 en el Archivo, hay un byte que contiene valor hexadecimal de 31, y uno que contiene un valor hexadecimal de 0a., La parte derecha de la salida muestra estos valores como caracteres alfanuméricos, siempre que sea posible.
El valor hexadecimal de 31 se utiliza para representar el dígito uno. El valor hexadecimal de 0A se utiliza para representar el carácter de alimentación de línea, que no se puede mostrar como un carácter alfanumérico, por lo que se muestra como un punto (.) en su lugar. El carácter de alimentación de línea se agrega mediante echo
. De forma predeterminada, echo
inicia una nueva línea después de mostrar el texto que necesita escribir en la ventana del terminal.,
que concuerda con la salida de ls
y concuerda con la longitud del archivo de dos bytes.
RELACIONADO: Cómo usar el comando ls para listar archivos y directorios en Linux
ahora, usaremos el comando du
para ver el tamaño del archivo:
du geek.txt
dice que el tamaño es cuatro, pero ¿cuatro de qué?
hay bloques, y luego hay bloques
Cuando du
informa el tamaño de los archivos en bloques, el tamaño que utiliza depende de varios factores., Puede especificar qué tamaño de bloque debe usar en la línea de comandos. Si no fuerzas a du
a usar un tamaño de bloque particular, sigue un conjunto de reglas para decidir cuál usar.
primero, comprueba las siguientes variables de entorno:
- DU_BLOCK_SIZE
- BLOCK_SIZE
- BLOCKSIZE
Si existe alguna de estas, se establece el tamaño del bloque, y du
deja de comprobar. Si no se establece ninguno, du
tiene por defecto un tamaño de bloque de 1.024 bytes., A menos que se establezca una variable de entorno llamada POSIXLY_CORRECT
. Si ese es el caso, du
por defecto tiene un tamaño de bloque de 512 bytes.
entonces, ¿cómo averiguamos cuál está en uso? Puede comprobar cada variable de entorno para resolverlo, pero hay una manera más rápida. Comparemos los resultados con el tamaño de bloque que usa el sistema de archivos.
para descubrir el tamaño de bloque que usa el sistema de archivos, usaremos el programa tune2fs
., Luego usaremos la opción -l
(list superblock), canalizaremos la salida a través de grep
, y luego imprimiremos líneas que contengan la palabra «Block».»
En este ejemplo, vamos a ver el sistema de archivos en la primera partición del primer disco duro, sda1
, y tendremos que usar sudo
:
sudo tune2fs -l /dev/sda1 | grep Block
El sistema de archivos tamaño de bloque es de 4.096 bytes. Si dividimos eso por el resultado que obtuvimos de du
(cuatro), muestra que el tamaño de bloque predeterminado de du
es de 1.024 bytes., Ahora sabemos varias cosas importantes.
primero, sabemos que la cantidad más pequeña de bienes raíces del sistema de archivos que se puede dedicar a almacenar un archivo es de 4,096 bytes. Esto significa que incluso nuestro pequeño archivo de dos bytes ocupa 4 KB de espacio en el disco duro.
la segunda cosa a tener en cuenta son las aplicaciones dedicadas a la generación de informes sobre el disco duro y las estadísticas del sistema de archivos, como du
, ls
, y tune2fs
, pueden tener diferentes nociones de lo que significa «bloque»., La aplicación tune2fs
informa de los tamaños de bloque verdaderos del sistema de archivos, mientras que ls
y du
se pueden configurar o forzar a usar otros tamaños de bloque. Esos tamaños de bloque no están destinados a relacionarse con el tamaño de bloque del sistema de archivos; son solo «trozos» que los comandos utilizan en su salida.
finalmente, aparte de usar diferentes tamaños de bloque, las respuestas de du
y tune2fs
transmiten el mismo significado., El resultado tune2fs
fue un bloque de 4.096 bytes, y el resultado du
fue cuatro bloques de 1.024 bytes.
usando du
sin parámetros u opciones de línea de comandos, du
enumera el espacio total en disco que está utilizando el directorio actual y todos los subdirectorios.
echemos un vistazo a un ejemplo:
du
El tamaño se informa en el tamaño de bloque predeterminado de 1,024 bytes por bloque. Se recorre todo el árbol de subdirectorios.,
usando du en un directorio diferente
Si desea du
para reportar en un directorio diferente al actual, puede pasar la ruta al directorio en la línea de comandos:
du ~/.cach/evolution/
usando du en un archivo específico
Si desea du
para informar sobre un archivo específico, pase la ruta a ese archivo en la línea de comandos., También puede pasar un patrón de shell a un grupo selecto de archivos, como *.txt
:
du ~/.bash_aliases
Reporting on Files in Directories
para tener du
report on the files in the current directory and subdirectories, use el -a
(todos los archivos) opción:
du -a
para cada directorio, se informa el tamaño de cada archivo, así como un total para cada directorio.,
limitando la profundidad del árbol de directorios
puede indicar du
para listar el árbol de directorios a una cierta profundidad. Para ello, utilice la opción -d
(profundidad máxima) y proporcione un valor de profundidad como parámetro. Tenga en cuenta que todos los subdirectorios se escanean y se utilizan para calcular los totales notificados, pero no todos aparecen en la lista. Para establecer una profundidad máxima de directorio de un nivel, use este comando:
du -d 1
la salida muestra el tamaño total de ese subdirectorio en el directorio actual y también proporciona un total para cada uno.,
para listar directorios un nivel más profundo, use este comando:
du -d 2
establecer el tamaño del Bloque
puede usar la opción block
para establecer un tamaño de bloque para du
para la operación actual.,d en el tamaño de bloque más apropiado de acuerdo con el espacio en disco utilizado por los directorios y archivos, use la opción -h
(legible por humanos):
du -h
para ver el tamaño aparente del archivo en lugar de la cantidad de espacio en el disco duro utilizado para almacenar el archivo, use la opción --apparent-size
option:
du --apparent-size
puede combinar esto con la opción -a
(all) para ver el tamaño aparente de cada archivo:
du --apparent-size -a
cada archivo se muestra, junto con su tamaño aparente.,
mostrando solo los totales
Si desea du
para reportar solo el total del directorio, use la opción -s
(resumir)., También puede combinar esto con otras opciones, como la opción -h
(legible por humanos):
du -h -s
Aquí, lo usaremos con la opción --apparent-size
:
du --apparent-size -s
mostrando los tiempos de modificación
para ver la hora y fecha de creación o Última modificación, use la opción --time
:
du --time -d 2
¿resultados extraños?,
si ve resultados extraños de du
, especialmente cuando hace referencia cruzada a los tamaños de salida de otros comandos, generalmente se debe a los diferentes tamaños de bloque a los que se pueden establecer diferentes comandos o aquellos a los que se predeterminan. También podría deberse a las diferencias entre los tamaños de archivo reales y el espacio en disco necesario para almacenarlos.
si necesita hacer coincidir la salida de otros comandos, experimente con la opción --block
En du
.,
Dave McKay usó computadoras por primera vez cuando la cinta de papel perforado estaba de moda, y ha estado programando desde entonces. Después de más de 30 años en la industria de ti, ahora es un periodista tecnológico a tiempo completo. Durante su carrera, ha trabajado como programador freelance, gerente de un equipo internacional de desarrollo de software, gerente de proyectos de servicios de ti y, más recientemente, como oficial de protección de datos. Dave es un evangelista de Linux y defensor del código abierto.Leer la Biografía Completa «