Jun 162014
 

Tee

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

echotee 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:

echouptime| 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:

flattr this!

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>