¿Qué es / dev / null en Linux?

En términos técnicos, «/ dev / null» es un archivo de dispositivo virtual. En lo que respecta a los programas, estos se tratan como archivos reales. Las empresas de servicios públicos pueden solicitar datos de este tipo de fuente y el sistema operativo les proporciona datos. Pero, en lugar de leer desde el disco, el […]

Dev Null Destacado

En términos técnicos, «/ dev / null» es un archivo de dispositivo virtual. En lo que respecta a los programas, estos se tratan como archivos reales. Las empresas de servicios públicos pueden solicitar datos de este tipo de fuente y el sistema operativo les proporciona datos. Pero, en lugar de leer desde el disco, el sistema operativo genera estos datos de forma dinámica. Un ejemplo de un archivo de este tipo es «/ dev / zero».

En este caso, sin embargo, escribirá en un archivo de dispositivo. Todo lo que escriba en “/ dev / null” se descarta, se olvida y se tira al vacío. Para comprender por qué esto es útil, primero debe tener un conocimiento básico de la salida estándar y el error estándar en sistemas operativos de tipo Linux o * nix.

stdout y stder

Una utilidad de línea de comandos puede generar dos tipos de resultados. La salida estándar se envía a stdout. Los errores se envían a stderr.

Por defecto, stdout y stderr están asociados con su ventana de terminal (o consola). Esto significa que todo lo que se envíe a stdout y stderr normalmente se muestra en su pantalla. Pero a través de las redirecciones de shell, puede cambiar este comportamiento. Por ejemplo, puede redirigir stdout a un archivo. De esta manera, en lugar de mostrar la salida en la pantalla, se guardará en un archivo para que lo lea más tarde, o puede redirigir la salida estándar a un dispositivo físico, por ejemplo, una pantalla LED o LCD digital.

Dev Pantalla LCD nula

Un artículo completo sobre canalizaciones y redirecciones está disponible si desea obtener más información.

  • Con 2> redirige los mensajes de error estándar. Ejemplo: 2>/dev/null o 2>/home/user/error.log.
  • Con 1> redirige la salida estándar.
  • Con &> redirige tanto el error estándar como la salida estándar.

Use / dev / null para deshacerse de la salida que no necesita

Dado que hay dos tipos de salida, salida estándar y error estándar, el primer caso de uso es filtrar un tipo u otro. Es más fácil de entender a través de un ejemplo práctico. Digamos que está buscando una cadena en «/ sys» para encontrar archivos que se refieran a la configuración de energía.

Habrá muchos archivos que un usuario no root no podrá leer. Esto resultará en muchos errores de «Permiso denegado».

Errores de Dev Null Grep

Estos desordenan la salida y dificultan la detección de los resultados que está buscando. Dado que los errores de «Permiso denegado» son parte de stderr, puede redirigirlos a «/ dev / null».

Dev Null Grep sin errores

Como puede ver, esto es mucho más fácil de leer.

En otros casos, puede ser útil hacer lo contrario: filtrar la salida estándar para que solo pueda ver los errores.

Errores de ping nulo del desarrollador

La captura de pantalla anterior muestra que, sin redireccionar, ping muestra su salida normal cuando puede llegar a la máquina de destino. En el segundo comando, no se muestra nada mientras la red está en línea, pero tan pronto como se desconecta, solo se muestran los mensajes de error.

Puede redirigir tanto stdout como stderr a dos ubicaciones diferentes.

En este caso, los mensajes de stdout no se mostrarán en absoluto y los mensajes de error se guardarán en el archivo «error.log».

Redirigir toda la salida a / dev / null

A veces es útil deshacerse de todos los resultados. Hay dos maneras de hacer esto.

La cuerda >/dev/null significa «enviar stdout a / dev / null», y la segunda parte, 2>&1, significa enviar stderr a stdout. En este caso, debe referirse a stdout como «& 1» en lugar de simplemente «1». Escribir «2> 1» simplemente redirigiría stdout a un archivo llamado «1».

Lo que es importante tener en cuenta aquí es que el orden es importante. Si invierte los parámetros de redirección de esta manera:

no funcionará según lo previsto. Eso es porque tan pronto como 2>&1 se interpreta, stderr se envía a stdout y se muestra en la pantalla. A continuación, stdout se suprime cuando se envía a «/ dev / null». El resultado final es que verá errores en la pantalla en lugar de suprimir toda la salida. Si no puede recordar el orden correcto, hay un redireccionamiento más simple que es mucho más fácil de escribir:

En este caso, &>/dev/null es equivalente a decir «redirigir stdout y stderr a esta ubicación».

Otros ejemplos en los que puede ser útil redireccionar a / dev / null

Supongamos que desea ver qué tan rápido su disco puede leer datos secuenciales. La prueba no es extremadamente precisa, pero sí lo suficientemente precisa. Puedes usar dd para esto, pero dd se envía a stdout o se le puede indicar que escriba en un archivo. Con of=/dev/null puede decirle a dd que escriba en este archivo virtual. Ni siquiera tiene que usar redirecciones de shell aquí. if= especifica la ubicación del archivo de entrada que se leerá; of= especifica el nombre del archivo de salida, donde escribir.

Dev Null Dd

En algunos escenarios, es posible que desee ver qué tan rápido puede descargar desde un servidor. Pero no desea escribir en su disco innecesariamente. Simplemente, no escriba en un archivo normal, escriba en «/ dev / null».

Conclusión

Con suerte, los ejemplos de este artículo pueden inspirarlo a encontrar sus propias formas creativas de usar «/ dev / null».

¿Conoce un caso de uso interesante para este archivo de dispositivo especial?