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 =
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!