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 al ext2fs de GNU/Linux) requiere que volvamos a definir el concepto de archivo en sí mismo.

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. 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 que se deja a las aplicaciones.

Los diferentes tipos de archivos

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:

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

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

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

  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 dic  9 19:12 /etc/rc.d/rc3.d/S20random
-> ../init.d/random*
    pr--r--r--    1 reina  reina         0 dic 10 20:23 /proc/554/maps|
    srwx------    1 reina  reina         0 dic 10 20:08 /tmp/ssh-reina/ssh-510-agent=
    $
   

I-nodos

Los i-nodos son, junto con el paradigma “Todo es un archivo”, la parte fundamental de cualquier sistema de archivos UNIX. La palabra i-nodo es una abreviación de Information NODE (NODO de Información)

Los i-nodos se almacenan en el disco en una tabla de i-nodos. 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 i-nodo es el archivo”. Los i-inodos también son la forma en la que UNIX identifica de forma unívoca a un archivo.

Sí, leyó bien: en UNIX, Usted no identifica a un archivo por su nombre, sino por un número de i-nodo[22]. 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 i-nodo de directorio. Tal entrada se denomina vínculo. Veamos a los vínculos con más detalle.



[22] Importante: note que los números de i-nodo son únicos para cada sistema de archivos, lo cual significa que puede existir un i-nodo con el mismo número en otro sistema de archivos Esto nos lleva a la diferencia entre i-nodos “en disco” e i-nodos “en memoria”. Aunque los i-nodos “en disco” pueden tener el mismo número si se encuentran en sistemas de archivo diferentes, los i-nodos “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 i-nodo “en disco” contra el identificador del dispositivo de bloques.