Cómo obtener el tamaño de un archivo o directorio en Linux

Puntos clave
- El tamaño real de un archivo, es decir, la cantidad de bytes que componen el archivo, y el tamaño real en el disco duro, es decir, la cantidad de bloques del sistema de archivos necesarios para almacenarlo, son diferentes debido a la asignación de espacio en disco en bloques.
- El comando du se puede utilizar para comprobar el tamaño de los archivos, directorios y el espacio total en disco utilizado por el directorio y los subdirectorios actuales.
- Ejecute "du -h" para ver una lista de archivos y carpetas en un formato legible por humanos.
Al usar Linux du
comando, obtiene tanto el uso real del disco como el tamaño real de un archivo o directorio. Te explicaremos por qué estos valores no son iguales.
¿Por qué el uso real del disco y el tamaño real son diferentes?
El tamaño de un archivo y el espacio que ocupa en el 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 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 utilizado 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, aún necesitará 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 su disco duro. Esta es la cantidad de bloques del sistema de archivos necesarios para almacenar ese archivo.
Cómo comprobar el tamaño de un archivo
Veamos un ejemplo sencillo. Redirigiremos un solo carácter en un archivo para crear un archivo pequeño:
echo "1" > geek.txt
geek.txt en una ventana de terminal" style="display:block;height:auto;max-width:100%;" data-img-url=" />
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 dave dave
entradas, es decir, 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" caracteres no imprimibles como valores hexadecimales. También usaremos el archivo -C
Opción (canónica) para forzar que la salida muestre valores hexadecimales en el cuerpo de la salida, así como sus equivalentes en caracteres alfanuméricos:
hexdump -C geek.txt
El resultado nos muestra que, comenzando en el desplazamiento 00000000 del archivo, hay un byte que contiene un valor hexadecimal de 31 y otro que contiene un valor hexadecimal de 0A. El lado derecho del resultado 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 salto 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 salto de línea se agrega mediante echo
. Por defecto, echo
comienza una nueva línea después de mostrar el texto que necesita escribir en la ventana de terminal.
Esto coincide con la salida de ls
y está de acuerdo con la longitud del archivo de dos bytes.
Ahora usaremos el archivo du
comando para ver el tamaño del archivo:
du geek.txt
Dice que la talla es cuatro, pero ¿cuatro de qué?
Hay bloques y luego hay bloques.
Cuando du
informa los tamaños de archivos en bloques, el tamaño utilizado depende de varios factores. Puede especificar qué tamaño de bloque usar en la línea de comando. Si no lo fuerzas du
Para usar un tamaño de bloque particular, se siguen un conjunto de reglas para decidir cuál usar.
Primero, verifique las siguientes variables de entorno:
- DU_BLOCK_SIZE
- TAMAÑO DE BLOQUE
- TAMAÑO DE BLOQUE
Si existe uno de estos, se establece el tamaño del bloque y du
deja de comprobar. Si no se establece ninguno, du
De forma predeterminada, el tamaño del bloque es 1024 bytes. A menos que haya una variable de entorno llamada POSIXLY_CORRECT
Está establecido. Si es el caso, du
De forma predeterminada, el tamaño del bloque es 512 bytes.
Entonces, ¿cómo sabemos cuál está en uso? Puede verificar cada variable de entorno para solucionarlo, pero existe una manera más rápida. En cambio, comparamos los resultados con el tamaño de bloque utilizado por el sistema de archivos.
Para conocer el tamaño de bloque utilizado por el sistema de archivos, usaremos el archivo tune2fs
plan. Luego usaremos el archivo -l
(lista de superbloques), canalice la salida grep
y luego imprima las líneas que contienen la palabra "Bloquear".
En este ejemplo, veremos el sistema de archivos en la primera partición del primer disco duro, sda1
y tendremos que usarlo sudo
:
sudo tune2fs -l /dev/sda1 | grep Block
El tamaño del bloque del sistema de archivos es de 4096 bytes. Si lo dividimos por el resultado que obtuvimos de du
(cuatro), muestra la du
el tamaño de bloque predeterminado es 1024 bytes. Ahora sabemos varias cosas importantes.
Primero, sabemos que la cantidad mínima 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 el disco duro.
Lo segundo que hay que tener en cuenta son las aplicaciones dedicadas a informar estadísticas del disco duro y del sistema de archivos, como du
, ls
Y tune2fs
, pueden tener nociones diferentes de lo que significa "bloqueo". EL tune2fs
la aplicación informa el tamaño real de los bloques del sistema de archivos, mientras que ls
Y du
se puede configurar o forzar el uso de otros tamaños de bloque. Estos tamaños de bloque no están relacionados con el tamaño de bloque del sistema de archivos; son simplemente "fragmentos" que los comandos utilizan en su salida.
Finalmente, además de utilizar bloques de diferentes tamaños, las respuestas de du
Y tune2fs
transmitir el mismo significado. EL tune2fs
el resultado fue un bloque de 4.096 bytes y el archivo du
el resultado fueron cuatro bloques de 1.024 bytes.
Usando du para controlar el tamaño del archivo
Sin parámetros u opciones de línea de comando, du
enumera el espacio total en disco utilizado por el directorio actual y todos los subdirectorios.
Veamos 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.
Usando du a un directorio diferente
Si quieres du
para informar sobre un directorio distinto al actual, puede pasar la ruta del directorio en la línea de comando:
du ~/.cach/evolution/
Usando du en un archivo específico
Si quieres du
Para informar de 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
Informes sobre archivos en directorios
Tener du
informar archivos en el directorio y subdirectorios actuales, use el archivo -a
opción (todos los archivos):
du -a
El tamaño de cada archivo se informa para cada directorio, así como el total de cada directorio.
Limitar la profundidad del árbol de directorios
puedes decirlo du
para enumerar el árbol de directorios hasta una 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 escanean y utilizan para calcular los totales informados, pero no todos aparecen en la lista. Para establecer una profundidad máxima de directorio de un nivel, use este comando:
du -d 1
El resultado enumera el tamaño total de ese subdirectorio en el directorio actual y también proporciona un total para cada uno de ellos.
Para enumerar directorios un nivel más profundo, use este comando:
du -d 2
Configurar 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), que es lo mismo que --block=1M
:
du -m
Si desea que el tamaño se informe al tamaño de bloque más apropiado según el espacio en disco utilizado por los directorios y archivos, utilice 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 el disco duro utilizado para almacenar el archivo, utilice el archivo --apparent-size
opción:
du --apparent-size
Puedes combinarlo con el -a
Opción (todos) para ver el tamaño aparente de cada archivo:
du --apparent-size -a
Se enumera cada archivo, junto con su tamaño aparente.
Ver solo totales
Si quieres du
para informar sólo el total del directorio, utilice el -s
(resumir) opción. También puedes combinarlo con otras opciones, como -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 edición
Para ver la hora y fecha de creación o última modificación, utilice el archivo --time
opción:
du --time -d 2
¿Resultados extraños?
Si ve resultados extraños du
, especialmente cuando se hacen referencias cruzadas de los tamaños de salida de otros comandos, generalmente se debe a los diferentes tamaños de bloque en los que se pueden configurar diferentes comandos, o aquellos que tienen por defecto. También podría deberse a diferencias entre el tamaño real de los archivos y el espacio en disco necesario para almacenarlos.
Si necesita igualar la salida de otros comandos, experimente con el --block
opción dentro du
.