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

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:

usuario@laptop:~$ 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:

usuario@laptop:~$ 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…

usuario@laptop:~$ cat pruebas 2>/dev/null
usuario@laptop:~$

…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:

usuario@laptop:~$ 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:

usuario@laptop:~$ 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:

usuario@laptop:~$ 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.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Guido Ignacio Ignacio dijo

    Ah pero falta una de las utilidades más usadas que tiene /dev/null, que es vaciar archivos: $ cat /dev/null > file.log De esta forma, el archivo file.log quedar vacío. Agréguenlo!

    1.    Eduardo H dijo

      Precisamente era la explicación que estaba buscando.
      Apoyo la moción de agregarlo =)

      Saludos !

  2.   Pablo dijo

    Hola, primero que todo esta muy bien el artículo! lo segundo quisiera aportar algo con este enlace sobre el tema cron job en php desde Cpanel y lo tercero felicitaciones por el blog!

  3.   Pablo dijo

    Buen articulo sobre dev/null, que pena creo comenté por error en el lugar equivocado antes! me disculpo

  4.   Anónimo dijo

    gracias buen aporte

  5.   Jers dijo

    Saludos estoy recibiendo ataque null. Utilizo andrirc y me llega un privado de mi mismo nick con la palabra Null. 2 segundo después se cierra el programa he estado leyendo y por lo que veo esto solo lo puede hacer la Shell no alguien externo. He tratado de ignorarme /ignore -lrpcntikd y Nada me sorprende sigue llegando el comando. Si tienen alguna forma de tratar de bloquearlo se lo agradecería. Saludos

  6.   Sofia Martinez dijo

    ¿Que pasa si al ejecutar la sentencia no se coloca el simbolo >?

    ¿Podría alguien orientarme por favor?

  7.   Nil dijo

    Buenos dias, he instalado Debian netinst en ACER Extensa 5620Z – 32 bit.Una vez finalizada la instalación desde USB y retirado el pendrive para que arranque desde el disco duro (no vuelva a instalar desde el pen) pero en el momento de arrancar el sistema me pide:
    debian login: xxxxxxxx (ok)
    Password: xxxxxxxx (ok)
    nil@debian:~$ ???? esto qué es? Qué debo poner ahí?

    Sin esta orden no puedo avanzar con el arranque del sistema.
    Pueden ustedes ayudarme? No sé como debo continuar.
    Muchas gracias. Saludos cordiales.