Il comando Linux tee viene utilizzato per il concatenamento e il reindirizzamento delle attività, è possibile reindirizzare l'output e/o gli errori a un file e non verrà mostrato sul terminale. Allo stesso modo, utilizzando il concatenamento, l'output di un comando può essere fornito come input per il secondo comando e successivamente per il terzo comando e così via, ma una volta reindirizzato l'output a un file, non è possibile concatenarlo con altri comandi.
Linux tee può essere utilizzato per ottenere entrambi questi risultati insieme, ovvero memorizzare il risultato in un file mentre si concatena lo stesso output a un altro comando.
In questo tutorial, discuteremo come utilizzare Linux tee con alcuni esempi.
Sintassi del comando Tee
Il comando tee legge sostanzialmente dallo standard input e scrive sullo standard output e sui file. Di seguito è riportata la sintassi del comando:
$ command | tee [OPTION]... [FILE]...
Gli esempi seguenti dovrebbero darci un'idea migliore di come funziona il comando.
1) Come scrivere sullo standard output e su un file
Per scrivere sullo standard output e su un file, usa tee dopo una pipe e specifica il file.
$ sudo ls /home/smart | tee folders_of_smart.txt
Ora possiamo andare su folders_of_smart.txt
e vedere il contenuto del file digitando il comando seguente.
$ sudo nano folders_of_smart.txt
Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
2) Come scrivere su un file e aggiungere l'output
Per aggiungere l'output al file esistente, useremo -a
opzione.
$ sudo echo 'Movies' | tee -a folders_of_smart.txt
Ora possiamo andare su folders_of_smart.txt
e vedere il contenuto del file digitando il comando seguente.
$ sudo nano folders_of_smart.txt
Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
Movies
3) Come scrivere su più file
Per scrivere su più file, dobbiamo solo menzionare i loro nomi nella riga di comando.
$ sudo ping facebook.com | tee output1.txt output2.txt output3.txt
Ora possiamo andare su output1.txt
, output2.txt
e vedere il contenuto del file digitando il comando seguente.
$ 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) Come reindirizzare l'output di un comando a un altro
Possiamo anche trasmettere l'output come input ad altri comandi. Ad esempio, il comando seguente non elencherà tutti i nomi delle cartelle in folders_of_smart.txt
ma elenca tramite grep ^o
comanda che la cartella inizi con la lettera o.
$ sudo ls /home/smart | tee folders_of_smart.txt | grep ^o
output:
output1.txt
output2.txt
output3.txt
output.txt
Un altro esempio, elencheremo /etc
directory e quindi l'output viene archiviato nel file denominato stage1.txt
, Questo output viene filtrato tramite il comando grep per le righe che iniziano con la lettera i, Questo output filtrato viene archiviato nel file stage2.txt
.
Infine, l'output filtrato viene ordinato in modo inverso utilizzando l'ordinamento -r
comando. Questo output finale viene visualizzato sul terminale.
$ 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) Come guardare i file di registro e scrivere su un file
Possiamo analizzare il HTTP2
traffico che attraversa un apache2
server utilizzando tee
comando, i registri in tempo reale possono essere trasmessi in streaming allo standard output e anche scritti in un file per ulteriori analisi in seguito.
$ sudo tail -f /var/log/apache2/access.log | grep --line-buffered "HTTP/2.0" | tee -a http2.log
6) Come scrivere su un file privilegiato usando tee
Quando vogliamo scrivere su un file di proprietà di root
come folder_of_root.txt
, useremo sudo
prima di tee
comando come nell'esempio seguente.
$ sudo echo 'Documents' | sudo tee -a folder_of_root.txt
Ci verrà richiesta la password di root, inserire la password di root e le modifiche verranno salvate in folder_of_root.txt
.
7) Come utilizzare il comando tee con lo script Python
Possiamo usare tee
comando con script python per memorizzare l'output in un file e visualizzare l'output sullo schermo, in primo luogo, scriveremo lo script python per calcolare l'area del cerchio come di seguito e salvarlo in area.py
file.
# -*- 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))
Cambieremo il valore di raggio e aggiungeremo l'output 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) Come utilizzare il comando tee con lo script Bash
Possiamo usare tee
comando con lo script bash per memorizzare l'output in un file e visualizzare l'output sullo schermo, in primo luogo, scriveremo lo script bash per visualizzare l'output di questo comando pwd
, ls
e $HOME
come di seguito e salvalo in bash.txt
file.
#!/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
Il comando tee è uno strumento davvero sorprendente, possiamo leggere lo standard input e scriverlo sia nello standard output che in uno o più file.
Leggi anche:
- Come utilizzare il comando Linux Tr con esempi