Tee
n'est pas inutile
Peut-être que tu le savais quand même? Si non, lisez la suite! Ou si vous savez comment ça marche, mais vous ne savez pas pourquoi, il faut aller à la fin pour voir comment cela s’inscrit dans la philosophie Unix.
Quel est le but de tee
?
Dans sa forme la plus simple, il prend des données sur une entrée standard et les écrit sur une sortie standard et sur un (ou plusieurs) fichier (s). Il a été comparé à un té de plomberie en divisant une entrée en deux sorties (et deux directions).
Exemples
Prenons votre premier exemple:
do_something | tee -a logfile
Cela prend la sortie de do_something
et l'ajoute au fichier journal, tout en l'affichant à l'utilisateur. En fait, la page Wikipediatee
présente le deuxième exemple:
Pour afficher et ajouter le résultat d'une commande à un fichier existant:
lint program.c | tee -a program.lint
Ceci affiche la sortie standard de la commande lint program.c sur l'ordinateur et ajoute en même temps une copie de celle-ci à la fin du fichier program.lint. Si le fichier program.lint n'existe pas, il est créé.
L'exemple suivant a une autre utilisation: escalade des autorisations :
Pour autoriser l'escalade des autorisations:
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Cet exemple montre que tee est utilisé pour contourner une limitation inhérente à la sudo
commande. sudo
est incapable de diriger la sortie standard vers un fichier. En vidant son flux de sortie standard dans /dev/null
, nous supprimons également la sortie en miroir dans la console. La commande ci-dessus donne à l'utilisateur actuel un accès root sur un serveur via ssh, en installant la clé publique de l'utilisateur dans la liste des autorisations de clés du serveur.
Ou peut-être souhaitez-vous prendre le résultat d'une commande, l'écrire quelque part et l'utiliser également comme entrée d'une autre commande?
Vous pouvez également utiliser la commande tee pour stocker la sortie d'une commande dans un fichier et rediriger la même sortie comme entrée vers une autre commande.
La commande suivante effectuera une sauvegarde des entrées de la crontab et transmettra les entrées de la crontab en tant qu'entrée à la commande sed qui effectuera la substitution. Après la substitution, il sera ajouté en tant que nouveau travail cron.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(crédit aux exemples d’utilisation de la commande Tee )
Tee
travaille avec la philosophie Unix:
Ecrivez des programmes qui font une chose et le font bien. Écrire des programmes pour travailler ensemble. Ecrivez des programmes pour gérer les flux de texte, car c'est une interface universelle.
(Crédit aux principes de base de la philosophie Unix )
tee
s'adapte à tous ceux-ci:
- il fait une chose: crée une copie supplémentaire de l'entrée
- cela fonctionne avec d'autres programmes parce que c'est la colle (ou une pièce de plomberie en «T» si vous préférez) qui permet à d'autres programmes de fonctionner ensemble comme dans les exemples ci-dessus
- il le fait en manipulant un flux de texte donné sur une entrée standard