El comando tee de Linux se usa para encadenar y redirigir tareas, puede redirigir la salida y/o los errores a un archivo y no se mostrará en la terminal. De manera similar, al usar el encadenamiento, la salida de un comando se puede dar como entrada para el segundo comando y luego para el tercer comando y así sucesivamente, pero una vez que redirige la salida a un archivo, no puede encadenarlo con otros comandos.
Linux tee se puede usar para lograr ambos resultados juntos, es decir, almacenar el resultado en un archivo mientras se encadena el mismo resultado a otro comando.
En este tutorial, discutiremos cómo usar Linux tee con algunos ejemplos.
Sintaxis del comando Tee
El comando tee básicamente lee desde la entrada estándar y escribe en la salida y los archivos estándar. La siguiente es la sintaxis del comando:
$ command | tee [OPTION]... [FILE]...
Los siguientes ejemplos deberían darnos una mejor idea de cómo funciona el comando.
1) Cómo escribir en la salida estándar y en un archivo
Para escribir en la salida estándar y en un archivo, use una T después de una tubería y especifique el archivo.
$ sudo ls /home/smart | tee folders_of_smart.txt
Ahora podemos ir a folders_of_smart.txt
y vea el contenido del archivo escribiendo el siguiente comando.
$ sudo nano folders_of_smart.txt
Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
2) Cómo escribir en un archivo y agregar la salida
Para agregar la salida al archivo existente, usaremos -a
opción.
$ sudo echo 'Movies' | tee -a folders_of_smart.txt
Ahora podemos ir a folders_of_smart.txt
y vea el contenido del archivo escribiendo el siguiente comando.
$ sudo nano folders_of_smart.txt
Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
Movies
3) Cómo escribir en varios archivos
Para escribir en varios archivos, solo tenemos que mencionar sus nombres en la línea de comando.
$ sudo ping facebook.com | tee output1.txt output2.txt output3.txt
Ahora podemos ir a output1.txt
, output2.txt
y vea el contenido del archivo escribiendo el siguiente comando.
$ sudo nano output1.txt
$ sudo nano output2.txt
Output:
PING facebook.com(edge-star-mini6-shv-02-dfw5.facebook.com (2a03:2880:f134:183:face:b00c:0:25de)) 5$
64 bytes from edge-star-mini6-shv-02-dfw5.facebook.com (2a03:2880:f134:183:face:b00c:0:25de): icmp_$
64 bytes from edge-star-mini6-shv-02-dfw5.facebook.com (2a03:2880:f134:183:face:b00c:0:25de): icmp_$
4) Cómo redirigir la salida de un comando a otro
También podemos pasar la salida como entrada a otros comandos. Por ejemplo, el siguiente comando no enumerará todos los nombres de las carpetas en folders_of_smart.txt
pero lista a través de grep ^o
ordene que la carpeta comience con la letra o.
$ sudo ls /home/smart | tee folders_of_smart.txt | grep ^o
output:
output1.txt
output2.txt
output3.txt
output.txt
Otro ejemplo, listaremos /etc
directorios y luego la salida se almacena en el archivo llamado stage1.txt
, Esta salida se filtra a través del comando grep para las líneas que comienzan con la letra i. Esta salida filtrada se almacena en el archivo stage2.txt
.
Finalmente, la salida filtrada se ordena inversamente usando sort -r
dominio. Esta salida final se muestra en el terminal.
$ ls /etc | tee stage1.txt | grep ^i | tee stage2.txt | sort -r
output:
issue.net
issue
iscsi
iproute2
inputrc
initramfs-tools
init.d
init
5) Cómo ver archivos de registro y escribir en un archivo
Podemos analizar el HTTP2
tráfico que pasa por un apache2
servidor usando tee
Comando, los registros en vivo se pueden transmitir a la salida estándar y también escribir en un archivo para su posterior análisis.
$ sudo tail -f /var/log/apache2/access.log | grep --line-buffered "HTTP/2.0" | tee -a http2.log
6) Cómo escribir en un archivo privilegiado usando tee
Cuando queremos escribir en un archivo propiedad de root
como folder_of_root.txt
, usaremos sudo
antes del tee
comando como el siguiente ejemplo.
$ sudo echo 'Documents' | sudo tee -a folder_of_root.txt
Nos pedirá la contraseña de root, ingrese la contraseña de root y los cambios se guardarán en folder_of_root.txt
.
7) Cómo usar el comando tee con Python Script
Podemos usar tee
comando con secuencia de comandos de python para almacenar la salida en un archivo y mostrar la salida en la pantalla. Primero, escribiremos una secuencia de comandos de python para calcular el área del círculo como se muestra a continuación y guardarlo en area.py
archivo.
# -*- coding: utf-8 -*-
"""This script calculate the area of circle"""
from math import pi as pi
from math import ceil as ceil
radius = 2.5
area = pi * radius**2
print('The area of circle is', ceil(area))
Cambiaremos el valor del radio y agregaremos la salida a area.txt
.
$ python area.py | tee -a area.txt
Output
('The area of circle is for radius 2', 13.0)
('The area of circle is for radius 2.5', 20.0)
('The area of circle is for radius 3', 29.0)
('The area of circle is for radius 3.5', 39.0)
8) Cómo usar el comando tee con Bash Script
Podemos usar tee
Comando con bash script para almacenar la salida en un archivo y mostrar la salida en la pantalla. Primero, escribiremos bash script para mostrar la salida de estos comandos pwd
, ls
y $HOME
como se muestra a continuación y guárdelo en bash.txt
archivo.
#!/bin/bash
echo "`pwd`";
echo "`ls`";
echo "$HOME";
$ ./bash.txt | tee smart.txt
Output
/media/disk
bash.txt
flask.pdf
smart.py
smart.txt
VirtualBox-5.2-5.2.14_123301_el6-1.x86_64.rpm
/home/smart
El comando tee es una herramienta muy asombrosa, podemos leer la entrada estándar y escribirla tanto en la salida estándar como en uno o más archivos.
Leer también:
- Cómo usar el comando Tr de Linux con ejemplos