Il comando “tee” è uno dei comandi di base che si dovrebbe trovare in qualsiasi sistema, ma non è così popolare il suo uso, questo comando legge lo standard input e lo scrive sia su standard output e su uno o più file, duplicando efficacemente i dati in ingresso. E’ principalmente utilizzato in combinazione con pipe e filtri. Il comando prende il nome dal tubo a T utilizzato nelle tubature
In breve, se si desidera reindirizzare la STDOUT di ogni comando così come stamparlo sullo schermo, tee è lo strumento giusto da utilizzare, vediamo qyalche esempio pratico di questo comando.
Uso Base
L’uso di base del T è:
tee [ -a ] [ -i ] [ File ... ] |
Le due opzioni di Tee hanno questo scopo:
-a Accoda l’output alla fine del file invece di scrivere su di esso.
-i Ignora gli interrupt.
Quindi un uso base potrebbe essere:
./program | tee logfile |
Il comando eseguirà ‘program’. Tutto l’output verrà reindirizzato a ‘logfile’ mentre contemporaneamente è anche possibile visualizzarlo su stdout.
1) Utilizzare tee per elaborare un pipe con due o più processi
echo “tee can split a pipe in two”|tee >(rev) >(tr ‘ ‘ ‘_’) |
L’output di questo comando è:
$ echo "tee can split a pipe in two"|tee >(rev) >(tr ' ' '_') tee can split a pipe in two $ owt ni epip a tilps nac eet tee_can_split_a_pipe_in_two |
Tee può essere usato per dividere un pipe in più flussi per lavorare con uno o più processi. È possibile aggiungere più “>()” per divertirsi ancora di più.
2) Salvare un file come root con il vostro utente normale
A volte si inizia a modificare un file senza accorgersi che non è possibile salvarlo per problemi di autorizzazioni, tee può facilmente aiutarci in questo caso, ad esempio:
$ vim /etc/passwd [:w !sudo tee %] |
Questo comando dato in vim significa:
:w Salva il file
!sudo chiama il comando sudo
tee redirige l’output di vim
% il file corrente
Dopo aver dato questo comando avrete salvato con successo il file ed è possibile uscire tranquillamente dall’editor.
3) Duplicare diverse unità contemporaneamente
dd if=/dev/sda | tee >(dd of=/dev/sdb) | dd of=/dev/sdc |
Se avete da fare più immagini disco, è possibile avviare un qualsiasi LiveCD e utilizzare una macchina predisposta a questo scopo. Le unità saranno scritte in parallelo.
Per migliorare l’efficienza, specificare una dimensione blocco più grande con:
dd if=/dev/sda bs=64k | tee >(dd of=/dev/sdb bs=64k) | dd of=/dev/sdc bs=64k |
Per fare più immagini dell’unità, inserire argomenti aggiuntivi a tee come in questo esempio:
dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | dd of=/dev/sde |
5) Eseguire un comando su un gruppo di nodi in parallelo tramite ssh
Ci sono un sacco di strumenti e utilità per dare lo stesso comando su più nodi, un modo davvero semplice è questo:
echo “uptime” | tee >(ssh host1) >(ssh host2) >(ssh host3) |
6) Semplice reindirizzamento del terminale con script e tee
Usando il comando script?lang=itè possibile
mostrare i comandi ed il loro output ad un altro utente che è connesso a un altro terminale, per esempio pts/3
script /dev/null | tee /dev/pts/3 |
Popular Posts:
- None Found