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

Contenidos

Una ventana de terminal de Linux en una computadora portátil estilo Ubuntu.

Cuando utiliza 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, aún se le asigna un bloque completo debido a que el sistema de archivos no dispone de una unidad más pequeña de bienes raíces para utilizar.

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. A modo de ejemplo, si un archivo tiene más de dos bloques pero menos de tres, aún se necesitan tres bloques de espacio para almacenarlo.

Se usan dos medidas en vinculació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 guardar 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 al 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 número exacto de bytes y nos permitirá «ver» caracteres no imprimibles como valores hexadecimales. Además usaremos el -C (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 factible.

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 (.) En su lugar. El carácter de avance de línea se agrega a través de echo . Por defecto, echocomienza una nueva línea después de que muestra el texto que necesita escribir en la ventana de terminal.

Eso concuerda con la salida de ls y está de acuerdo con la longitud del archivo de dos bytes.

RELACIONADO: Cómo utilizar el comando ls para enumerar archivos y directorios en Linux

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 posteriormente 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 utilizar en la línea de comando. Si no fuerza du para utilizar un tamaño de bloque en particular, sigue un conjunto de reglas para elegir cuál utilizar.

Primero, verifica lo siguiente 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 du deja de chequear. Si no se establece ninguno, du por defecto tiene un tamaño de bloque de 1024 bytes. A menos que, dicho de otra forma, una variable de entorno llamada POSIXLY_CORRECT Está establecido. 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 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 utiliza el sistema de archivos.

Para descubrir el tamaño de bloque que utiliza el sistema de archivos, usaremos el tune2fs programa. Después usaremos el -l (lista de supermanzanas), canalice la salida a través de grep, y posteriormente imprimir 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 necesitaremos utilizar 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 en el sistema de archivos que se puede dedicar a almacenar un archivo es de 4096 bytes. Esto significa que inclusive nuestro pequeño archivo de dos bytes ocupa 4 KB de espacio en el disco duro.

La segunda cosa a prestar atención son las aplicaciones dedicadas a informar sobre 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 los tamaños de bloque del sistema de archivos reales, mientras que ls y du se puede configurar o forzar a usar 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.

Por último, al mismo tiempo 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 1.024 bytes.

Usando du

Sin opciones ni parámetros de línea de comando, du enumera el espacio total en disco que están usando 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.

Usando du en un directorio distinto

Si pretendes du para informar sobre un directorio distinto al actual, puede pasar la ruta al directorio en la línea de comando:

du ~/.cach/evolution/

Usando du en un archivo específico

Si pretendes du para informar sobre un archivo específico, pase la ruta a ese archivo en la línea de comando. Además puede pasar un patrón de shell a elegir un grupo de archivos, como *.txt:

du ~/.bash_aliases

Informes sobre archivos en directorios

Tener du reporte sobre los archivos en el directorio y subdirectorios actuales, utilice el -a (todos los archivos) opción:

du -a

Para cada directorio, se informa el tamaño de cada archivo, así como el total de cada directorio.

Limitación de la profundidad del árbol de directorios

Puedes decir du para enumerar el árbol de directorios a cierta profundidad. Para hacerlo, 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 se usan para calcular los totales informados, pero no se enumeran todos. Para determinar una profundidad de directorio máxima de un nivel, use este comando:

du -d 1

La salida enumera el tamaño total de ese subdirectorio en el directorio actual y además 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

Puedes utilizar el block opción para determinar un tamaño de bloque para du para la operación actual. Para utilizar 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 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 de acuerdo con el espacio en disco utilizado por los 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 el disco duro utilizado para guardar 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.

Visualización solo de totales

Si pretendes du para informar solo el total del directorio, utilice el -s (resumir) opción. Además 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 fecha y hora de creación o última modificación, utilice el --time opción:

du --time -d 2

¿Resultados extraños?

Si ve resultados extraños de du , especialmente cuando hace una referencia cruzada de tamaños a la salida de otros comandos, de forma general 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. Además 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 el --block opción en du.

setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.