Tabla de contenidos
Una de las características definitorias de Linux y otros sistemas operativos similares a UNIX es que «todo es un archivo». Esta es una simplificación excesiva, pero comprender lo que significa lo ayudará a comprender cómo funciona Linux.
Muchas cosas en Linux aparecen en su sistema de archivos, pero en realidad no son archivos. Son archivos especiales que representan dispositivos de hardware, información del sistema y otras cosas, incluido un generador de números aleatorios.
Estos archivos especiales pueden estar ubicados en pseudo o sistemas de archivos virtuales como / dev, que contiene archivos especiales que representan dispositivos, y / proc, que contiene archivos especiales que representan información del sistema y del proceso.
/ proc
Por ejemplo, digamos que desea buscar información sobre su CPU. El directorio / proc contiene un archivo especial, / proc / cpuinfo, que contiene esta información.
No necesita un comando especial que le indique la información de su CPU; simplemente puede leer el contenido de este archivo usando cualquier comando estándar que funcione con archivos de texto sin formato. Por ejemplo, puede usar el comando cat / proc / cpuinfo para imprimir el contenido de este archivo en el terminal, imprimiendo la información de su CPU en el terminal. Incluso podría abrir / proc / cpuinfo en un editor de texto para ver su contenido.
Recuerde, / proc / cpuinfo no es en realidad un archivo de texto que contiene esta información; el kernel de Linux y el sistema de archivos proc nos exponen esta información como un archivo. Esto nos permite utilizar herramientas familiares para ver y trabajar con la información.
El directorio / proc también contiene otros archivos similares, por ejemplo:
- / proc / uptime: expone el tiempo de actividad de su kernel de Linux; en otras palabras, cuánto tiempo ha estado encendido su sistema sin apagarse.
- / proc / version: expone la versión de su kernel de Linux.
/ dev
En el directorio / dev, encontrará archivos que representan dispositivos, así como archivos que representan otras cosas especiales. Por ejemplo, / dev / cdrom es su unidad de CD-ROM. / dev / sda representa su primer disco duro, mientras que / dev / sda1 representa la primera partición en su primer disco duro.
¿Quiere montar su CD-ROM? Ejecute el comando de montaje y especifique / dev / cdrom como el dispositivo que desea montar. ¿Quiere particionar su primer disco duro? Ejecute una utilidad de partición de disco y especifique / dev / sda como el disco duro que desea editar. ¿Quiere formatear la primera partición en su primer disco duro? Ejecute un comando de formateo y dígale que formatee / dev / sda1.
Como puede ver, exponer estos dispositivos como parte del sistema de archivos tiene sus ventajas. El sistema de archivos proporciona un «espacio de nombres» consistente que todas las aplicaciones pueden utilizar para acceder a los dispositivos y acceder a ellos.
/ dev / null, / dev / random y / dev / zero
El sistema de archivos / dev no solo contiene archivos que representan dispositivos físicos. Estos son tres de los dispositivos especiales más notables que contiene:
- / dev / null: descarta todos los datos escritos en él; considérelo un bote de basura o un agujero negro. Si alguna vez ve un comentario que le dice que envíe quejas a / dev / null, esa es una forma geek de decir «tírelas a la basura».
- / dev / random: produce aleatoriedad utilizando ruido ambiental. Es un generador de números aleatorios que puede aprovechar.
- / dev / zero: produce ceros, un flujo constante de ceros.
Si piensa en estos tres como archivos, no verá ningún uso para ellos. En cambio, piense en ellos como herramientas.
Por ejemplo, de forma predeterminada, los comandos de Linux producen mensajes de error y otras salidas que imprimen en la salida estándar, normalmente la terminal. Si desea ejecutar un comando y no le importa su salida, puede redirigir esa salida a / dev / null. Redirigir la salida de un comando a / dev / null lo descarta inmediatamente. En lugar de que cada comando implemente su propio «modo silencioso», puede usar este método con cualquier comando.
comando> / dev / null
Si quisiera una fuente de aleatoriedad, por ejemplo, para generar una clave de cifrado, no necesitaría escribir su propio generador de números aleatorios, podría usar / dev / random.
Para borrar el contenido de un disco duro escribiendo 0 en él, no necesita una utilidad especial dedicada a poner a cero un disco; puede usar utilidades estándar y / dev / zero. Por ejemplo, el comando dd lee desde una ubicación y escribe en otra ubicación. El siguiente comando leería ceros de / dev / zero y los escribiría directamente en la primera partición del disco duro de su sistema, borrando completamente su contenido.
( Advertencia : este comando borrará todos los datos de su primera partición si lo ejecuta. Ejecute este comando solo si desea destruir datos).
dd if = / dev / zero of = / dev / sda1
Aquí estamos usando dd con archivos especiales (/ dev / zero y / dev / sda1), pero también podríamos usar dd para leer y escribir en archivos reales. El mismo comando funciona tanto para manipular dispositivos directamente como para trabajar con archivos.
Aclaración
En la práctica, es más exacto decir que «todo es un flujo de bytes» que «todo es un archivo». / dev / random no es un archivo, pero ciertamente es un flujo de bytes. Y, aunque técnicamente estas cosas no son archivos, se puede acceder a ellas en el sistema de archivos; el sistema de archivos es un «espacio de nombres» universal donde todo es accesible. ¿Quiere acceder a un generador de números aleatorios o leer directamente desde un dispositivo? Encontrará ambos en el sistema de archivos; no se necesita otra forma de direccionamiento.
Por supuesto, algunas cosas no son en realidad archivos; los procesos que se ejecutan en su sistema no forman parte del sistema de archivos. “Todo es un archivo” es inexacto, pero muchas cosas se comportan como archivos.