Tabla de contenidos
Cuando usa el du
comando de Linux , 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 iguales. 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 completo porque el sistema de archivos no tiene una unidad más pequeña de espacio 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 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.
Un 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 las dave dave
entradas, que son dos bytes. ¿Por qué son dos bytes cuando solo enviamos un carácter al archivo? Echemos un vistazo a lo que sucede dentro del archivo.
Usaremos el hexdump
comando, que nos dará un recuento de bytes exacto y nos permitirá «ver» los caracteres que no se imprimen como valores hexadecimales . También usaremos la -C
opción (canónica) para forzar que la salida muestre 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 desplazamiento 00000000 en el archivo, hay un byte que contiene un 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 avance de línea, que no se puede mostrar como un carácter alfanumérico, por lo que se muestra como un punto (.). El carácter de avance de línea se agrega mediante echo
. De forma predeterminada, echo
comienza una nueva línea después de mostrar el texto que necesita escribir en la ventana de terminal.
Eso ls
concuerda con la salida de y concuerda 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 los tamaños de archivo 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 comando. Si no fuerza du
a usar un tamaño de bloque en particular, sigue un conjunto de reglas para decidir cuál usar.
Primero, verifica las siguientes variables de entorno:
- DU_BLOCK_SIZE
- TAMAÑO DE BLOQUE
- TAMAÑO DE BLOQUE
Si alguno de estos existe, se establece el tamaño del bloque y se du
detiene la comprobación. Si no se establece ninguno, el du
tamaño de bloque predeterminado es 1.024 bytes. A menos que, es decir, POSIXLY_CORRECT
se establezca una variable de entorno llamada . Si ese es el caso, el du
tamaño de bloque predeterminado es de 512 bytes.
Entonces, ¿cómo averiguamos cuál está en uso? 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 descubrir el tamaño de bloque que usa el sistema de archivos, usaremos el tune2fs
programa. Luego usaremos la opción -l
( listar superbloque ), canalizaremos la salida grep
y luego imprimiremos 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 necesitaremos usar sudo
:
sudo tune2fs -l / dev / sda1 | bloque grep
El tamaño del bloque del sistema de archivos es de 4096 bytes. Si dividimos eso por el resultado que obtuvimos de du
(cuatro), muestra que el du
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 en el sistema de archivos que se puede dedicar a almacenar un archivo es de 4096 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 es aplicaciones dedicadas a informar sobre estadísticas de la unidad y el sistema de archivos de disco duro, tales como du
, ls
y tune2fs
, puede tener diferentes nociones de lo que significa “bloque”. La tune2fs
aplicación informa los tamaños de bloque del sistema de archivos reales, mientras que 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; son solo «fragmentos» que esos comandos usan en su salida.
Finalmente, además de usar diferentes tamaños de bloque, las respuestas de du
y tune2fs
transmiten el mismo significado. El tune2fs
resultado fue un bloque de 4.096 bytes y el du
resultado fue cuatro bloques de 1.024 bytes.
Utilizando du
Sin opciones ni parámetros de línea de comando, du
enumera el espacio total en disco que utiliza 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 1024 bytes por bloque. Se recorre todo el árbol de subdirectorios.
Usar du
en un directorio diferente
Si desea du
informar sobre un directorio diferente al actual, puede pasar la ruta al directorio en la línea de comando:
du ~ / .cach / evolution /
Usar du
en un archivo específico
Si desea du
informar sobre un archivo específico, pase la ruta a ese archivo en la línea de comando. También puede pasar un patrón de shell a seleccionar un grupo de archivos, como *.txt
:
du ~ / .bash_aliases
Informes sobre archivos en directorios
Para tener un du
informe sobre los archivos en el directorio y subdirectorios actuales, use la -a
opción (todos los archivos):
du -a
Para cada directorio, se informa el tamaño de cada archivo, así como el total de cada directorio.
Limitar la profundidad del árbol de directorios
Puede indicarle du
que enumere el árbol de directorios a cierta profundidad. Para hacerlo, use la -d
opción (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 informados, pero no se enumeran todos. Para establecer una profundidad máxima de directorio de un nivel, use este comando:
du -d 1
La salida enumera el tamaño total de ese subdirectorio en el directorio actual y también proporciona un total para cada uno.
Para enumerar directorios un nivel más profundo, use este comando:
du -d 2
Configuración del tamaño del bloque
Puede usar la block
opción para establecer un tamaño de bloque 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 los directorios y archivos:
du --block = 1
Si desea usar un tamaño de bloque de un megabyte, puede usar la -m
opción (megabyte), 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 de acuerdo con el espacio en disco utilizado por los directorios y archivos, use la -h
opción (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 --apparent-size
opción:
du - tamaño aparente
Puede combinar esto con la -a
opción (todos) para ver el tamaño aparente de cada archivo:
du - tamaño-aparente -a
Cada archivo se muestra junto con su tamaño aparente.
Visualización solo de totales
Si desea du
informar solo el total del directorio, use la -s
opción (resumir). También puede combinar esto con otras opciones, como la -h
opción (legible por humanos):
du -h -s
Aquí, lo usaremos con la --apparent-size
opción:
du --tamaño-aparente -s
Visualización de tiempos de modificación
Para ver la fecha y hora de creación o última modificación, use la --time
opción:
du --time -d 2
¿Resultados extraños?
Si ve resultados extraños du
, especialmente cuando hace una referencia cruzada de tamaños a la salida de otros comandos, generalmente se debe a los diferentes tamaños de bloque a los que se pueden configurar diferentes comandos o aquellos a los que están predeterminados. 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 --block
opción en du
.