Gestión de archivos

¿Qué es / dev / null y cómo usarlo?

¿Qué es / dev / null y cómo usarlo?
Linux es un sistema operativo interesante que aloja algunos dispositivos virtuales para numerosos propósitos. En lo que respecta a los programas que se ejecutan en el sistema, estos dispositivos virtuales actúan como si fueran archivos reales. Las herramientas pueden solicitar y alimentar datos de estas fuentes. Los datos son generados por el sistema operativo en lugar de leerlos desde un disco.

Un ejemplo es / dev / null. Es un archivo especial que está presente en todos los sistemas Linux. Sin embargo, a diferencia de la mayoría de los otros archivos virtuales, en lugar de leer, se usa para escribir. Todo lo que escriba en / dev / null será descartado, olvidado en el vacío. Es conocido como el dispositivo nulo en un sistema UNIX.

¿Por qué querrías tirar algo al vacío?? Veamos qué es / dev / null y su uso.

Prerrequisitos

Antes de profundizar en el uso de / dev / null, debemos tener una comprensión clara de la stdout y stderr flujo de datos. Consulte esta guía detallada sobre stdin, stderr, y stdout.

Tengamos una actualización rápida. Siempre que se ejecuta cualquier utilidad de línea de comandos, genera dos salidas. La salida va a stdout y el error (si se genera) va a stderr. De forma predeterminada, estos dos flujos de datos están asociados con el terminal.

Por ejemplo, el siguiente comando imprimirá la cadena entre comillas dobles. Aquí, la salida se almacena en stdout.

$ echo "Hola mundo"

El siguiente comando nos mostrará el estado de salida del comando ejecutado previamente.

$ echo $?

Como el comando anterior se ejecutó correctamente, el estado de salida es 0. De lo contrario, el estado de salida será diferente. ¿Qué sucede cuando intentas ejecutar un comando no válido??

$ adfadsf
$ echo $?

Ahora, necesitamos saber sobre el descriptor de archivo. En el ecosistema UNIX, estos son valores enteros asignados a un archivo. Ambas cosas stdout (descriptor de archivo = 1) y stderr (descriptor de archivo = 2) tiene un descriptor de archivo específico. Usando el descriptor de archivo (1 y 2 en esta situación), podemos redirigir el stdout y stderr a otros archivos.

Para empezar, el siguiente ejemplo redirigirá el stdout del comando echo a un archivo de texto. Aquí, no especificamos el descriptor del archivo. Si no se especifica, bash usará stdout por defecto.

$ echo "Hola mundo"> registro.TXT

El siguiente comando redirigirá el stderr a un archivo de texto.

$ asdfadsa 2> error.TXT

Usando / dev / null

Redirigir la salida a / dev / null

Ahora, estamos listos para aprender a usar / dev / null. Primero, veamos cómo filtrar la salida normal y el error. En el siguiente comando, grep intentará buscar una cadena (hola, en este caso) en el directorio "/ sys".

$ grep -r hola / sys /

Sin embargo, generará muchos errores, ya que sin privilegios de root, grep no puede acceder a varios archivos. En tal caso, se producirán errores de "Permiso denegado". Ahora, usando la redirección, podemos obtener un resultado más claro.

$ grep -r hola / sys / 2> / dev / null

La salida se ve mucho mejor, ¿verdad?? Nada! En este caso, grep no tiene acceso a muchos archivos y aquellos a los que se puede acceder no tienen la cadena "hola".

En el siguiente ejemplo, estaremos haciendo ping a Google.

$ ping google.com

Sin embargo, no queremos ver todos esos resultados de ping exitosos. En cambio, solo queremos centrarnos en los errores cuando el ping no pudo llegar a Google. Como hacemos eso?

$ ping google.com 1> / dev / null

Aquí, el contenido de stdout se vuelcan a / dev / null, dejando solo los errores.

Redirigir toda la salida a / dev / null

En determinadas situaciones, la salida puede no ser útil en absoluto. Usando la redirección, podemos volcar toda la salida al vacío.

$ grep -r hola / sys /> / dev / null 2> & 1

Rompemos este comando un poco. Primero, vamos a deshacernos de todos los stdout a / dev / null. Luego, en la segunda parte, le decimos a bash que envíe stderr a stdout. En este ejemplo, no hay nada que generar. Sin embargo, si está confundido, siempre puede verificar si el comando se ejecutó correctamente.

$ echo $?

El valor es 2 porque el comando generó muchos errores.

Si tiende a olvidar el descriptor de archivo de stdout y stderr, el siguiente comando funcionará bien. Es un formato más generalizado del comando anterior. Ambas cosas stdout y stderr será redirigido a / dev / null.

$ grep -r hola / sys / &> / dev / null

Otros ejemplos

Este es uno interesante. Recuerda la herramienta dd? Es una poderosa herramienta para convertir y copiar archivos. Más información sobre dd. Usando dd, podemos probar la velocidad de lectura secuencial de su disco. Por supuesto, no es una medida precisa. Sin embargo, para una prueba rápida, es bastante útil.

$ dd si = de = / dev / estado nulo = progreso bs = 1M iflag = directo

Aquí, he usado Ubuntu 18.04.4 ISO como archivo grande.

Del mismo modo, también puede probar la velocidad de descarga de su conexión a Internet.

$ wget -O / dev / null

Pensamientos finales

Con suerte, tiene una comprensión clara de lo que es este archivo / dev / null. Es un dispositivo especial que, si se escribe en él, se descarta y, si se lee, se lee nulo. El verdadero potencial de esta interesante característica está en interesantes scripts de bash.

¿Estás interesado en bash scripting?? Consulte la guía para principiantes de bash scripting.

Disfrutar!

Cómo mostrar la superposición de OSD en aplicaciones y juegos de Linux en pantalla completa
Jugar juegos en pantalla completa o usar aplicaciones en modo de pantalla completa sin distracciones puede aislarlo de la información relevante del si...
Las 5 mejores cartas de captura de juegos
Todos hemos visto y amado la transmisión de juegos en YouTube. PewDiePie, Jakesepticye y Markiplier son solo algunos de los mejores jugadores que han ...
Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...