Un detalle que hemos ocultado hasta ahora es que el núcleo de Linux considera que prácticamente todo es un fichero. En esta categoría se incluyen los directorios y los dispositivos: se trata simplemente de tipos de ficheros especiales.
Como quizá recuerde, el primer carácter del resultado de ejecutar ls`l representa el tipo de fichero. Para un fichero ordinario, será simplemente -. Entre las restantes posibilidades podemos contar:
Los enlaces simbólicos (también llamados “symlinks” o «vínculos simbólicos») son el otro tipo de enlace, además de los enlaces no simbólicos (hard links). Un enlace simbólico es un fichero especial que apunta a un vínculo no simbólico (hard link), pero en cualquier sistema de ficheros que esté montado. Cuando intente leer el contenido de un enlace simbólico, le dará el contenido del fichero al que apunta, en vez del contenido del enlace simbólico propiamente dicho. Ya que los directorios, dispositivos y otros enlaces simbólicos son tipos de ficheros, puede hacer que un enlace simbólico apunte a cualquiera de estos objetos.
De esta forma, un enlace no simbólico (hard link) está compuesto por un nombre de fichero y un número de inodo. El fichero es en realidad un inodo: una ubicación en el disco, un tipo de fichero, una asignación de permisos de acceso, etcétera. Un enlace simbólico es un inodo que contiene el nombre de un enlace no simbólico (hard link). El enlace simbólico empareja un nombre de fichero con un segundo nombre de fichero, mientras que el enlace no simbólico (hard link) empareja un fichero con un número de inodo.
Todos los enlaces no simbólicos al mismo fichero tienen la misma categoría: es decir, que cada uno es tan válido como el resto de ellos. Si realiza una operación sobre uno de ellos, es lo mismo que si la realizara sobre cualquiera de los otros. El motivo es que los enlaces no simbólicos (hard links) remiten todos al mismo inodo. Las operaciones llevadas a cabo sobre enlaces simbólicos, por otra parte, afectan a veces al inodo del propio enlace simbólico (que es el que contiene el nombre de un vínculo no simbólico) y otras veces afectan al vínculo no simbólico al que apuntan.
Existen algunas diferencias importantes entre los enlaces simbólicos y los enlaces no simbólicos.
Los enlaces simbólicos pueden establecerse entre sistemas de ficheros. El motivo es que contienen nombres completos de fichero, comenzando desde el directorio raíz, y que todos los nombres de fichero completo son únicos. Puesto que los enlaces no simbólicos apuntan a números de inodo, y los números de inodo sólo son únicos dentro de un único sistema de ficheros, serían ambiguos en caso de que no supiéramos a qué sistema de ficheros remiten.
Puede llevar a cabo enlaces simbólicos a directorios, pero no puede llevar a cabo enlaces no simbólicos a directorios. Cada directorio tiene enlaces no simbólicos, su listado en su directorio padre, su entrada ., y la entrada .. en cada uno de sus subdirectorios; pero, para imponer orden en el sistema de ficheros, no se permite ningún otro vínculo no simbólico a directorios. En consecuencia, el número de ficheros en un directorio es igual al número de enlaces no simbólicos de ese directorio, menos dos (se le resta el nombre del directorio y el enlace .) Puede llevar a cabo un enlace no simbólico sólo a un fichero que ya existe, puesto que debe existir un número de inodo al que hacer referencia. Sin embargo, puede hacer un enlace simbólico a cualquier fichero, independientemente de que exista o no tal nombre de fichero.
Eliminar un enlace simbólico sólo borra el enlace. No tiene efecto alguno sobre el fichero al que está enlazado. Eliminar el único enlace no simbólico a un fichero elimina el fichero.
Pruebe lo siguiente:
Los ficheros de dispositivo hacen referencia a dispositivos físicos o virtuales de su sistema, como por ejemplo el disco duro, la tarjeta de vídeo, la pantalla y el teclado. Un ejemplo de dispositivo virtual es la consola, representada por /dev/console.
Existen dos tipos de dispositivos: de carácter y de bloque. Los dispositivos de caracteres se pueden acceder a razón de un carácter cada vez. Recuerde que la unidad de datos más pequeña que puede escribirse en un dispositivo, o leerse desde él, es un carácter (byte).
A los dispositivos de bloques ha de accederse a razón de unidades más grandes llamadas bloques, que contienen un cierto número de caracteres. Su disco duro es un dispositivo de bloques.
Puede leer y escribir ficheros de dispositivo de la misma manera que lo hace desde otros tipos de ficheros, si bien es verdad que el fichero puede contener un galimatías ciertamente incomprensible para los seres humanos. Escribir aleatoriamente datos en estos ficheros es con probabilidad una mala idea. No obstante, a veces resulta útil. Por ejemplo, puede volcar un fichero postcript en el dispositivo de impresora /dev/lp0 o también enviar órdenes del módem al fichero de dispositivo del puerto serie correspondiente.
/dev/null /dev/null es un fichero especial de dispositivo que desecha todo aquello que se escribe en él. Si desea librarse de algo, láncelo a /dev/null. En esencia, se trata de un cubo de basura sin fondo. Si intenta leer /dev/null, obtendrá en seguida un carácter de (EOF). /dev/zero es parecido, excepto por el hecho de que obtendrá el carácter \0 (que no es lo mismo que el número cero).
Una tubería con nombre es un fichero que actúa como una tubería. Se pone algo en el fichero y sale por el otro lado. Por ello se llama FIFO, o “First-In-First-Out”, «lo primero que entra es lo primero que sale», debido a que lo primero que se introduce en la tubería es lo primero que sale por el otro lado.
Si se escribe a una tubería con nombre, el proceso que escribe a la tubería no termina hasta que la información que se escribe se lea desde el otro lado de la tubería. Si se lee desde una tubería con nombre, el proceso que lee espera hasta que haya algo que leer, antes de terminar. El tamaño de la tubería es siempre cero; no almeacena datos, sino que se limita a enlazar dos procesos como el redireccionador | del intérprete de órdenes. No obstante, debido a que esta tubería tiene nombre, los dos procesos no necesitan estar en la misma línea de órdenes ni tampoco que los ejecute el mismo usuario.
Puede probarlo ejecutando lo siguiente:
Los sockets son semejantes a las tuberías, con la diferencia de que trabajan sobre una red. Es ésa la manera en que su computador trabaja sobre la red. Quizás haya oído hablar de «WinSock»; se trata de los sockets para Windows.
No profundizaremos en ellos, ya que probablemente no tenga ocasión de utilizarlos directemente a menos que vaya a programar. Sin embargo, en caso de que vea en su computador un fichero marcado como s, ya sabe de qué se trata.