La commande Linux Tee est un outil de ligne de commande, il lit à partir de l'entrée standard et écrit le résultat dans la sortie standard et dans les fichiers en même temps. En d'autres termes, nous pouvons dire que la commande tee sous Linux est utilisée pour faire d'une pierre deux coups :lire à partir de l'entrée standard et imprimer le résultat sur un fichier et sur la sortie standard en même temps. Qu'entendons-nous par là? Dans ce guide, nous éclairons davantage la commande Linux tee et utilisons quelques exemples pour démontrer son utilisation.
Syntaxe de la commande Tee
La syntaxe de la commande tee est assez simple et prend le format suivant :
$ tee OPTIONS nom du fichier
Voici quelques-unes des options que vous pouvez utiliser avec la commande tee :
Dans la syntaxe de la commande tee, filename fait référence à un ou plusieurs fichiers.
Dans cet esprit, examinons quelques exemples d'utilisation de la commande.
Exemple 1) Utilisation de base de la commande tee
Comme décrit précédemment, la fonction principale de la commande tee est d'afficher la sortie d'une commande (stdout) et de l'enregistrer dans un fichier. Dans l'exemple ci-dessous, la commande que nous inspectons les périphériques de bloc dans notre système et transmet les résultats à la commande tee qui affiche la sortie sur le terminal tout en l'enregistrant simultanément dans un nouveau fichier appelé block_devices.txt
$ lsblk | tee block_devices.txt
N'hésitez pas à examiner le contenu du fichier block_devices.txt à l'aide de la commande cat comme indiqué :
$ cat block_devices.txt
Exemple 2) Enregistrer la sortie de la commande dans plusieurs fichiers à l'aide de tee
De plus, vous pouvez écrire la sortie d'une commande dans plusieurs fichiers séparés par des espaces, comme indiqué dans la syntaxe ci-dessous.
$ commande | tee fichier1 fichier2 fichier3 . . .
Dans l'exemple suivant, nous avons invoqué la commande hostnamectl pour imprimer le nom d'hôte de notre système entre autres détails et enregistrer la sortie standard dans deux fichiers file1.txt et file2.txt
$ hostnamectl | tee fichier1.txt fichier2.txt
Encore une fois, vous pouvez confirmer l'existence de la sortie dans les deux fichiers à l'aide de la commande cat comme indiqué :
$ cat file1.txt$ cat file2.txt
Exemple 3) Supprimer la sortie de la commande tee
Si vous souhaitez masquer ou empêcher la commande tee d'imprimer la sortie à l'écran, redirigez la sortie vers /dev/null comme indiqué :
$ commande | fichier tee> /dev/null
Par exemple,
$ df -Th | tee file4.txt> /dev/null
Exemple 4) Ajouter la sortie à un fichier avec la commande tee
Par défaut, la commande tee écrase le contenu d'un fichier. Pour ajouter la sortie et empêcher l'effacement du contenu actuel, utilisez les options -a ou -append.
$ commande | tee -un fichier
Dans la deuxième commande, comme indiqué, nous avons ajouté la sortie de la commande date à file1.txt qui contient déjà les informations sur les périphériques USB du système.
$ date | tee -a fichier1.txt
Exemple 5) Utiliser tee avec la commande sudo
Supposons qu'en tant qu'utilisateur sudo, vous souhaitiez écrire sur un fichier appartenant à l'utilisateur root. Naturellement, toute opération élevée nécessitera que vous invoquiez l'utilisateur sudo avant la commande.
Pour ce faire, préfixez simplement la commande tee avec sudo comme indiqué ci-dessous.
$ echo "10.200.50.20 db-01" | sudo tee -a /etc/hosts/
Ainsi, tee reçoit la sortie de la commande echo sur la gauche et l'élève à l'aide de la commande sudo qui ajoute finalement la sortie au fichier.
Exemple 6) Rediriger la sortie d'une commande vers une autre à l'aide de la commande tee
En utilisant la commande tee, nous pouvons facilement rediriger la sortie d'une commande vers une autre commande. Ici, la sortie de la première commande servira d'entrée pour la deuxième commande. L'exemple est illustré ci-dessous :
$ grep 'racine' /etc/passwd | tee /tmp/passwd.tmp | wc -l2$ cat /tmp/passwd.tmproot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin$
Exemple 7) Enregistrer les modifications dans un fichier dans l'éditeur vi avec la commande tee
Supposons que vous travaillez en tant qu'utilisateur non root et que vous apportez des modifications au fichier appartenant à root et que vous oubliez de mettre sudo devant la commande et que vous souhaitez maintenant enregistrer les modifications, l'exemple est illustré ci-dessous :
$ vi /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4192.168.1.60 mail.linuxtechi.com192.168.1.50 ns.linuxtechi.com192.168.1.40 pxe.linuxtechi.comLors de l'enregistrement des modifications apportées au fichier, vous recevrez un message en lecture seule,
Maintenant, pour enregistrer les modifications apportées au fichier /etc/hosts dans l'éditeur vi, exécutez
:w !sudo tee %
Il vous demandera d'entrer le mot de passe de l'utilisateur, si l'utilisateur dispose des droits sudo, les modifications seront enregistrées.
Exemple 8) Ignorer le signal d'interruption lors de l'utilisation de la commande tee
L'utilisation de l'option "-i" dans la commande tee peut ignorer le signal d'interruption (CTRL-C), l'exemple est illustré ci-dessous :
$ ping -c 5 linuxtechi.com | tee -i /tmp/pingtest.tmp
Exemple 9) utilisation de la commande tee dans un script shell
La commande Tee est également fréquemment utilisée dans les scripts shell, l'un des exemples courants est répertorié ci-dessous :
$ vi basic-script.sh#!/bin/bashLOGFILE=/tmp/basic-logs-$(date +%d%m%Y)FLAVOR=$(cat /etc/*-release | grep -w 'NAME=' | cut -d"=" -f2 | awk '{print $1}'| sed 's/"//g')if [ $FLAVOR ==CentOS ];then dmesg | grep -i 'error' | tee -a $LOGFILE grep -i 'installé' /var/log/dnf.log | tee -a $LOGFILEelse echo 'ne rien faire'fi
Comme nous pouvons le voir dans le script shell Linux ci-dessus, nous utilisons la commande tee pour ajouter les sorties de deux commandes à un fichier journal uniquement si le système d'exploitation est CentOS.
Conclusion
Ceci conclut le sujet d'aujourd'hui. N'hésitez pas à donner votre avis. Vos commentaires sont les bienvenus. Dans ce guide, nous avons couvert la commande Linux tee.