Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

miércoles, 8 de abril de 2015

Los canales estándar en Linux

En esta ocasión voy a hablar de un tema un poco menos conocido en Linux: Los canales. Un canal es lo equivalente un fichero con una descripción pre-establecida por defecto que, cómo un fichero normal, puede ser leído y escrito.

Estos canales son usados involuntariamente por todos los usuarios de Linux y todo aquel que ha escrito un script suele encontrarse con uno de estos canales, especialmente con el último.
  • El canal de entrada se llama stdin y lleva un descriptor numérico llamado 0.
  • El canal de salida se llama stdout y lleva un descriptor numérico llamado 1.
  • El canal de error se llama stderr y lleva un descriptor numérico llamado 2. Este canal puede ser redirigido a otro, ya sea el canal 0 o el 1.

Los canales reciben automáticamente estos contenidos y éstos pueden ser redirigidos a un fichero. Por ejemplo, imaginemos que queremos eliminar un fichero llamado test.txt y este no existe. Evidentemente el comando no se ejecutará y dará un error:


Cómo acabamos de ver, el canal de error posee el descriptor numérico 2. Con lo que sólo habría que redirigir la salida del canal de error a un fichero mediante el 2>${fichero}. Así que si queremos que la salida de error del comando rm test.txt vaya a un fichero, sólo habría que hacer lo siguiente:

rm test.txt 2>/tmp/errores.log

Otra opción es redirigir un canal a otro, para luego redirigir el contenido de ambos a un fichero con por ejemplo:

rm test.txt >/tmp/errores.log 2>&1 

Esta redirección es más común cuando se quiere ejecutar un script de forma automática y no se quiere importunar al usuario que esté conectado por consola con mensajes de error o de salida que pueda dar este script, pero se desea tener un registro de lo que pueda generar dicho script por si hay cualquier problema. Un buen ejemplo de este tipo de redirecciones es el fichero crontab (tareas programadas en Linux) que ejecuta un script o comando de forma automática a una hora determinada y no nos interesa que nos muestre notificación o error alguno.

Muchos dirán que aunque ven útil el hecho de no ser importunados por mensajes, no quieren tener un fichero de log que vaya incrementándose poco a poco y ocupando espacio innecesario en el disco duro. Por fortuna, esto se puede arreglar haciendo que los canales vayan redirigidos a la nada. Así, evitamos tanto ser importunados cómo llenar espacio innecesario en el disco. Para redirigir a la "nada", aplicando el ejemplo anterior escribiríamos:

rm rest.txt >/dev/null 2>&1

Esta última redirección es la que se ve más a menudo en el fichero crontab.

En conclusión, los canales pueden parecer algo abstracto o incluso, para algunos, aburrido, pero la verdad es que para aquellos que jueguen con crontab o quieran ejecutar algunos scripts, tienen un valor incalculable.

Saludos.

No hay comentarios :

Publicar un comentario