/dev/zero
es un ejemplo de un "archivo especial", en particular, un "nodo de dispositivo". Normalmente, estos se crean por el proceso de instalación de distribución, pero se puede totalmente las crea usted mismo si quieres.
Si preguntas ls
sobre /dev/zero
:
# ls -l /dev/zero
crw-rw-rw- 1 root root 1, 5 Nov 5 09:34 /dev/zero
La "c" al principio le dice que este es un "dispositivo de caracteres"; el otro tipo es "dispositivo de bloque" (impreso ls
como "b"). En términos generales, los dispositivos de acceso aleatorio como los discos duros tienden a ser dispositivos de bloque, mientras que las cosas secuenciales como las unidades de cinta o la tarjeta de sonido tienden a ser dispositivos de caracteres.
La parte "1, 5" es el "número de dispositivo principal" y el "número de dispositivo secundario".
Con esta información, podemos usar el mknod
comando para crear nuestro propio nodo de dispositivo:
# mknod foobar c 1 5
Esto crea un nuevo archivo llamado foobar
, en la carpeta actual, que hace exactamente lo mismo que /dev/zero
. (Por supuesto, puede establecer diferentes permisos si lo desea). Todo este "archivo" realmente contiene los tres elementos anteriores: tipo de dispositivo, número mayor, número menor. Puede usar ls
para buscar los códigos de otros dispositivos y recrearlos también. Cuando te aburras, solo usa rm
para eliminar los nodos del dispositivo que acabas de crear.
Básicamente, el número principal le dice al kernel de Linux con qué controlador de dispositivo debe hablar, y el número menor le dice al controlador de dispositivo de qué dispositivo está hablando. (Por ejemplo, probablemente tenga un controlador SATA, pero tal vez haya varios discos duros conectados).
Si desea inventar nuevos dispositivos que hagan algo nuevo ... bueno, deberá editar el código fuente del kernel de Linux y compilar su propio kernel personalizado. ¡Entonces no hagamos eso! :-) Pero puedes agregar archivos de dispositivo que duplican los que ya tienes. Un sistema automatizado como udev básicamente solo está buscando eventos del dispositivo y llamando mknod
/ rm
por usted automáticamente. Nada más mágico que eso.
Todavía hay otros tipos de archivos especiales:
Linux considera que un directorio es un tipo especial de archivo. (Por lo general, no puede abrir directamente un directorio, pero si pudiera, encontraría que es un archivo normal que contiene datos en un formato especial y le dice al núcleo dónde encontrar todos los archivos en ese directorio).
Un enlace simbólico es un archivo especial. (Pero un enlace rígido no lo es). Puede crear enlaces simbólicos con el ln -s
comando. (Busque la página del manual).
También hay una cosa llamada "canalización con nombre" o "FIFO" (cola de primero en entrar, primero en salir). Puedes crear uno con mkfifo
. Un FIFO es un archivo mágico que puede abrirse con dos programas a la vez: una lectura y una escritura. Cuando esto sucede, funciona como un tubo de cubierta normal. Pero puede iniciar cada programa por separado ...
Un archivo que no es "especial" de ninguna manera se denomina "archivo normal". De vez en cuando verá mención de esto en la documentación de Unix. Eso es lo que significa; un archivo que no es un nodo de dispositivo o un enlace simbólico o lo que sea. Solo un archivo normal, todos los días, sin propiedades mágicas.