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 del 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 escribas en “/dev/null” se descarta, se olvida, se arroja al vacío. Para comprender por qué esto es útil, primero debe tener una comprensión básica de la salida estándar y el error estándar en los sistemas operativos Linux o tipo *nix.
salida estándar y estándar
Una utilidad de línea de comandos puede generar dos tipos de salida. La salida estándar se envía a stdout. Los errores se envían a stderr.
De manera predeterminada, stdout y stderr están asociados con su ventana de terminal (o consola). Esto significa que cualquier cosa enviada 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 la lea más tarde, o puede redirigir la salida estándar a un dispositivo físico, por ejemplo, una pantalla LED o LCD digital.
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
o2>/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. Supongamos 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 normal que no sea root no puede leer. Esto dará como resultado muchos errores de «Permiso denegado».
Éstos saturan la salida y hacen que sea más difícil detectar los resultados que está buscando. Dado que los errores de «Permiso denegado» son parte de stderr, puede redirigirlos a «/dev/null».
grep -r power /sys/ 2>/dev/null
Como puede ver, esto es mucho más fácil de leer.
En otros casos, podría ser útil hacer lo contrario: filtrar la salida estándar para que solo pueda ver los errores.
ping google.com 1>/dev/null
La captura de pantalla anterior muestra que, sin redirigir, 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 mensajes de error.
Puede redirigir tanto stdout como stderr a dos ubicaciones diferentes.
ping google.com 1>/dev/null 2>error.log
En este caso, los mensajes de salida estándar no se mostrarán 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 toda la salida. Hay dos maneras de hacer esto.
grep -r power /sys/ >/dev/null 2>&1
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» solo 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 como este:
grep -r power /sys/ 2>&1 >/dev/null
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, la salida estándar 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 una redirección más simple que es mucho más fácil de escribir:
grep -r power /sys/ &>/dev/null
En este caso, &>/dev/null
es equivalente a decir «redirigir tanto stdout como stderr a esta ubicación».
Otros ejemplos en los que puede ser útil redirigir a /dev/null
Digamos que quiere ver qué tan rápido su disco puede leer datos secuenciales. La prueba no es extremadamente precisa, pero lo suficientemente precisa. Puedes usar dd
para esto, pero dd da salida a la salida estándar 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 va a leer; of=
especifica el nombre del archivo de salida, dónde escribir.
dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct
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. Bastante simple, no escriba en un archivo normal, escriba en «/dev/null».
wget -O /dev/null https://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso
Conclusión
Con suerte, los ejemplos en 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? ¡Deja un comentario abajo y comparte el conocimiento!