2. Todo es un archivo

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í, “todorealmente 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.

2.1. Los diferentes tipos de archivos

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:

  1. 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'.

  2. 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 otros dispositivos de almacenamiento. Los archivos /dev/hda, /dev/sda5 son ejemplos de archivos de modo bloque. Estos están identificados por la letra b.

  3. Vínculos simbólicos. Estos archivos son muy comunes, y se usan ampliamente en el procedimiento de inicio del sistema de Mandriva Linux (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.

  4. 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”.

  5. 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=
$

2.2. Inodos

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[6]. 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.



[6] 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.