La estructura interna de los directorios depende del sistema de archivos en uso. Si desea saber con precisión qué sucede, eche un vistazo a las implementaciones del sistema de archivos.
Básicamente, en la mayoría de los sistemas de archivos, un directorio es una matriz asociativa entre nombres de archivo (claves) y números de inodes (valores). Algo como esto¹:
1167010 .
1158721 ..
1167626 subdir
132651 barfile
132650 bazfile
Esta lista está codificada de una manera más o menos eficiente dentro de una cadena de bloques (generalmente) de 4KB. Tenga en cuenta que el contenido de los archivos normales se almacena de manera similar. En el caso de los directorios, no tiene sentido saber qué tamaño se usa realmente dentro de estos bloques. Es por eso que los tamaños de los directorios informados du
son múltiplos de 4KB.
Los inodos están allí para unir bloques, formando una sola entidad, es decir, un "archivo" en el sentido general. Se identifican mediante un número que es algún tipo de dirección y cada uno generalmente se almacena como un bloque único y especial.
La gestión de todo esto ocurre en modo kernel. El software solo solicita la creación de un directorio con una función llamada que int mkdir(const char *pathname, mode_t mode);
conduzca a una llamada al sistema, y todo lo demás se realiza detrás de escena.
Sobre estructura de enlaces:
Un enlace duro no es un archivo, es solo una nueva entrada de directorio (es decir, un nombre - asociación de número de inodo ) que se refiere a una entidad de inodo² preexistente². Esto significa que se puede acceder al mismo inodo desde diferentes nombres de ruta. En particular, dado que los metadatos (permisos, propiedad, marcas de tiempo ...) se almacenan dentro del inodo, estos son únicos e independientes del nombre de ruta elegido para acceder al archivo.
Un enlace simbólico es un archivo y es distinto de su objetivo. Esto significa que tiene su propio inodo. Solía manejarse como un archivo normal: la ruta de destino se almacenó en un bloque de datos. Pero ahora, por razones de eficiencia en sistemas de archivos ext recientes , las rutas de menos de 60 bytes de longitud se almacenan dentro del propio inodo (usando los campos que normalmente se usarían para almacenar los punteros en los bloques de datos).
-
1. esto se obtuvo usando ls -ai1 testdir
.
2. cuyo tipo debe ser diferente de 'directorio' hoy en día.