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.

→ Índice de contenidos
  • ¿Por qué el uso real del disco y el tamaño real son diferentes?
  • Cómo comprobar el tamaño de un archivo
  • Hay bloques y luego hay bloques.
  • Usando du para controlar el tamaño del archivo
  • Usando du a un directorio diferente
  • Usando du en un archivo específico
  • Informes sobre archivos en directorios
  • Limitar la profundidad del árbol de directorios
  • Configurar el tamaño del bloque
  • Ver solo totales
  • Visualización de tiempos de edición
  • ¿Resultados extraños?
  • ¿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

    eco 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, lspara 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

    hexdump -C geek.txt en una ventana treminal

    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, echocomienza 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

    du geek.txt en una ventana de terminal

    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 grepy 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, sda1y tendremos que usarlo sudo:

    sudo tune2fs -l /dev/sda1 | grep Block

    sudo tune2fs -l /dev/sda1 |  grep Bloquear en una ventana de terminal

    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, lsY 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

    du en una ventana de terminal

    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/

    du ~/.cach/evolution/ en una ventana de terminal

    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

    du ~/.bash_aliases en una ventana de terminal

    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

    du -a en una ventana de terminal

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

    Salida de du -a en una ventana de terminal

    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

    du -d 1 en una ventana de terminal

    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

    du -d 2 en una ventana de terminal

    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

    du --block=1 en una ventana de terminal

    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

    du -m en una ventana de terminal

    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

    du -h en una ventana de terminal

    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

    du --apparent-size en una ventana de terminal

    Puedes combinarlo con el -a Opción (todos) para ver el tamaño aparente de cada archivo:

    du --apparent-size -a

    du --apparent-size -a en una ventana de terminal

    Se enumera cada archivo, junto con su tamaño aparente.

    Salida de du --apparent-size -a en una ventana de terminal

    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

    du -h -s en una ventana de terminal

    Aquí lo usaremos con el --apparent-size opción:

    du --apparent-size -s

    du --apparent-size -s en una ventana de terminal

    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

    du --time -d 2 en una ventana de terminal

    ¿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.

    Subir Change privacy settings