Tee Featured

Cómo usar el comando Tee en Linux

Si alguna vez usa tuberías y redirecciones bajo su shell de Linux, es probable que a veces también necesite hacer uso de la tee utilidad.

¿Qué hace Tee?

Un comando como

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

Un comando como

no mostrará nada en su pantalla. Eso es porque el > sign redirige toda la salida a un archivo en lugar de mostrarla en la salida estándar. file123 ahora se llenará con los contenidos que se mostraban previamente en su pantalla.

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

¿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 ejecútelo nuevamente y redirija la salida a un archivo. Sin embargo, encontrará situaciones en las que la salida será única. Imagine un escenario en el que intenta diagnosticar un problema. Tu corres diagnose | tee error.log. Los errores que obtenga pueden ser únicos. Desea que se muestren en la pantalla para que pueda ver lo que sucede a medida que prueba las cosas. Pero también desea que esos errores se guarden en un archivo, para que pueda revisarlos más tarde o pegar el resultado en un foro de discusión y preguntarle a la gente al respecto.

Otra situación, que se encuentra a menudo, en la que puede necesitar te, es esta: desea escribir la salida de un comando en una ubicación donde solo el usuario raíz puede leer o escribir. Esto no funcionará.

/sbin/blkid > /root/somefile

Entonces, puede pensar: «Bueno, por supuesto, ¡solo use sudo!» Y te sorprenderá que esto tampoco funcione:

sudo blkid > /root/somefile

Eso es porque después sudo blkid se ejecuta, todavía está conectado como su usuario normal, no root. Y su shell (generalmente bash), intenta escribir en /root/somefile con sus credenciales de usuario habitual. Para resolver esto, puedes usar tee:

/sbin/blkid | sudo tee /root/somefile

Adición de texto y errores de redireccionamiento

tee es un comando útil pero simple; un basico command | 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 debe saber es que tee, por defecto, siempre sobrescribe un archivo. Si tu corres

y entonces

el segundo comando sobrescribirá el contenido de algún archivo y solo verá el contenido del último comando ejecutado. Para cambiar este comportamiento, puede hacer que te agregue texto en lugar de sobrescribirlo. Para hacerlo, simplemente use el -a interruptor de comando

Lo segundo que debe saber es que no todos los resultados son iguales. Los mensajes de error se tratan de manera diferente y, aunque aparecen en la pantalla, no se consideran estándar, por lo que no serán detectados por el tee. (Se consideran stderr). Aquí hay un ejemplo en grep.

grep -r L2TP /etc | tee somefile

Se mostrará algo como la siguiente imagen.

Salida en T Grep

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

Contenido del archivo Tee Grep

En este caso, donde se usa grep para buscar texto, es útil que los mensajes de error no se redirijan al archivo. Simplemente llenarían el archivo con basura innecesaria. Solo desea ver los resultados encontrados. Pero cuando necesite los mensajes de error, use 2>&1que redirige stderr a stdout.

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

Con este comando notará que algún archivo ahora también contiene los mensajes de error.

Conclusión

Con suerte, este tutorial cubre todo lo que necesita para aprovechar al máximo el comando tee. Pero si se encuentra con una situación en la que se queda atascado con el tee, deje un comentario a continuación y es posible que podamos ayudarlo.

Experto Geek - Tu Guía en Tendencias Tecnológicas