La Guía del Usuario habrá introducido los conceptos de posesión de archivos y permisos de acceso, pero la verdadera comprensión del sistema de archivos de GNU/Linux requiere que volvamos a definir el concepto de archivo en sí mismo. Una razón es que:
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. GNU/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 dejado a las aplicaciones.
Si recuerda bien, cuando Ud. 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 se conserva en memoria [1]. 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á bufereado [2]. 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 Linux-Mandrake (vea el capítulo Los archivos de arranque: init "System V"). 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. Generalmente 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 nombres. 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 los identifica es 'p'. Para aprender más acerca de ellas eche un vistazo a 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-fg/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 dic 9 19:12 /etc/rc.d/rc3.d/S20random -> ../init.d/random* pr--r--r-- 1 fg fg 0 dic 10 20:23 /proc/554/maps| srwx------ 1 fg fg 0 dic 10 20:08 /tmp/ssh-fg/ssh-510-agent= $ |
Debemos agregar que ext2fs, al igual que todos los demás sistemas de archivos Unix, almacena los archivos, sin importar su tipo, en una tabla de i-nodos . Una particularidad es que un archivo no se identifica por su nombre sino por un número de i-nodo. De hecho, no todos los archivos tienen un nombre. Los nombres son sólo una consecuencia de una noción más amplia:
[1] | Se dice de ellos "no-bufereados", que proviene del inglés unbuffered |
[2] | Conservado en memoria |