29Jul

¿Qué significa "Todo es un archivo" en Linux?

Una de las características definitorias de Linux y otros sistemas operativos tipo UNIX es que "todo es un archivo". Esto es una simplificación excesiva, pero entender 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 se pueden ubicar en sistemas de archivos pseudo o virtuales como / dev, que contiene archivos especiales que representan dispositivos, y / proc, que contiene archivos especiales que representan la información del sistema y del proceso.

/ proc

Por ejemplo, supongamos que quiere encontrar 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; puede simplemente 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 al terminal, imprimiendo la información de su CPU al 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 están exponiendo esta información como un archivo. Esto nos permite usar herramientas familiares para ver y trabajar con la información.

El directorio / proc también contiene otros archivos similares, por ejemplo: tiempo de actividad de

  • /proc/: expone el tiempo de actividad de su kernel de Linux, en otras palabras, cuánto tiempo ha estado encendido su sistema sin apagarlo. Versión
  • /proc/: expone la versión de su kernel de Linux.

/ dev

En el directorio / dev, encontrará archivos que representan dispositivos, así como también 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.

¿Desea montar su CD-ROM?Ejecute el comando mount y especifique /dev/ cdrom como el dispositivo que desea montar.¿Quieres dividir tu primer disco duro? Ejecute una utilidad de partición de disco y especifique /dev/ sda como el disco duro que desea editar.¿Quieres formatear la primera partición en tu 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 nombre" coherente que todas las aplicaciones pueden usar para abordar y acceder a los dispositivos.

/dev/ nulo, /dev/ aleatorio y /dev/ cero

El sistema de archivos / dev no solo contiene archivos que representan dispositivos físicos. Aquí están tres de los dispositivos especiales más notables que contiene:

  • /dev/ null - Descarta todos los datos escritos en él - piense en ello como un bote de basura o un agujero negro. Si alguna vez ve un comentario que le dice que envíe quejas a /dev/ nulo, esa es una manera geek de decir "tírelo a la basura".
  • /dev/ aleatorio - Produce aleatoriedad usando ruido ambiental. Es un generador de números aleatorios al que puedes acceder.
  • /dev/ zero - Produce ceros - un flujo constante de ceros.

Si piensa en estos tres como archivos, no verá un uso para ellos. En cambio, piensa en ellos como herramientas.

Por ejemplo, de forma predeterminada, los comandos de Linux producen mensajes de error y otros resultados que imprimen a la salida estándar, normalmente el terminal. Si desea ejecutar un comando y no le importa su resultado, puede redireccionar ese resultado a /dev/ nulo. Redirigir la salida de un comando a /dev/ null lo descarta inmediatamente. En lugar de tener cada comando para implementar su propio "modo silencioso", puede usar este método con cualquier comando.

comando & gt;/dev/ null

Si quería una fuente de aleatoriedad, por ejemplo, para generar una clave de encriptación, no necesitaría escribir su propio generador de números aleatorios, podría usar /dev/ al azar.

Para borrar el contenido de un disco duro escribiéndole 0, no necesita una utilidad especial dedicada a poner en cero una unidad: puede usar las utilidades estándar y /dev/ cero. Por ejemplo, el comando dd lee de una ubicación y escribe en otra ubicación. El siguiente comando leería ceros de /dev/ cero y los escribiría directamente en la primera partición del disco duro en su sistema, borrando por completo su contenido.

( Advertencia : este comando borrará todos los datos en su primera partición si lo ejecuta. Solo ejecute este comando si desea destruir datos.)

dd if = /dev/ cero de = /dev/ sda1

Aquí estamos usando ddcon archivos especiales( /dev/ cero 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 una secuencia de bytes" que "todo es un archivo". /dev/ al azar no es un archivo, pero ciertamente es una secuencia de bytes. Y, aunque técnicamente estas cosas no son archivos, están accesibles en el sistema de archivos: el sistema de archivos es un "espacio de nombres" universal donde todo es accesible.¿Desea 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 son parte del sistema de archivos."Todo es un archivo" es inexacto, pero muchas cosas se comportan como archivos.