Fatmawati Achmad Zaenuri / Shutterstock
Al usar linux du
comando, 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 de disco real 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, siempre se le asigna un bloque completo porque el sistema de archivos no tiene una unidad de espacio más pequeña para usar.
A menos que el tamaño de un archivo sea un múltiplo exacto de bloques, el espacio que usa en el disco duro siempre debe redondearse al siguiente bloque completo. Por ejemplo, si un archivo tiene más de dos bloques pero menos de tres, todavía se necesitan tres bloques de espacio para almacenarlo.
Se utilizan dos medidas en relación con el tamaño del archivo. El primero es el tamaño real del archivo, que es la cantidad de bytes de contenido que componen el archivo. El segundo es el tamaño real del archivo en el disco duro. Este es el número de bloques del sistema de archivos necesarios para almacenar este archivo.
Un ejemplo
Veamos un ejemplo sencillo. Redirigiremos un solo carácter en un archivo para crear un archivo pequeño:
echo "1" > geek.txt
Ahora vamos a utilizar la lista en formato largo, ls
, para ver la longitud del archivo:
ls -l geek.txt
La longitud es el valor numérico que sigue al dave dave
entradas, que tiene dos bytes de longitud. ¿Por qué son dos bytes cuando solo enviamos un carácter al archivo? Veamos qué sucede dentro del archivo.
Usaremos el hexdump
comando, que nos dará un número exacto de bytes y nos permitirá «ver» caracteres no imprimibles como valores hexadecimales. También usaremos el -C
(canónica) para forzar que la salida muestre valores hexadecimales en el cuerpo de la salida, junto con sus equivalentes en caracteres alfanuméricos:
hexdump -C geek.txt
El resultado nos muestra que a partir del desplazamiento 00000000 en el archivo, hay un byte que contiene un valor hexadecimal de 31 y otro que contiene un valor hexadecimal de 0A. El lado derecho de la salida describe estos valores como caracteres alfanuméricos, cuando es posible.
El valor hexadecimal de 31 se usa para representar el número uno. El valor hexadecimal de 0A se utiliza para representar el carácter de avance 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 nueva línea se adjunta con echo
. Por defecto, echo
comienza una nueva línea después de mostrar el texto que necesita escribir en la ventana de terminal.
Esto corresponde a la salida de ls
y coincide con la longitud del archivo de dos bytes.
Ahora usaremos el du
comando 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 del archivo en bloques, el tamaño que utiliza depende de varios factores. Puede especificar el tamaño de bloque que debe usar en la línea de comando. Si no fuerza du
para usar un tamaño de bloque en particular, sigue un conjunto de reglas para decidir cuál usar.
Primero, verifica lo siguiente Variables de entorno:
- DU_BLOCK_SIZE
- TAMAÑO DE BLOQUE
- TAMAÑO DE BLOQUE
Si existe alguno de ellos, se define el tamaño del bloque y du
dejar de comprobar. Si no se define ninguno, du
por defecto, un tamaño de bloque de 1024 bytes. A menos que, es decir, una variable de entorno llamada POSIXLY_CORRECT
Está establecido. Si es el caso, du
por defecto tiene un tamaño de bloque de 512 bytes.
Entonces, ¿cómo sabe cuál se está utilizando? Puede verificar cada variable de entorno para resolverlo, pero hay una forma más rápida. Comparemos los resultados con el tamaño de bloque que usa el sistema de archivos.
Para averiguar el tamaño de bloque utilizado por el sistema de archivos, usaremos el tune2fs
programa. Luego usaremos el -l
(lista de supermanzanas), dirija la salida a través grep
, después imprime las líneas que contienen la palabra «Bloque».
En este ejemplo, veremos 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 tamaño del bloque del sistema de archivos es 4096 bytes. Si dividimos eso por el resultado que obtuvimos de du
(cuatro) muestra el du
el tamaño de bloque predeterminado es 1.024 bytes. Ahora sabemos varias cosas importantes.
Primero, sabemos que la cantidad más pequeña de espacio del sistema de archivos que se puede dedicar a almacenar un archivo es 4096 bytes. Esto significa que incluso nuestro pequeño archivo de dos bytes ocupa 4 KB de espacio en disco.
La segunda cosa a tener en cuenta son las aplicaciones dedicadas para informar estadísticas del sistema de archivos y del disco duro, como du
, ls
, y tune2fs
, puede tener diferentes nociones de lo que significa «bloque». los tune2fs
la aplicación informa el tamaño real de los bloques del sistema de archivos, mientras ls
y du
se puede configurar o forzar a utilizar otros tamaños de bloque. Estos tamaños de bloque no están destinados a relacionarse con el tamaño de bloque del sistema de archivos; estos son solo «fragmentos» que estos comandos usan en su salida.
Finalmente, además de utilizar diferentes tamaños de bloque, las respuestas de du
y tune2fs
transmitir el mismo significado. los tune2fs
el resultado fue un bloque de 4096 bytes, y el du
el resultado fue cuatro bloques de 1024 bytes.
En ayuda de du
Sin parámetros ni opciones de línea de comando, du
enumera el espacio total en disco que están usando el directorio actual y todos los subdirectorios.
Veamos un ejemplo:
du
El tamaño se especifica en el tamaño de bloque predeterminado de 1024 bytes por bloque. Se busca en todo el árbol de subdirectorios.
En ayuda de du
en un directorio diferente
Si quieres du
para indicar un directorio diferente al actual, puede pasar la ruta del directorio en la línea de comando:
du ~/.cach/evolution/
En ayuda de du
en un archivo específico
Si quieres du
para informar sobre un archivo específico, pase la ruta a ese archivo en la línea de comando. También puede pasar una plantilla de shell a un grupo seleccionado de archivos, como *.txt
:
du ~/.bash_aliases
Informar sobre archivos en directorios
Para tener du
informe sobre los archivos del directorio y subdirectorios actuales, utilice el -a
opción (todos los archivos):
du -a
Para cada directorio, se muestra el tamaño de cada archivo, junto con el total de cada directorio.
Limitar la profundidad del árbol de directorios
Puedes decir du
para enumerar el árbol de directorios a cierta profundidad. Para hacer esto, use el -d
(profundidad máxima) y proporcione un valor de profundidad como parámetro. Tenga en cuenta que todos los subdirectorios se rastrean y utilizan para calcular los totales informados, pero no todos se enumeran. Para establecer una profundidad de directorio máxima de un nivel, use este comando:
du -d 1
La salida enumera el tamaño total de este subdirectorio en el directorio actual y también proporciona un total para cada uno.
Para enumerar los directorios en un nivel más profundo, use este comando:
du -d 2
Ajustar el tamaño del bloque
Puedes usar el block
opción para establecer un tamaño de bloque para du
para la operación actual. Para usar un tamaño de bloque de un byte, use el siguiente comando para obtener los tamaños exactos de directorios y archivos:
du --block=1
Si desea utilizar un tamaño de bloque de un megabyte, puede utilizar el -m
(megabyte) opción, que es lo mismo que --block=1M
:
du -m
Si desea que los tamaños se informen en el tamaño de bloque más apropiado en función del espacio en disco utilizado por directorios y archivos, use el -h
Opción (legible por humanos):
du -h
Para ver el tamaño aparente del archivo en lugar de la cantidad de espacio en disco utilizado para almacenar el archivo, utilice el --apparent-size
opción:
du --apparent-size
Puede combinar esto con el -a
(todo) opción para ver el tamaño aparente de cada archivo:
du --apparent-size -a
Se enumera cada archivo, junto con su tamaño aparente.
Mostrar solo totales
Si quieres du
para declarar solo el total del directorio, use el -s
opción (resumen). También puede combinar esto con otras opciones, como el -h
Opción (legible por humanos):
du -h -s
Aquí lo usaremos con el --apparent-size
opción:
du --apparent-size -s
Visualización de tiempos de modificación
Para ver la hora y fecha de creación o última modificación, use el --time
opción:
du --time -d 2
¿Resultados extraños?
Si ve resultados extraños de du
, especialmente cuando se hace una referencia cruzada de los tamaños y la salida de otros comandos, esto generalmente se debe a los diferentes tamaños de bloque en los que se pueden configurar diferentes comandos o en los que están predeterminados. También puede deberse a las diferencias entre el tamaño real de los archivos y el espacio en disco necesario para almacenarlos.
Si necesita hacer coincidir la salida de otros comandos, experimente con el --block
opción en du
.