Comando tee di Linux: come scrivere uno standard output su file
Grazie al comando tee, Linux offre la possibilità non solo di leggere uno standard input e di scriverlo in output, ma di salvarlo contemporaneamente anche su uno o più file. Questo comando, pertanto, è una soluzione utile per salvare o archiviare 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 esaminarne brevemente il nome. Questo comando, infatti, ricorda gli splitter a T utilizzati negli impianti idraulici e funziona sostanzialmente 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 visualizzare l’output, ad esempio su uno schermo, il comando tee lo scrive contemporaneamente su uno o più file. Pertanto, da un input si generano contemporaneamente due o più output.
A cosa serve il comando tee di Linux?
All’occorrenza, il comando di Linux tee consente di salvare i dati letti su un file sempre nuovo. In alternativa può usare un file preesistente, il cui contenuto verrà quindi cancellato e riscritto ogni volta. Il comando tee viene usato principalmente per conservare i risultati intermedi all’interno di una pipe su Linux. Tali risultati potranno essere quindi modificati o analizzati alla ricerca di errori. L’archiviazione avviene in parallelo all’output senza limitazioni tecniche né impedimenti.
Come si usa il comando?
La sintassi di base del comando tee di Linux è sempre uguale ed è:
tee [OPTIONS] [FILE]
bashÈ importante specificare almeno un file (FILE) in cui deve essere salvato l’output.
Un modo semplice per usare questo comando di Linux è in combinazione 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
bashIn tal modo visualizzerete lo spazio occupato sul vostro disco esterno. L’opzione “-h” (human readable) traduce l’informazione in un formato comprensibile. 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 automaticamente.
Come è possibile impedire che il contenuto di un file venga sovrascritto?
In linea di massima, ogni qualvolta usate il comando tee di Linux specificando il file in cui l’output deve essere salvato, le informazioni presenti sul file vengono sovrascritte. Qualora desideriate modificare questa impostazione, vi basterà usare l’opzione di comando -a. Questa farà in modo che i nuovi contenuti si aggiungano a quelli esistenti. Riprendendo l’esempio precedente, il comando si scriverà quindi in questo modo:
du -h | tee -a disk_usage.txt
bashCome si usa il comando tee per scrivere contemporaneamente su più file?
L’output può essere scritto su più file in modo abbastanza semplice. Basterà specificare ogni singolo file separato da uno spazio, come nell’esempio seguente:
du -h | tee disk_usage1.txt disk_usage2.txt disk_usage3.txt
bashCome è possibile inoltrare l’output e trasformarlo in input?
Il comando tee di Linux non consente solo di scrivere l’output parallelamente su più file, ma anche di inoltrare l’output e di trasformarlo in input per altri comandi. Il tutto funziona come nell’esempio sottostante:
ls file* | tee terzo_file.txt | wc -m
bashIn questo esempio non viene solo salvato l’output nel documento terzo_file.txt, ma viene visualizzato 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 combinazione con sudo. Questo passaggio può essere vantaggioso o addirittura necessario quando si scrivono informazioni su un file con permessi root. Se non si usa il comando sudo, verrà visualizzato un messaggio di errore. Di seguito un esempio su come strutturare questo comando:
echo "Esempio" | sudo tee -a root_documento.txt
bashsudo è 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 normalmente di competenza dell’admin.
Come ignorare un Interrupt durante l’esecuzione di tee?
Con l’opzione di comando -i avete la possibilità di ignorare un Interrupt (interruzione) durante l’esecuzione di un comando tee su Linux. In caso contrario, premendo la combinazione di tasti [Ctrl] + [c] compare il segnale Interrupt. L’opzione relativa deve essere inserita direttamente dopo il comando tee:
command | tee -i file.out
bash