Comando tee en Linux: cómo escribir la salida estándar en varios archivos a la vez

Con el comando tee, Linux ofrece la posibilidad no solo de dar salida a la entrada estándar de forma normal, sino también de escribirla en uno o más archivos. Con ello, este comando es una solución útil para guardar los resultados intermedios, archivarlos o examinarlos en busca de fuentes de error.

¿Qué es el comando tee de Linux?

Para entender mejor qué es y qué hace el comando tee de Linux, es interesante saber de dónde viene su nombre. Se llama así por la pieza en T de algunas tuberías, que recuerda a una bifurcación. Así es también como funciona este práctico comando: por un lado, lee de la entrada estándar “stdin”, que se utiliza, por ejemplo, con el teclado o un programa; por otro lado, emite lo que ha leído a través de la salida estándar “stdout”. Además de la salida estándar, por ejemplo, la pantalla, el comando tee en Linux también escribe la salida en uno o más archivos. Así, a partir de una entrada se crean simultáneamente dos o más salidas.

¿Cuál es la función del comando tee en Linux?

El archivo adicional en el que este comando de Linux guarda los datos de lectura puede ser recreado si es necesario. Otra posibilidad es utilizar un archivo existente cuyo contenido se borre y se reescriba. La razón más importante para utilizar el comando tee en Linux es la posibilidad de mantener los resultados intermedios dentro de un pipe de Linux. De esta forma, podrás editarlos más tarde o comprobar que no hay errores. El archivo se crea de forma paralela a la salida real sin ningún tipo de restricción o impedimento técnico.

¿Cómo se utiliza este comando?

La sintaxis básica del comando tee en Linux es siempre la misma y tiene este formato:

tee [OPTIONS] [FILE]
bash

Es importante que siempre se especifique al menos un archivo (FILE) en el que se va a escribir la salida.

Un ejemplo sencillo para el uso del comando Linux es la combinación con el comando du (disc usage). Este muestra qué parte del disco duro está ocupada. El comando completo tendrá entonces el siguiente formato:

du -h | tee disk_usage.txt
bash

De esta forma, obtendrás la información de cuánto espacio está ocupado en tu disco duro. La opción “-h” (human readable) indica el espacio ocupado en un formato comprensible. Al mismo tiempo que la salida estándar, la información también se almacena y guarda en el archivo de texto disk_usage.txt. Si este archivo no existe, se crea automáticamente.

¿Cómo se evita que se sobrescriba el contenido de un archivo?

Si no tomas ninguna otra precaución, el comando tee de Linux sobrescribirá la información de un archivo en cuanto se vuelva a seleccionar dicho archivo. Si quieres cambiar esto, solo tienes que utilizar la opción de línea de comandos -a. Esto asegurará que el nuevo contenido se añada. En el ejemplo utilizado anteriormente, se vería así:

du -h | tee -a disk_usage.txt
bash

¿Cómo se escribe en varios archivos a la vez con el comando tee?

Es posible escribir la salida en varios archivos de manera sencilla. Para ello, basta con especificarlos individualmente y separarlos con espacios, como en el siguiente ejemplo:

du -h | tee disk_usage1.txt disk_usage2.txt disk_usage3.txt
bash

¿Cómo se reenvía la salida como entrada?

Sin embargo, con el comando tee en Linux no solo puedes escribir la salida simultáneamente en cualquier número de archivos. También tienes la opción de reenviar la salida como entrada a otros comandos. Por ejemplo:

ls file* | tee tercer_archivo.txt | wc -m
bash

En este ejemplo, no solo se almacena la salida en el documento terce_archivo.txt, sino que también se obtiene información sobre cuántos caracteres hay en el archivo.

¿Cómo utilizar el comando tee en Linux con sudo?

También puedes utilizar el comando tee junto con sudo en Linux. Esto es ventajoso o incluso necesario si se ha escrito en un archivo que tiene derechos de root. Si no utilizas sudo, lo único que obtendrás es solo un mensaje de error. Este es un ejemplo de la estructura de este comando:

echo "Ejemplo" | sudo tee -a documento_root.txt
bash
Nota

sudo es un comando que se utiliza en sistemas operativos tipo unix como Linux o macOS para ejecutar programas con derechos ampliados. Esto es muy útil cuando hay que realizar tareas que normalmente corresponden a las del administrador.

¿Cómo ignorar un interrupt durante la ejecución de tee?

Con la opción -i de la línea de comandos tienes la posibilidad de ignorar un interrupt (una interrupción) durante la ejecución del comando tee en Linux. De lo contrario, la señal de interrupción se mostraría al pulsar la combinación de teclas [Ctrl] + [c]. Establece la opción correspondiente directamente después del comando tee:

command | tee -i file.out
bash