GNU/Linux >> Tutoriales Linux >  >> Linux

Todo es archivo en Linux – Parte 1

Dividido en 2 partes, en esta primera parte introduciré el concepto de que todo es archivo y presentaré los dispositivos especiales /dev/null, /dev/zero, /dev/random/dev/completo . La Parte 2 será presentar funciones didácticamente interesantes sobre esto, por ejemplo, ¡cómo convertir un archivo en una partición!

Introducción

  • ¿Qué es?

Todo es Archivo es el concepto de cómo el sistema registra y guarda todo en su estructura. A diferencia de otros sistemas operativos, los sistemas operativos similares a UNIX tratan todo como un archivo común.

Esto significa que no solo las particiones se montan como archivos, sino también directorios de dispositivos específicos como RAM, teléfonos inteligentes, discos externos, y los discos de medios ópticos son todos archivos. ¡Además de estos, los enchufes y las tuberías también son archivos!

Además, cada terminal TTY, los que abre con CTRL ALT F1 – son “archivos” a los ojos del sistema.

Directorio /dev

Si navega por el directorio / dev, verá todos los archivos correspondientes a los montajes del sistema en relación con otros medios. Es como si conectaras un teléfono celular a la computadora, un disco duro externo o incluso una memoria USB y todo se convirtiera en "un archivo" para el sistema operativo.

Las particiones del sistema son los archivos que comienzan con "sd ” en la carpeta /dev.​En la misma carpeta, los TTY son dispositivos TeleTypewriter, el terminal shell al que se accede mediante el “CTRL ALT F1 " dominio. Los bloques de ensamblaje utilizados por el sistema de medios ópticos (DVD, CD, etc.) también están en esta carpeta, en los archivos enumerados "loop “.

Dispositivos especiales

La mayor curiosidad de esta publicación se debe a estos 4 pequeños archivos en la carpeta /dev:completo, cero, aleatorio y nulo. ¿Puedes diferenciar la función de cada uno de ellos? Lo que tienen en común es que son “archivos especiales ” y no meros directorios.

Dispositivo nulo:/dev/null

El dispositivo nulo (device null) normalmente se usa para descartar el flujo de salida de un proceso cuyo resultado no importa por alguna razón. También sirve como un archivo vacío de conveniencia. Por lo general, esta operación se realiza a través de un comando de redirección en la consola del sistema. Cualquier archivo enviado al dispositivo "/dev/null" desaparecerá para siempre debido a la forma en que funciona, eliminando los datos al instante.

Es como un gran agujero negro, una basura que nunca se llena.

Poéticamente, los programadores hacen muchas bromas sobre /dev/null debido a esta peculiaridad.

Pruebe el siguiente comando:$ echo "Hello World" Verá "Hello World" como salida del comando.

Ahora intenta:

$ echo “Hello World”> /dev/null

Devolverá una salida vacía. Es decir, no pasará nada.

Porque la salida del comando "Hola mundo" fue a la nada.
Fue tragado por un Agujero Negro.

¡Fue a visitar a Coraje, el perro cobarde, en Nowhere! O cualquier otro lugar loco que tu imaginación te permita.

​/dev/null para sistemas basados ​​en UNIX funciona como un agujero negro:

¡Lo que se envía allí no regresa! Dejando las bromas de lado, básicamente, la salida del comando del proceso no se almacenaba, era un descarte directo como si nunca se hubiera generado.

Dispositivo lleno:/dev/full

En Linux, el dispositivo siempre lleno es un archivo especial que siempre devuelve el mismo código de error cuando se accede a él para escribir:ENOSPC, que significa "No hay espacio disponible en el dispositivo “.

Además, tiene otra función:Por estar siempre llena, proporciona una infinidad de caracteres nulos (NULL) a cualquier proceso que acceda a ella como lectura. ¡Este dispositivo se usa comúnmente para probar el comportamiento de un programa cuando encuentra un error debido a un disco de memoria lleno!

Prueba el siguiente comando:$ echo “Hello world”> /dev/full ¡Le dará a este dispositivo un error completo, imitando un HDD abarrotado!
bash: echo:error de escritura:no queda espacio en el dispositivo

Dispositivo cero:/dev/zero

En los sistemas operativos similares a Unix, /dev/zero es un archivo especial que proporciona cuántos caracteres nulos se leen: el NULL de la tabla ASCII, 0x00; y no el carácter “cero dígito”, “0”, cuyo valor es 0x30–.

El flujo de caracteres nulos generado por este dispositivo puede, por ejemplo, usarse para sobrescribir información en un disco (para limpiarlo) o para generar un archivo limpio de tamaño X hasta el infinito. El sistema BSD lo usa implementando memoria compartida a través de la función mmap , que mapea/dev/cero a RAM.

Crea un gran archivo vacío llamado "prueba":

$ dd if=/dev/ zero of=/home/
$ USER /test count=1000 bs=1000

Si no le impones un límite al comando, poniendo como “dd if=/dev/zero of=/home/$ USER/test”, verás un archivo que engordará tendiendo al infinito; solo deja de crecer cuando la unidad de disco está llena, lo que genera un error de "no hay espacio disponible en el disco".

Este comando es interesante cuando se quiere recuperar un pendrive que tiene la tabla de particiones dañada y es irrecuperable. El dd El comando fuerza la escritura y /dev /zero llenará cada bloque de almacenamiento con ceros. ¡Estará en un estado recién fabricado, lo que requerirá que luego use un programa como Disks o Gparted para reconstruir su tabla de particiones!

​Tenga cuidado con este comando, si la salida es =/dev /sda1, pondrá a cero todo su disco sda1 (lo llenará con ceros) haciendo que los archivos sean irrecuperables.

Dispositivo aleatorio:/dev/random

Funciona utilizando la misma lógica que /dev/zero, pero llenando un disco o creando un archivo de tamaño n con valores aleatorios, generados a partir de procesamiento informático, recopilando caracteres de información de GPU, memoria RAM, etc.

/Dev/random debe ser apropiado para usos que requieren números aleatorios de alta calidad, como un bloc de notas de un solo uso o la generación de claves públicas para SSH y otras redes compartidas.

¡Curiosidad rápida!

¿Qué pasa si enviamos la nada? Eso es si enviamos el contenido de /dev/zero a /dev/null

$ sudo dd if =/dev/zero of=/dev/null

Este comando generará un archivo que tiende al infinito, el cual será grabado en el dispositivo de espacio infinito – ¡Nuestro agujero negro! En la práctica, no daña los discos de hardware porque en realidad no se generan ni se escriben datos en el disco. Pero bajo la perspectiva del kernel, hay una transferencia de datos allí:generará un alto consumo de CPU, lo que seleccionará uno de los núcleos para generar dicho procesamiento ocupando el 100% del uso.

Este tipo de comando se usa para pruebas de rendimiento, por ejemplo, para comprobar cómo se comporta la computadora con la CPU al 100 % de uso.

Conclusión

En esta publicación, aprendiste más detalles sobre cómo los sistemas basados ​​en UNIX reconocen los dispositivos y cómo todo es un "archivo". También sabían detalles sobre los dispositivos especiales.

En el próximo post de la serie hablaré de algunas utilidades interesantes para estos dispositivos, por ejemplo, crear una partición a partir de un archivo, entre otras curiosidades que no quiero comentar para no spoilear!


Linux
  1. Cómo mover un archivo en Linux

  2. Comprender los permisos de archivos de Linux

  3. Linux – ¿Todo es un archivo?

  4. ¿Ordenar parte de un archivo?

  5. ¿Cuál es una alternativa a la búsqueda de Everything para Linux?

Comando Stat en Linux

Compresión de archivos de Linux:todo lo que necesita saber

Permisos de archivos de Linux:todo lo que necesita saber

Todo es un archivo en Linux - Parte 2

Cómo agregar un nuevo dispositivo al sistema de archivos BTRFS en Linux

Comandos de Linux utilizados con frecuencia por los administradores de sistemas de Linux - Parte 5