Cómo utilizar el comando Tee en Linux

Si alguna vez utilizas tuberías y redireccionamientos en tu shell de Linux, lo más probable es que también necesites a veces hacer uso de la utilidad Tee.

¿Qué hace Tee?

Un comando como

ls

mostrará el contenido de su directorio actual. En otras palabras, muestra estos contenidos a stdout (salida estándar), que normalmente es tu pantalla, o para ser más precisos, tu pantalla de terminal virtual.

Un comando como

ls> archivo123

no mostrará nada en su pantalla. Esto se debe a que el signo > redirige toda la salida a un archivo en lugar de mostrarla en stdout. file123 se llenará ahora con los contenidos que se mostraron previamente en su pantalla.

Para mostrar el contenido de su directorio en la pantalla y escribirlo en un archivo, se utilizan dos comandos. Con tee puedes hacer ambas cosas a la vez.

ls|tee archivo123

¿Por qué usar Tee si puede ejecutar un comando similar dos veces?

En el ejemplo anterior, obviamente no necesita tee si puede ejecutar ls normalmente y luego ejecutarlo de nuevo y redirigir la salida a un archivo. Sin embargo, se encontrará con situaciones en las que la salida será única. Imagina un escenario en el que intentas diagnosticar un problema. Usted ejecuta diagnosticar | tee error.log. Los errores que obtiene pueden ser únicos. Usted quiere que se muestren en la pantalla para que pueda ver lo que está pasando a medida que prueba las cosas. Pero también quieres que esos errores se guarden en un archivo, para poder revisarlos más tarde o pegar la salida en un foro de discusión y preguntar a la gente sobre ello.

RELACIONADO:  Que madera es mejor para barbacoa

Otra situación, que se da a menudo, en la que podrías necesitar el tee, es esta: quieres escribir la salida de un comando en una ubicación en la que sólo el usuario root puede leer o escribir. Esto no funcionará.

/sbin/blkid >/root/algún archivo

Entonces, puedes pensar: «Bueno, por supuesto, ¡sólo tienes que usar sudo!». Y se sorprenderá de que esto tampoco funcione:

sudo blkid >/root/somefile

Esto se debe a que después de que sudo blkid se ejecuta, todavía estás conectado como tu usuario normal, no root. Y tu shell (normalmente bash), intenta escribir en /root/somefile con tus credenciales de usuario habitual. Para resolver esto, puedes usar tee:

/sbin/blkid |sudotee/root/somefile

Añadir texto y redirigir errores

tee es un comando útil pero simple; un comando básico | tee somefile será suficiente la mayoría de las veces. Sin embargo, hay dos escenarios que puede encontrar que requerirán estos consejos.

Lo primero que hay que saber es que tee, por defecto, siempre sobrescribe un archivo. Si ejecuta

ls|tee algúnarchivo

y luego

ls/tmp |tee algún archivo

el segundo comando sobrescribirá el contenido de algún archivo, y sólo verá el contenido del último comando ejecutado. Para cambiar este comportamiento, puede hacer que tee añada texto en lugar de sobrescribirlo. Para ello, sólo tiene que utilizar el modificador de comando -a

ls|tee-a algún archivo

La segunda cosa que hay que saber es que no toda la salida es igual. Los mensajes de error se tratan de forma diferente, y aunque aparezcan en pantalla, no se consideran stdout, por lo que no serán capturados por tee. (Se consideran stderr.) Aquí hay un ejemplo en grep.

grep-r L2TP /etc |tee algún archivo

Se mostrará algo como la siguiente imagen.

RELACIONADO:  Como se clasifica la madera segun su dureza

Salida de Tee Grep

Los mensajes de permiso denegado se escriben en stderr. Lo único que se escribe en stdout es el texto resaltado. Por eso notarás que el contenido de «somefile» es el que se muestra en la siguiente imagen.

Contenido del archivo Tee Grep

En este caso, en el que se utiliza grep para buscar texto, es útil que los mensajes de error no sean redirigidos al archivo. Sólo llenarían el archivo con basura innecesaria. Sólo quieres ver los resultados encontrados. Pero cuando necesites los mensajes de error, usa 2>&1, que redirige stderr a stdout.

grep-r L2TP /etc 2>&1|tee somefile

Con este comando notarás que somefile ahora también contiene los mensajes de error.

Conclusión

Esperamos que este tutorial cubra todo lo que necesitas para sacar el máximo provecho del comando tee.

Pero si te encuentras con una situación en la que te quedas atascado con el tee, deja un comentario abajo, y puede que podamos ayudarte.

¿Es útil este artículo? SíNoAlexandru AndreiSe enamoró

de la informática cuando tenía cuatro años. 27 años después, la pasión sigue ardiendo, alimentando un aprendizaje constante. Pasa la mayor parte de su tiempo en ventanas de terminal y sesiones SSH, administrando escritorios y servidores Linux.

Los comentarios están cerrados