Si ha estado aprendiendo programación de shell, es posible que ya haya encontrado algo como /dev/null. En este artículo entenderemos qué es y cómo se utiliza. Comencemos entendiendo qué es /dev.
comandos de Linux que
¿Qué es /dev?
En el sistema de archivos de Linux, todo es un archivo o un directorio. Incluso se accede a los dispositivos como archivos. Las particiones de tu disco duro, Pendrive, parlantes, para todos ellos existe un archivo desde el cual se accede a ellos. Ahora, para comprender cómo se accede a los dispositivos como archivos, piénselo de esta manera: ¿qué hacemos con un archivo? Leemos datos de él y escribimos datos en él. Un dispositivo como un altavoz puede ingresar datos para producir sonido, un disco duro puede usarse para leer y escribir datos, una impresora toma la entrada para imprimir archivos, etc. Los archivos y los dispositivos son similares en este sentido.
/dev es un directorio que almacena todos los dispositivos físicos y virtuales de un sistema Linux. Los dispositivos físicos son fáciles de entender, son dispositivos tangibles como pendrives, parlantes, impresoras, etc. Un sistema Linux también tiene dispositivos virtuales que actúan como un dispositivo pero no representan ningún dispositivo físico.
¿Qué es /dev/null?
Es un dispositivo virtual, que tiene una propiedad especial: cualquier dato escrito en /dev/null se desvanece o desaparece. Por esta característica, también se le llama bitbucket o agujero negro. Veamos una demostración.
Redirigir la salida a /dev/null

En esta demostración, puede ver que agregamos algunos datos, pero esos datos no se almacenaron. Esta característica particular de /dev/null tiene algunos casos de uso. Veámoslos.
Uso de /dev/null
Dado que descarta todo lo escrito en él, puede mover archivos a /dev/null para eliminarlos. Pero este no es un caso de uso muy utilizado. Se utiliza principalmente para descartar la salida estándar y el error estándar de una salida.
¿Qué son la salida estándar y el error estándar?
La salida de un comando de Linux contiene dos flujos de datos: salida estándar (stdout) y error estándar (stderr0), mientras que la salida estándar es la salida normal si el comando no tiene errores, el error estándar es el error generado por el comando. La salida puede contener tanto salida estándar como entrada estándar. Ejemplo de salida estándar y stderr:
Ejecutemos el siguiente script de shell
# /bin/sh ls apt update>

El primer comando se ejecutó correctamente, pero el segundo generó un error. Dado que stdout y stderr son dos flujos de datos separados, se pueden manejar por separado.
¿Cómo acceder a stderr y stdout?
Stdout y stderr son flujos de datos y ambos se tratan como un archivo en Linux. Si desea realizar alguna acción sobre estos, utilice un descriptor de archivo que identifique de forma única la secuencia del archivo. El descriptor de archivo para stdout es 1 y para stderr es 2.
matriz dinámica en java
Para acceder a ellos por separado, veamos el siguiente comando que se realiza en el mismo archivo de script que se usó en el ejemplo anterior.
./script.sh 1>salidastd.txt>

En esto, puede ver que la salida contiene errores estándar pero la salida estándar no se mostró. Esto se debe a que la secuencia stdout se envió al archivo stdout.txt y puede ver que el archivo stdout.txt contiene la salida estándar.
Mientras escribimos un script de shell, es posible que deseemos descartar el error estándar de la salida. Cualquiera que sea el flujo que queramos suprimir de la salida, ese flujo de datos se puede escribir en /dev/null. Podrías escribir esos datos en otro archivo, como en el ejemplo anterior, pero si no tienes uso para esos datos, ¿por qué querrías desperdiciar memoria en ellos? Es mejor descartarlos por completo. Veamos el siguiente ejemplo
./script.sh 2>/dev/nulo>

Y así, hemos eliminado el stderr de la salida. Si desea descartar el resultado completo, puede utilizar el siguiente comando
command>/dev/nulo 2>&1>
El comando &> redirige la salida del descriptor de archivo que se menciona a la izquierda (en el comando anterior, la salida de 2) a la secuencia del descriptor de archivo mencionado en el lado derecho. Entonces, la salida de stderr (2) se redirige a stdout(1), que a su vez se escribe en /dev/null y, por lo tanto, se destruye.
la rueda de desplazamiento no funciona
Eliminación segura de archivos
'/dev/null' encuentra utilidad en la eliminación segura de archivos. Al redirigir '/dev/null' a un archivo, puede sobrescribir eficazmente su contenido con bytes nulos, lo que dificulta la recuperación de datos significativos.
Por ejemplo:
cat /dev/null>archivo_sensitivo>
Este comando reemplaza el contenido de 'archivo_sensible' con bytes nulos, garantizando su eliminación segura.
Limpieza de archivos de registro
Los archivos de registro pueden acumular datos sustanciales con el tiempo. Para borrar los archivos de registro sin interrumpir los servicios en ejecución, puede redirigir su contenido a '/dev/null'.
Por ejemplo:
.es igual a java
cat /dev/null>/var/log/syslog>
Este comando vacía el archivo 'syslog' redirigiendo su contenido a '/dev/null', limpiando efectivamente el registro sin eliminar el archivo en sí.
Consejos y trucos:
- Redirigiendo la salida estándar a '/dev/null': 'command> /dev/null'
- Redirigiendo el error estándar a '/dev/null': 'comando 2> /dev/null'
- Redirigiendo tanto la salida como el error a '/dev/null': 'command>/dev/null 2>&1'
Conclusión
En este artículo discutimos que `/dev/null’ en Linux es un agujero negro virtual donde los datos desaparecen cuando se escriben en él. Se usa comúnmente para descartar resultados y errores, lo que hace que la ejecución de comandos sea más limpia. También se puede emplear para la eliminación segura de archivos y la limpieza de archivos de registro. Comprender su funcionalidad permite operaciones eficientes de línea de comandos en Linux.