¿Por qué podría el tamaño del archivo "punto" "." exceder 4096?

10

Hoy encontré un directorio "vacío" con un tamaño de 4 MB.

No tenía contenido visible, así que lo intenté ls -lah. Esto me mostró algunos archivos ocultos (no muy grandes). Al buscar el motivo por el cual el directorio era tan grande, descubrí que el archivo de puntos ( .) tenía un tamaño de 3.9MB.

¿Qué se almacena en ese archivo? ¿No es solo un tipo de enlace al mismo directorio?

Aquí está la salida del shell (anónimo):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 ([email protected]) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
Martin Hennings
fuente

Respuestas:

14

El archivo de puntos, como todos los directorios, contiene una lista de nombres para los archivos en este directorio y sus números de inodo. Entonces, si alguna vez tuvo muchos archivos en ese directorio (no es improbable para un directorio "tmp") eso habría hecho que la entrada del directorio creciera a este tamaño.

Una vez que los archivos desaparecen, el sistema de archivos no vuelve a reducir automáticamente el archivo de directorio.

Puedes experimentar con esto tú mismo haciendo un nuevo directorio vacío, hazlo ls -lapara ver el tamaño inicial (4096 en mi máquina) y luegotouch agrega muchos archivos, lo que hará que el tamaño del directorio crezca.

(Sí, sé que estoy pasando por alto / siendo inexacto sobre muchos detalles aquí. Pero el OP no pidió una explicación completa de cómo funcionan los sistemas de archivos EXT *).

Bristol
fuente
2
Gracias, esto parece explicar el fenómeno. Dos preguntas por curiosidad: ¿cuándo se reduciría nuevamente el archivo de directorio? ¿Y hay alguna manera de mostrar el contenido de ese archivo?
Martin Hennings
3
(1) Consulte también unix.stackexchange.com/questions/38639/… - respuesta breve, elimine el directorio y vuelva a crearlo .
Bristol
2
(2) Lamentablemente, ya no. Esto solía ser posible en versiones antiguas de UNIX.
Bristol
También puede ejecutar e2fsck -Den el sistema de archivos, pero eso requiere que se desmonte.
psusi
@Bristol debugfspuede ser perspicaz
Volker Siegel