Quando si eseguono comandi di base sul terminale, l'output viene solitamente stampato sul terminale, ovvero standard out. Ma cosa accadrebbe se potessi anche salvare l'output in un file e stamparlo come standard? Questo è ciò che fa il comando tee. Il comando Linux tee legge da stdin ( standard input ) e quindi scrive su stdout ( standard output ) e su uno o più file.
Sintassi di base del comando tee
Il comando tee ha la seguente sintassi.
comando $ | tee [ opzioni ] file/i
Esaminiamo ora alcuni esempi di utilizzo del comando tee.
Uso di base del comando tee
Supponiamo di voler stampare la memoria e scambiare l'utilizzo utilizzando free comando e salva l'output in un file chiamato memory_usage.txt . Il comando tee verrebbe invocato come segue.
$ free -h | tee memory_usage.txt
Il comando tee legge dal comando, salva l'output in memory_usage.txt file, quindi lo stampa su standard out.
Per confermare che l'output è stato salvato in memory_usage.txt file esegui il comando cat come mostrato.
$ cat memory_usage.txt
Scrivi l'output su più file
Inoltre, puoi salvare l'output su più file come mostrato
comando $ | tee [ opzioni ] file1 file2 …
Nel comando seguente, la stringa "Hey, Welcome to Linux" viene salvato nei due file di testo:file1.txt e file2.txt
$ echo Hey, Welcome to Linux | tee file1.txt file2.txt
Aggiungi contenuto a un file
Di solito, il comando tee sovrascrive un file e questo non è sempre auspicabile in quanto può cancellare i dati esistenti che sono cruciali. Per fortuna, puoi usare -a opzione per aggiungere testo a un file. Proviamolo.
Per prima cosa, scriveremo l'output del tempo di attività comando al stats.txt file come mostrato.
$ tempo di attività | tee stats.txt
Usa il gatto comando per verificarlo.
$ cat stats.txt
Successivamente, aggiungeremo l'output di free -h comando che stampa la nostra memoria e scambia l'utilizzo nel file.
$ free -h | tee -a stats.txt
Ancora una volta, verifica i contenuti di stats.txt file. Questa volta, il file conterrà l'output dei due comandi come indicato nello screenshot qui sotto. Questo perché abbiamo aggiunto l'output di free -h comando al stats.txt file e quindi il testo esistente non è stato influenzato.
Sopprimi l'output del comando tee
Se non desideri avere l'output del tee comando stampato su standard out, puoi reindirizzarlo a /dev/null che è un dispositivo speciale che scarta le informazioni viene alimentato ad esso.
Prendi l'esempio seguente in cui stiamo stampando l'output di df -Th comando al file di testo ma sopprimendo l'output sul terminale.
$ df -Th | tee disk_usage.txt >/dev/null
Lascia che il comando tee ignori gli interrupt
A volte, potresti voler interrompere un comando che è continuamente in esecuzione. Quando ciò accade, potresti considerare di far uscire il comando tee con grazia anche dopo l'interruzione del programma. Per farlo, usa -i o –ignora-interruzioni opzione fornita nella sintassi mostrata.
comando $ | tee -i nomefile
Il comando ping seguente invia continuamente richieste ping al DNS di Google (8.8.8.8). Abbiamo interrotto il comando dopo 4 richieste di ping successive. Per la t-shirt comando per uscire con grazia, invocare -i opzione.
$ ping 8.8.8.8 | tee -i ping_stats.txt
Senza -i opzione, l'output e il riepilogo delle statistiche non verranno stampati.
Usa il comando tee con sudo
Quando si modificano i file di proprietà dell'utente root o di un utente di accesso diverso, il semplice utilizzo del comando tee senza invocare il comando sudo genererà un errore.
Nell'esempio seguente, stiamo creando un nuovo repository chiamato anydesk-stable.list per l'applicazione AnyDesk in /etc/apt/sources.list.d percorso che è una riserva per l'utente root.
$ echo "deb http://deb.anydesk.com/ all main" | tee /etc/apt/sources.list.d/anydesk-stable.list
Come previsto, abbiamo riscontrato un errore "permessi negati" perché non abbiamo i permessi per creare o modificare un file in quel percorso.
La soluzione è precedere tee con il comando sudo come mostrato.
$ echo "deb http://deb.anydesk.com/ all main" | sudo tee /etc/apt/sources.list.d/anydesk-stable.list
In questa occasione, il comando ha successo dopo aver posizionato sudo prima di tee.
Richiedi aiuto con il comando tee
Per ulteriori opzioni di comando e assistenza nell'utilizzo del comando tee, esegui il comando seguente.
$ tee --help
Inoltre, esplora le pagine man come mostrato
$ man tee
Per verificare la versione, esegui:
$ tee --version
Riepilogo
Tutto questo riguarda il comando tee di Linux. In particolare, il comando legge da standard in ( stdin ) e successivamente scrive su standard out ( stdout ) e file.