
He notado que ls -l
informa el tamaño físico de un directorio mientras informa el tamaño lógico de un archivo. Por ejemplo, este es un resultado de muestra de ls -l
:
drwxr-xr-x 2 chris chris 36864 2017-04-23 18:14 dir1
-rw-r--r-- 1 chris chris 6 2017-04-23 18:10 file1.txt
dir1
El tamaño es 36864 bytes, que es un múltiplo de 4096 bytes (por lo que probablemente sea el tamaño físico).
Mientras que file1.txt
el tamaño es de 6 bytes (que es el tamaño lógico).
Respuesta1
En realidad, ls
informa todo lo que le dice el kernel: no hace nada diferente con respecto al tamaño dependiendo de si el archivo es un directorio). Y Linux informa el tamaño lógico. Pero el tamaño lógico de un directorio no es una propiedad muy interesante: depende del formato del sistema de archivos.
El tipo de sistema de archivos predeterminado en la mayoría de las distribuciones de Linux es ext4, y probablemente sea eso lo que estás usando. Ext4 asigna bloques completos para directorios y administra el espacio dentro de esos bloques como mejor le parezca. Ni siquiera libera bloques si un directorio se reduce ( dir1
seguiría teniendo 9 bloques incluso si eliminara todos los archivos que contiene). Cuando se le pregunta el tamaño de un archivo que resulta ser un directorio, ext4 devuelve el tamaño asignado para el directorio, y este es siempre un número entero de bloques.
Los diferentes tipos de sistemas de archivos se comportan de manera diferente. Por ejemplo, con Btrfs, experimentalmente, el tamaño de un directorio puede ser cualquier múltiplo de 2.
Respuesta2
Esa es una característica de los sistemas de archivos ext2
// , informan el tamaño de los directorios en bloques completos. Si intentas lo mismo con XFS, verás un tamaño más detallado.ext3
ext4
Realmente no importa. Para los archivos, el tamaño "lógico" es relevante, ya que una aplicación puede depender de conocer el tamaño de un archivo hasta un byte: la basura final puede ser relevante, o alguna estructura de datos puede estar colocada en una posición relativa al final del archivo. archivo (por ejemplo, archivos .zip).
Para los directorios, el tamaño "lógico" no importa, ya que la estructura interna es bien conocida y, en Linux, un programa de espacio de usuario ni siquiera puede leer el contenido de un directorio directamente. En cambio, una lectura tiene que pasar por llamadas al sistema realizadas precisamente para ese propósito. Y esas llamadas al sistema se ocuparán de la estructura interna del directorio.