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.
Si recuerda bien, 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. En la salida de ls -l, 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 dichos archivos pueden o no apuntar a un archivo existente. Esto se explicará más adelante en este capítulo. Con mucha frecuencia (y equivocadamente, como veremos más adelante) se los conoce como soft links (en inglés), y están identificados por una '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. Sólo en caso de que los vea, la letra que las identifica es 'p'. Para aprender más acerca de ellas consulte “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 Information NODE (NODO de Información).
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, y esto incluye a los directorios, las tuberías nombradas, los archivos de modo caracter, y así sucesivamente. Esto nos 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[24]. 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.
[24] 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.