Guía de comienzo introdujo los conceptos de posesión de archivos y permisos de acceso, pero la verdadera comprensión del sistema de archivos de UNIX® (y esto también se aplica a los sistemas de archivos de Linux) requiere que volvamos a definir el concepto de “Qué es un archivo”.
Aquí, “todo”
realmente significa todo. Un disco rígido, una
partición en un disco rígido, un puerto paralelo, una conexión a un
sitio web, una placa Ethernet
, todos estos son archivos.
Incluso los directorios son archivos. Linux reconoce
muchos tipos de archivos además de los archivos regulares y los
directorios. Note que aquí por tipo de archivo no nos referimos al
tipo de contenido de un archivo: para
GNU/Linux y cualquier sistema UNIX®, un archivo, ya sea una
imagen GIF, un archivo binario o lo que sea, sólo es un flujo de
bytes. Diferenciar a los archivos de acuerdo a su contenido es algo
que se deja a las aplicaciones.
Cuando Usted hace un
ls -l, el caracter antes de los derechos de
acceso identifica el tipo de un archivo. Ya hemos visto dos tipos
de archivos: los archivos regulares (-
) y los
directorios (d
) También puede encontrarse con
estos otros tipos si se desplaza por el árbol de archivos y lista
el contenido de los directorios:
Archivos de modo
caracter. Estos archivos son o bien archivos
especiales del sistema (tal como
/dev/null
, que ya hemos visto), o bien
periféricos (puertos serie o paralelo), que comparten la
particularidad de que su contenido (si es que tienen alguno) no
está en un buffer (es decir, que no se
conservan en memoria). Dichos archivos se identifican con la
letra 'c'
.
Archivos de modo
bloque. Estos archivos son periféricos y, a
diferencia de los archivos de modo caracter, su contenido
está conservado en memoria. Los archivos
que entran en esta categoría son, por ejemplo, los discos
rígidos, las particiones de un disco rígido, las unidades de
disquete, las unidades de CD-ROM y así sucesivamente. Los
archivos /dev/hda
,
/dev/sda5
son un ejemplo de archivos de
modo bloque. Estos están identificados por la letra
b
.
Vínculos simbólicos. Estos archivos
son muy comunes, y se usan ampliamente en el procedimiento de
inicio del sistema de Mandrakelinux (consulte Capítulo 11, Los archivos de arranque: init SYSV). Como su nombre lo indica, su propósito es
vincular archivos de forma simbólica, lo que significa que son
archivos cuyo contenido es la ruta a un archivo diferente.
Pueden no apuntar a un archivo existente. Con mucha frecuencia
se los conoce como soft links (en inglés), y
están identificados por la letra l
.
Tuberías nombradas. En
caso que se lo pregunte, sí, estos son muy similares a las
tuberías usadas en los comandos del shell
, pero con la
particularidad que estas, en realidad, tienen nombre. Siga
leyendo para aprender más. Sin embargo, son muy raras, y es muy
poco probable que vea una durante su viaje por el árbol de
archivos. Dichos archivos están identificados con la letra
p
. Consulte Sección 4, “Tuberías “anónimas” y
tuberías nombradas”.
Sockets. Este es el tipo de
archivo para todas las conexiones de red. Pero sólo unos pocos
tienen nombre. Más aun, hay distintos tipos de sockets y sólo se
puede vincular uno, pero esto va más allá del alcance de este
libro. Dichos archivos se identifican con la letra
's'
.
Aquí tiene un ejemplo de cada archivo:
$ ls -l /dev/null /dev/sda /etc/rc.d/rc3.d/S20random /proc/554/maps \ /tmp/ssh-reina/ssh-510-agent crw-rw-rw- 1 root root 1, 3 May 5 1998 /dev/null brw-rw---- 1 root disk 8, 0 May 5 1998 /dev/sda lrwxrwxrwx 1 root root 16 Dec 9 19:12 /etc/rc.d/rc3.d/ S20random -> ../init.d/random* pr--r--r-- 1 reina reina 0 Dec 10 20:23 /proc/554/maps| srwx------ 1 reina reina 0 Dec 10 20:08 /tmp/ssh-reina/ ssh-510-agent= $
Los inodos son, junto con el paradigma “Todo es un archivo”, la parte fundamental de cualquier sistema de archivos UNIX®. La palabra inodo es una abreviación de “NODO de Información” (Information NODE).
Los inodos se almacenan en el disco en una tabla de inodos. Existen para todos los tipos de archivos que se pueden almacenar en un sistema de archivos, incluyendo a los directorios, las tuberías nombradas, los archivos de modo caracter, y así sucesivamente. Lo que lleva a esta otra frase famosa: “El inodo es el archivo”. Los inodos también son la forma en la que UNIX® identifica a un archivo de forma unívoca.
Sí, leyó bien: en UNIX®, Usted no identifica a un archivo por su nombre, sino por un número de inodo[27]. La razón para esto es que un mismo archivo puede tener varios nombres, o incluso ninguno. En UNIX®, un nombre de archivo es simplemente una entrada en un inodo de directorio. Tal entrada se denomina vínculo. Veamos a los vínculos con más detalle.
[27] Importante: note que los números de inodo son únicos para cada sistema de archivos, lo cual significa que puede existir un inodo con el mismo número en otro sistema de archivos. Esto nos lleva a la diferencia entre inodos “en disco” e inodos “en memoria”. Aunque los inodos “en disco” pueden tener el mismo número si se encuentran en sistemas de archivo diferentes, los inodos “en memoria” tienen un número único a través de todo el sistema. Una solución para obtener la unicidad es, por ejemplo, hacer un hash del número de inodo “en disco” contra el identificador del dispositivo de bloques.