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

  • Categoría: Linux
  • Publicado hace más de 3 años



Si ya poseemos algunas nociones del árbol de directorios de GNU/Linux, debe sonarnos al menos la referencia /dev/, que es, efectivamente donde se encuentran todos los archivos relacionados con dispositivos de hardware.
 
Si miramos en el directorio /dev/ veremos un ?archivo? llamado null, pero si queremos abrirlo para ver su contenido, el sistema nos dirá que no es posible ya que no es de contenido ordinario. He entrecomillado la palabra archivo porque, como todos sabéis para Linux todo (hardware y software) se representa como un archivo.
 
Este es un aporte de Daniel Durante, convirtiéndose así en uno de los ganadores de nuestra competencia semanal: "Compartí lo que sabés sobre Linux". ¡Felicitaciones Daniel!
 
¿A qué dispositivo se corresponde /dev/null?
 
A efectos prácticos imagínate un cubo de basura, un pozo sin fondo o el espacio sideral al que lanzar cualquier cosa sin posibilidad de recuperarla (por mucho que se empeñen los tipos de la Nasa).
 
Pero si ya tengo comandos como rm, ¿para qué quiero otra cosa nueva que borre?
 
Porque la forma de trabajar de ambos ?agujeros negros? es completamente diferente: ¿cómo harías para anular en tiempo de ejecución la salida estándar de un error en un comando dentro de un script para la shell? Aquí es donde entra /dev/null.
 
Vamos a verlo con un ejemplo.
 
Hemos creado un fichero llamado pruebas conteniendo la cadena ?Hola Mundo?. Si queremos representar el contenido de ese fichero en la linea de comandos, podríamos hacerlo de la siguiente forma:
 

[email protected]:~$ cat prueba

Hola Mundo

 
Si el fichero no existiese o estuviera nombrado como pruebas (con una 's' al final), obtendríamos el siguiente error en la consola:
 

[email protected]:~$ cat pruebas

cat: pruebas: No existe el fichero o el directorio

 
¿Que podríamos hacer para evitar el mensaje de error? Pues sencillamente redirigir la salida del comando, en caso de error, a un ?cubo de basura?, es decir a /dev/null
 
¿Cómo especificamos que sea en caso de error? Aquí entran los valores estándar de entrada, salida y error para un programa: STDIN, STDOUT y STDERR (que pueden ser sustituidos por 0, 1 y 2 respectivamente). De esta forma, si ponemos...
 

[email protected]:~$ cat pruebas 2>/dev/null

[email protected]:~$

 
...veremos que no se producirá en la consola el mensaje de error.
 
Hay que tener cuidado porque la sintaxis es fundamental: entre los caracteres 2 y > no debe existir espacio. Sino, daría lo siguiente:
 

[email protected]:~$ cat pruebas 2 >/dev/null

cat: pruebas: No existe el fichero o el directorio

cat: 2: No existe el fichero o el directorio

 
En cambio, un espacio entre > y /dev/null no afectará negativamente el resultado.
 
También podríamos usar la redirección de errores, por ejemplo, para la captura de errores en un archivo de log de la siguiente forma:
 

[email protected]:~$ cat pruebas 2 >err.log

 
Otro caso interesante sería la recogida de resultados en otro fichero siempre y cuando no se produjese un error, para lo cual pondríamos:
 

[email protected]:~$ cat prueba 1>resultado_de_salida  2>err.log

 
Por último cabe poner la expresión "> /dev/null 2>&1" en la que se aúnan la salida estándar y la salida de error redireccionándolas para que en ningún caso se obtenga información de salida.

¿Qué es /dev/null y cómo puede ayudarte?
¿Qué es /dev/null y cómo puede ayudarte?
13 Puntos Score: 6.5/10
Visitas: 718 Favoritos: 6
Ver los usuarios que votaron...
4 Comentarios ¿Qué es /dev/null y cómo puede ayudarte?
jeje genial la imagen y muy ?
interesante, la verdad no he probado mucho linux pero en un futuro me sera de utilidad  
Excelente informacion  
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!