Cuando buscamos algo en a través, por ejemplo, del comando find, nos suelen salir muchos mensajes de error que nos indican que no se ha podido acceder a algunos directorios. Ésto, está bien, aunque en ocasiones pueden dificultar la lectura de la información que estamos buscando.

Una forma de ocultar todos los mensajes de “permission denied” es redirigir los mensajes de error a otra salida diferente al monitor, que es la salida estándar, como por ejemplo a un fichero de texto.

Salida y entrada estándar

Un proceso tiene asociados 3 ficheros de entrada/salida que son los siguientes:

0 -> stdin : Entrada estándar. Indica por dónde se recogen los datos para el proceso que se está ejecutando y por defecto es el teclado a no ser que le indiquemos lo contrario. 


1 -> stdout : Salida Estándar. Indica por donde se muestran los datos (no de error) que arroja el proceso que se está ejecutando y por defecto es la pantalla a no ser que le indiquemos lo contrario.


2 -> sderr : Error estándar. Indica por donde se muestran los errores que arroja el proceso que se está ejecutando y por defecto es la pantalla a no ser que le indiquemos lo contrario.

Ocultar errores en el terminal

Sabiendo lo anterior, será mas fácil entender y recordar como hacer para filtrar los errores que no nos interesa ver por la pantalla.

Lo único que tenemos que hacer es redirigir el stderr a un fichero de la siguiente forma:

sudo find / -name img* 2> errores.txt

Lo que hace el comando anterior será guardar en el fichero “errores.txt” los errores que arroje la búsqueda de todos los archivos que hay en la raíz de nuestro sistema, mientras que los resultados de la búsqueda los mostrará por pantalla, ya que no hemos redirigido el stdout sino que sólo hemos redirigido el stderr. 

Guardar resultados de la búsqueda en un fichero de texto

Si quisieramos redirigir la salida estándar a un fichero, mostrando los errores por pantalla, y los resultados se guardaran en un ficher, el comando sería:

sudo find / -name img* 1> resultados.txt

Lo que hace el comando anterior será guardar en el fichero “resultados.txt” los resultados de la búsqueda de todos los archivos que hay en la raíz de nuestro sistema y que empiecen por img*, mientras que los errores que lance el proceso los mostrará por pantalla, ya que no hemos redirigido el stderr sino que sólo hemos redirigido el stdout.

En este caso también podríamos haber redirigido sin haber puesto el 1 delante del “>” dando el mismo resultado:

sudo find / -name img* > resultados.txt

Guardar resultados en un fichero de texto y los errores en otro fichero diferente

Como último ejemplo, podemos guardar los resultados por un lado y los errores por otro. 

El comando a utilizar sería el siguiente:

sudo find / -name img* > resultados.txt 2> errores.txt

Obviamente, todos estos ejemplos, valen para cualquier comando que queramos, y no solo con find.

Con estos simples ejemplos espero que haya quedado claro como poder filtrar errores de los comandos que ejecutemos en cualquier sistema Linux.