Página principal » cómo » ¿Qué significa Todo es un archivo en Linux?

    ¿Qué significa Todo es un archivo en Linux?

    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 entender lo que significa le ayudará a entender 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 ubicarse en sistemas de archivos virtuales o pseudo, 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, supongamos que desea 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; simplemente puede leer el contenido de este archivo utilizando cualquier comando estándar que funcione con archivos de texto sin formato. Por ejemplo, podrías usar el comando cat / proc / cpuinfo para imprimir el contenido de este archivo en el terminal: imprima la información de su CPU en el terminal. Incluso puedes abrir / proc / cpuinfo en un editor de texto para ver su contenido.

    Recuerde, / proc / cpuinfo no es realmente 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 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.

    ¿Quieres montar tu CD-ROM? Ejecute el comando mount y especifique / dev / cdrom como el dispositivo que desea montar. ¿Quieres particionar 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, la exposición de 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 usar para abordar y acceder a los dispositivos.

    / dev / null, / dev / random, y / dev / zero

    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 que se le han escrito; piénselo como un bote de basura o un agujero negro. Si alguna vez ves un comentario que te dice que envíes quejas a / dev / null, esa es una forma geek de decir "tirarlos a la basura".
    • / dev / random - Produce aleatoriedad usando 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á un uso para ellos. En su lugar, piensa en ellos como herramientas.

    Por ejemplo, de forma predeterminada, los comandos de Linux producen mensajes de error y otros resultados que se imprimen en la salida estándar, normalmente el 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 tendría que 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 las utilidades estándar y / dev / zero. Por ejemplo, el dd el comando lee desde una ubicación y escribe en otra ubicación. El siguiente comando lee ceros de / dev / zero y los escribe directamente en la primera partición del disco duro de su sistema, borrando completamente su contenido.

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

    dd if = / dev / zero of = / dev / sda1

    Aquí estamos usando dd con archivos especiales (/ dev / zero y / dev / sda1), pero también podemos 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 preciso 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, son accesibles en el sistema de archivos: el sistema de archivos es un "espacio de nombres" universal donde todo es accesible. ¿Quieres acceder a un generador de números aleatorios o leer directamente desde un dispositivo? Encontrarás ambos en el sistema de archivos; no se necesita ninguna otra forma de direccionamiento.

    Por supuesto, algunas cosas no son realmente 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.