¿Qué significa el tamaño de un directorio en la salida del comando 'ls -l'?


Respuestas:


45

Este es el tamaño de espacio en el disco que se utiliza para almacenar la metainformación para el directorio (es decir, la tabla de archivos que pertenecen a este directorio). Si es, por ejemplo, 1024, esto significa que se utilizan 1024 bytes en el disco (siempre asigna bloques completos) para este propósito.


3
y cuando un directorio contiene miles de archivos, el tamaño del directorio en sí mismo puede ser fácilmente> 10 KB
glenn jackman

1
@txwikinger Creo que los directorios contienen listas de inodos, no nombres de archivos reales.
Ярослав Рахматуллин

66
@ ЯрославРахматуллин Una entrada de directorio consta de un número de inodo y un nombre de archivo.
200_success

2
Entonces, ¿el "tamaño" de un directorio solo está relacionado con el número de archivos dentro, no con el tamaño de los archivos?
Lee

1
@Lee: Sí, eso es correcto.
gato

14

El "tamaño de un directorio" impreso con ls -les (como con cualquier tipo de archivo) el valor informado por la stat()llamada statbuf.st_size.

Lo que esto st_sizesignifica para los directorios depende completamente del tipo de sistema de archivos. A menos que conozca el tipo de sistema de archivos y comprenda sus conceptos, no puede deducir nada del valor en st_size.

  • En el histórico sistema de archivos UNIX que generalmente se denomina actualmente v7-fs, los directorios se repitieron con entradas de 16 bytes que contenían un número de inodo de 16 bits y 14 bytes de nombre de archivo. El "tamaño" de un directorio fue significativo con respecto a la read(2)operación y siempre creció o permaneció como está. Las entradas .y ..se crean vinculándolas manualmente con el nivel actual y el directorio superior. El recuento de enlaces para un directorio de soltera vacío sano es 2.

  • En el sistema de archivos BSD-4.2 que se llama desde 1989 (SVr4) ufs, los directorios son una serie de registros de longitud variable que utilizan un formato que no se garantiza que sea estable, por lo que los comandos de espacio de usuario no pueden leer este formato. El "tamaño" informado es el tamaño en bytes como en v7-fs, el tamaño generalmente crece o permanece como está, pero las versiones más nuevas del sistema de archivos pueden reducir el tamaño en algunas condiciones, pero no siempre cuando puede esperar esto. El recuento de enlaces informado para un directorio vacío es 2 como con v7-fs.

  • En WOFSel sistema de archivos que diseñé e implementé entre el verano de 1988 y mayo de 1991, los directorios siempre informan el "tamaño" 0 y nunca tienen un tipo de contenido que pueda leerse mediante la read(2)llamada. Esto se debe a que WOFSes el primer sistema de archivos Copy-on-Write y porque en los WOFSarchivos se informa el directorio en el que se encuentran en lugar de aparecer en el directorio. Si lee un WOFSdirectorio usando readdir(), solo obtiene datos para las entradas previstas, pero nunca para .y ... El recuento de enlaces de un directorio vacío WOFSes 1 y todo el comportamiento es completamente compatible con POSIX.

  • En ZFS, eso se implementó después de leer los WOFSperiódicos. ZFSes un sistema de archivos de copia en escritura y sus autores no niegan que copiaron conceptos de WOFS. Directorios en ZFS reportar el number of directory entriesen st_size, por lo que la presunta "tamaño" no tiene ningún significado real con respecto al espacio de disco ocupado a partir de los datos del directorio. No hay entradas .y ..en un directorio ZFS, pero si llama readdir(), estas entradas son falsificadas y devueltas para las dos primeras operaciones. ZFS es el único FS de la lista que no admite directorios de enlace rígido, pero el recuento de enlaces informado para directorios siempre es 2. Estas dos irregularidades en ZFS se implementan para reducir la confusión en programas históricos que no son POSIX.

  • Similar a ZFS, WAFL copia algunas pero no todas las ideas WOFS. Netapp WAFLfue escrito 3 años después de la WOFSpublicación del documento, WAFL es copia en escritura, pero WAFL parece informar valores de "tamaño" que pueden ser el "tamaño real del directorio" bajo el supuesto de que el directorio tiene contenido.


13

Un directorio reserva 4096 bytes (como mínimo) para metadatos sobre sí mismo y sus contenidos.

Además, 4096 bytes es la unidad de asignación predeterminada (bloque) para el sistema de archivos ext2 / ext3 / ext4 y, por lo tanto, un directorio no puede ser más pequeño.

En diferentes sistemas de archivos, puede encontrar directorios con diferentes tamaños predeterminados, esto se debe al tamaño de bloque predeterminado del sistema de archivos.

Los tamaños de directorio también pueden crecer dinámicamente a medida que se llenan, pero una vez que se llena el espacio reservado para metadatos no se puede reasignar sin eliminar el directorio.


1
¿A qué metadatos te refieres?
Stéphane Chazelas

1
los detalles dependen del sistema de archivos, pero generalmente incluyen metadatos como nombre de archivo, número de inodo, tipo de archivo (archivo, dir, fifo, zócalo, nodo de dispositivo, enlace simbólico, etc.), propietario, grupo, permisos, atributos, ACL, objetivos de enlace simbólico.
cas

66
@CraigSanders, el directorio contiene el nombre del objeto y el número de i-nodo correspondiente solamente . El inodo contiene el tipo de objeto, propietario / grupo, permisos, referencia a donde se guardan las ACL y los atributos extendidos, ... Cualquier otra cosa causará una rotura severa de la semántica del sistema de archivos POSIX.
vonbrand

Mi UFS reserva solo 512 bytes para sus propios metadatos por directorio.
FUZxxl

4

Un directorio es solo un directorio, como un directorio telefónico. Es solo un archivo con una lista de números y un nombre al lado de ellos. Cada número hace referencia a un archivo en el sistema de archivos (un número de inodo) y el nombre es el nombre del archivo.

Necesita espacio en disco para guardar esos datos, la forma en que se asignan, crecen y reducen depende del sistema de archivos.


podría incluir los detalles reales de qué metadatos se mantienen y las consideraciones de asignación de bloques con respecto al crecimiento del tamaño. haría una respuesta más exacta completa con la bonita alegoría ya dada. :)
n611x007

3
@naxa, eso depende del sistema de archivos, e incluso dentro de un sistema de archivos (como ext4), eso depende de las opciones que habilites, por lo que prefiero dejarlo como "depende del sistema de archivos", en lugar de intentar ser exhaustivo, lo que no sería muy relevante para esta pregunta.
Stéphane Chazelas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.