Tee
non è inutile
Forse lo sapevi comunque? In caso contrario, continua a leggere! O se sai come funziona, ma non sei sicuro del motivo per cui esiste, salta alla fine per vedere come si adatta alla filosofia Unix.
Qual è lo scopo di tee
?
Nella sua forma più semplice, prende i dati sull'input standard e li scrive sull'output standard e su uno (o più) file. È stato paragonato a un raccordo a T idraulico nel modo in cui divide un ingresso in due uscite (e due direzioni).
Esempi
Facciamo il tuo primo esempio:
do_something | tee -a logfile
Questo prende l'output di do_something
e lo aggiunge al file di log, mostrandolo allo stesso tempo all'utente. In effetti, la pagina di Wikipedia sutee
ha questo come secondo esempio:
Per visualizzare e aggiungere l'output di un comando a un file esistente:
lint program.c | tee -a program.lint
Questo visualizza l'output standard del comando lint program.c sul computer e allo stesso tempo ne aggiunge una copia alla fine del file program.lint. Se il file program.lint non esiste, viene creato.
Il prossimo esempio ha un altro uso: escalation delle autorizzazioni :
Per consentire l'escalation delle autorizzazioni:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Questo esempio mostra il tee utilizzato per bypassare una limitazione intrinseca nel sudo
comando. sudo
non è in grado di reindirizzare l'output standard in un file. Scaricando il suo flusso standard in /dev/null
, eliminiamo anche l'output speculare nella console. Il comando sopra fornisce all'utente root l'accesso corrente a un server tramite ssh, installando la chiave pubblica dell'utente nell'elenco di autorizzazioni della chiave del server.
O forse vuoi prendere l'output di un comando, scriverlo da qualche parte e anche usarlo come input per un altro comando?
È inoltre possibile utilizzare il comando tee per memorizzare l'output di un comando su un file e reindirizzare lo stesso output di un input su un altro comando.
Il comando seguente eseguirà un backup delle voci crontab e passerà le voci crontab come input per il comando sed che effettuerà la sostituzione. Dopo la sostituzione, verrà aggiunto come nuovo cron job.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(credito per esempi di utilizzo del comando Tee )
Tee
funziona con la filosofia Unix:
Scrivi programmi che fanno una cosa e la fanno bene. Scrivi programmi per lavorare insieme. Scrivi programmi per gestire flussi di testo, perché questa è un'interfaccia universale.
(Ringraziamenti di base della filosofia Unix )
tee
si adatta a tutti questi:
- fa una cosa: crea una copia aggiuntiva di input
- funziona con altri programmi perché è la colla (o un pezzo idraulico a "T" se preferisci) che consente ad altri programmi di lavorare insieme come negli esempi sopra
- lo fa manipolando un flusso di testo fornito sull'input standard