Tee
n'est pas inutile
Peut-être que tu le savais de toute façon ? Si non, continuez à lire ! Ou si vous savez comment cela fonctionne, mais que vous n'êtes pas sûrs pourquoi il existe, passez à la fin pour voir comment il s'intègre dans la philosophie Unix.
Quoi est l'objectif de tee
?
Dans sa forme la plus simple, il prend des données sur l'entrée standard et les écrit sur la sortie standard et dans un (ou plusieurs) fichiers. Il a été comparé à un Té de plomberie dans la façon dont il divise 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, le Page Wikipedia sur tee
est le deuxième exemple :
Pour visualiser et ajouter la sortie d'une commande à un fichier existant :
lint program.c | tee -a program.lint
Cela 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 utilité : escalade des permissions :
Pour permettre l'escalade des permissions :
cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"
Cet exemple montre l'utilisation de tee pour contourner une limitation inhérente à l'outil de gestion des déchets. sudo
commandement. sudo
est incapable d'envoyer 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 à un serveur via ssh, en installant la clé publique de l'utilisateur dans la liste d'autorisation de clés du serveur.
Ou peut-être voulez-vous prendre la sortie d'une commande, l'écrire quelque part et l'utiliser 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 cette même sortie comme entrée d'une autre commande.
La commande suivante prendra une sauvegarde des entrées de la crontab, et passera les entrées de la crontab comme entrée à la commande sed qui fera la substitution. Après la substitution, elle sera ajoutée comme une nouvelle tâche cron.
$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –
(crédit à Exemples d'utilisation de la commande Tee )
Tee
fonctionne avec la philosophie Unix :
Écrire des programmes qui font une seule chose et qui la font bien. Écrivez des programmes qui travaillent ensemble. Écrire des programmes pour gérer des flux de texte, car il s'agit d'une interface universelle.
(Crédit à Les bases de la philosophie Unix )
tee
correspond à tout cela :
- il fait une chose : il crée une copie supplémentaire de l'entrée
- il fonctionne avec d'autres programmes parce qu'il est la colle (ou une pièce de plomberie en "T" si vous préférez) qui permet aux autres programmes de fonctionner ensemble comme dans les exemples ci-dessus.
- il le fait en manipulant un flux de texte donné sur l'entrée standard