Introducción
El comando tee en Linux es una utilidad poderosa que te permite ver la salida de un comando en la terminal mientras la guardas simultáneamente en un archivo. Esta funcionalidad es especialmente útil para administradores de sistemas y desarrolladores que necesitan tanto inspeccionar la salida en tiempo real como preservarla para un análisis posterior.
Este laboratorio (LabEx) te introducirá en los fundamentos de la multiplexación de salida utilizando el comando tee. Aprenderás cómo mostrar la salida y guardarla al mismo tiempo, redirigir el error estándar y anexar la salida a archivos existentes. Estas habilidades son esenciales para una gestión efectiva de registros, depuración y monitoreo del sistema en entornos Linux.
Comprender los conceptos básicos del comando tee
El comando tee en Linux toma su nombre de la unión de tubería en forma de T en la plomería, que divide el flujo de agua en dos direcciones. De manera similar, el comando tee divide la salida de un comando en dos direcciones: hacia la terminal y hacia un archivo.
Comencemos navegando a nuestro directorio de trabajo:
cd /home/labex/project
Crear un archivo de prueba
Primero, creemos un simple archivo de texto que podamos utilizar para nuestros experimentos:
echo "Hello, World" > hello.txt
Este comando crea un archivo llamado hello.txt que contiene el texto "Hello, World".
Usar el comando tee
Ahora, usemos el comando tee para mostrar el contenido de hello.txt en la terminal mientras lo copiamos a otro archivo:
cat hello.txt | tee copy.txt
Deberías ver la siguiente salida en tu terminal:
Hello, World
La parte cat hello.txt lee el contenido del archivo hello.txt. El símbolo de tubería | toma esa salida y la envía al comando tee. El comando tee luego muestra el texto en la terminal y al mismo tiempo lo escribe en el archivo copy.txt.
Verifiquemos que el contenido se haya copiado realmente a copy.txt:
cat copy.txt
Deberías ver la misma salida:
Hello, World
Comprender la estructura del comando
La sintaxis básica del comando tee es:
command | tee filename
Donde:
commandes cualquier comando que genere salida|(tubería) envía la salida del comando a teeteees el comando en sífilenamees el nombre del archivo donde se guardará la salida
Redirigiendo el error estándar con tee
En Linux, los programas pueden enviar información a través de dos canales principales:
- Salida estándar (stdout): Salida normal del programa
- Error estándar (stderr): Mensajes de error y diagnósticos
Por defecto, el comando tee solo captura la salida estándar. Sin embargo, en muchas situaciones, es posible que desees capturar también los mensajes de error. Aquí es donde entra en juego la redirección de salida.
Comprender la redirección del error estándar
Creemos un script que envíe tanto salida estándar como error estándar. Naveguemos primero al directorio del proyecto (si no estás ya allí):
cd /home/labex/project
Ahora, ejecutemos un comando que produzca tanto salida estándar como error estándar:
echo "This is standard output"
ls /nonexistentfile
Deberías ver una salida similar a esta:
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Observa que el mensaje de error del comando ls se envía directamente a la terminal.
Redirigir el error estándar a un archivo
Veamos primero cómo podemos redirigir solo la salida de error a un archivo:
echo "This is standard output"
ls /nonexistentfile 2> error.log
Esta vez, solo deberías ver:
This is standard output
El mensaje de error se ha redirigido al archivo error.log. La sintaxis 2> le dice a la shell que redirija el error estándar (descriptor de archivo 2) al archivo especificado.
Verifiquemos el contenido de error.log:
cat error.log
Deberías ver:
ls: cannot access '/nonexistentfile': No such file or directory
Capturar tanto la salida como el error con tee
Ahora, usemos tee para capturar tanto la salida estándar como el error estándar en un archivo mientras los mostramos también en la terminal:
{
echo "This is standard output"
ls /nonexistentfile
} 2>&1 | tee both.log
Deberías ver tanto la salida como el error en la terminal:
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Veamos el contenido de both.log:
cat both.log
Deberías ver la misma salida:
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Comprender la estructura del comando
En el comando 2>&1 | tee both.log:
{ ... }agrupa múltiples comandos juntos2>&1redirige el error estándar (descriptor de archivo 2) a la salida estándar (descriptor de archivo 1)|canaliza la salida combinada al comandoteetee both.logmuestra la salida en la terminal y la escribe enboth.log
Esta técnica es especialmente útil para registrar la salida de comandos durante el mantenimiento del sistema o la resolución de problemas.
Anexando salida con tee
Por defecto, el comando tee sobrescribe el archivo de destino cada vez que se utiliza. Sin embargo, en muchos escenarios, es posible que desees agregar nueva información a un archivo existente en lugar de reemplazar su contenido. Aquí es donde la opción -a (anexar) resulta útil.
Comprender la opción de anexar
Navega al directorio del proyecto si aún no estás allí:
cd /home/labex/project
Primero, creemos un archivo con información del sistema:
uname -a | tee system_info.log
Este comando mostrará la información de tu sistema en la terminal y la guardará en system_info.log. La salida se verá algo así (tu salida puede ser diferente):
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Ahora, veamos el contenido del archivo:
cat system_info.log
Deberías ver la misma información del sistema.
Anexar información al archivo
Ahora, anexemos más información a este archivo utilizando la opción -a:
echo "Date and time: $(date)" | tee -a system_info.log
Esto mostrará algo como:
Date and time: Wed May 3 14:22:34 UTC 2023
La bandera -a le dice a tee que anexe la salida al archivo en lugar de sobrescribirlo.
Veamos el contenido del archivo nuevamente:
cat system_info.log
Ahora deberías ver tanto la información del sistema como la fecha:
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Agregar más información
Anexemos aún más información a nuestro archivo de registro:
echo "Disk usage:" | tee -a system_info.log
df -h | tee -a system_info.log
Esto mostrará información de uso de disco y la anexará a nuestro archivo de registro. La salida variará según tu sistema, pero podría verse algo así:
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
Verifiquemos el contenido de nuestro archivo de registro una vez más:
cat system_info.log
Ahora deberías ver toda la información que hemos agregado:
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
Comprender la estructura del comando
La sintaxis para anexar con tee es:
command | tee -a filename
Donde:
commandes cualquier comando que produzca salida|(tubería) envía la salida del comando ateeteees el comando en sí-aes la opción para anexar al archivo en lugar de sobrescribirlofilenamees el nombre del archivo donde se anexará la salida
Este enfoque es especialmente útil para:
- Construir archivos de registro con el tiempo
- Capturar la salida de múltiples comandos en un solo archivo
- Mantener un registro de los estados o operaciones del sistema
Resumen
En este laboratorio, has aprendido cómo utilizar el comando tee para la multiplexación de salida en Linux. Esta poderosa utilidad te permite ver la salida de los comandos en la terminal mientras la guardas simultáneamente en archivos, lo que la convierte en una herramienta esencial para administradores de sistemas y desarrolladores.
A continuación, se presentan las habilidades clave que has adquirido:
Uso básico de tee: Aprendiste cómo utilizar
teepara mostrar la salida en la terminal mientras la guardas simultáneamente en un archivo.Redirección del error estándar: Dominaste cómo capturar tanto la salida estándar como el error estándar utilizando la redirección
2>&1en combinación contee, lo cual es crucial para un registro completo.Anexar salida: Descubriste cómo utilizar la opción
-aconteepara anexar la salida a archivos existentes en lugar de sobrescribirlos, lo que te permite construir registros de forma incremental.
Estas técnicas son valiosas para diversas tareas en Linux, incluyendo:
- Crear registros detallados para la depuración
- Monitorear actividades del sistema
- Documentar salidas de comandos durante la administración del sistema
- Conservar resultados de comandos para consultas futuras
Comprender cómo administrar eficazmente la salida en Linux es una habilidad fundamental que te será de gran ayuda a medida que avances en tu recorrido con sistemas Linux.



