Grazie al comando tee, Linux offre la pos­si­bi­li­tà non solo di leggere uno standard input e di scriverlo in output, ma di salvarlo con­tem­po­ra­nea­men­te anche su uno o più file. Questo comando, pertanto, è una soluzione utile per salvare o ar­chi­via­re risultati intermedi o per risalire alla causa di un errore.

Cos’è il comando tee di Linux?

Per capire cos’è il comando tee di Linux e come funziona, basta esa­mi­nar­ne bre­ve­men­te il nome. Questo comando, infatti, ricorda gli splitter a T uti­liz­za­ti negli impianti idraulici e funziona so­stan­zial­men­te nello stesso modo: da un lato legge lo standard input “stdin” (usato ad esempio da una tastiera o da un programma) e scrive quanto letto sullo standard output “stdout”. Oltre a vi­sua­liz­za­re l’output, ad esempio su uno schermo, il comando tee lo scrive con­tem­po­ra­nea­men­te su uno o più file. Pertanto, da un input si generano con­tem­po­ra­nea­men­te due o più output.

A cosa serve il comando tee di Linux?

All’oc­cor­ren­za, il comando di Linux tee consente di salvare i dati letti su un file sempre nuovo. In al­ter­na­ti­va può usare un file pre­e­si­sten­te, il cui contenuto verrà quindi can­cel­la­to e riscritto ogni volta. Il comando tee viene usato prin­ci­pal­men­te per con­ser­va­re i risultati intermedi all’interno di una pipe su Linux. Tali risultati potranno essere quindi mo­di­fi­ca­ti o ana­liz­za­ti alla ricerca di errori. L’ar­chi­via­zio­ne avviene in parallelo all’output senza li­mi­ta­zio­ni tecniche né im­pe­di­men­ti.

Come si usa il comando?

La sintassi di base del comando tee di Linux è sempre uguale ed è:

tee [OPTIONS] [FILE]
bash

È im­por­tan­te spe­ci­fi­ca­re almeno un file (FILE) in cui deve essere salvato l’output.

Un modo semplice per usare questo comando di Linux è in com­bi­na­zio­ne con il comando du (Disc Usage), che serve a mostrare quale parte del disco rigido è occupata. Il comando completo si scrive come segue:

du -h | tee disk_usage.txt
bash

In tal modo vi­sua­liz­ze­re­te lo spazio occupato sul vostro disco esterno. L’opzione “-h” (human readable) traduce l’in­for­ma­zio­ne in un formato com­pren­si­bi­le. Questa non viene scritta solo nello standard output, ma viene inserita e salvata anche nel file di testo disk_usage.txt. Se questo non esiste, verrà creato au­to­ma­ti­ca­men­te.

Come è possibile impedire che il contenuto di un file venga so­vra­scrit­to?

In linea di massima, ogni qualvolta usate il comando tee di Linux spe­ci­fi­can­do il file in cui l’output deve essere salvato, le in­for­ma­zio­ni presenti sul file vengono so­vra­scrit­te. Qualora de­si­de­ria­te mo­di­fi­ca­re questa im­po­sta­zio­ne, vi basterà usare l’opzione di comando -a. Questa farà in modo che i nuovi contenuti si ag­giun­ga­no a quelli esistenti. Ri­pren­den­do l’esempio pre­ce­den­te, il comando si scriverà quindi in questo modo:

du -h | tee -a disk_usage.txt
bash

Come si usa il comando tee per scrivere con­tem­po­ra­nea­men­te su più file?

L’output può essere scritto su più file in modo ab­ba­stan­za semplice. Basterà spe­ci­fi­ca­re ogni singolo file separato da uno spazio, come nell’esempio seguente:

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

Come è possibile inoltrare l’output e tra­sfor­mar­lo in input?

Il comando tee di Linux non consente solo di scrivere l’output pa­ral­le­la­men­te su più file, ma anche di inoltrare l’output e di tra­sfor­mar­lo in input per altri comandi. Il tutto funziona come nell’esempio sot­to­stan­te:

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

In questo esempio non viene solo salvato l’output nel documento terzo_file.txt, ma viene vi­sua­liz­za­to anche il numero di caratteri contenuti nel file.

Come si usa il comando tee di Linux con sudo?

Potete usare anche il comando tee di Linux in com­bi­na­zio­ne con sudo. Questo passaggio può essere van­tag­gio­so o ad­di­rit­tu­ra ne­ces­sa­rio quando si scrivono in­for­ma­zio­ni su un file con permessi root. Se non si usa il comando sudo, verrà vi­sua­liz­za­to un messaggio di errore. Di seguito un esempio su come strut­tu­ra­re questo comando:

echo "Esempio" | sudo tee -a root_documento.txt
bash
N.B

sudo è un comando usato nei sistemi operativi simili a Unix come Linux o macOS per eseguire programmi con permessi avanzati. È utile perché consente di eseguire compiti nor­mal­men­te di com­pe­ten­za dell’admin.

Come ignorare un Interrupt durante l’ese­cu­zio­ne di tee?

Con l’opzione di comando -i avete la pos­si­bi­li­tà di ignorare un Interrupt (in­ter­ru­zio­ne) durante l’ese­cu­zio­ne di un comando tee su Linux. In caso contrario, premendo la com­bi­na­zio­ne di tasti [Ctrl] + [c] compare il segnale Interrupt. L’opzione relativa deve essere inserita di­ret­ta­men­te dopo il comando tee:

command | tee -i file.out
bash
Vai al menu prin­ci­pa­le