Présentation de la commande tee
La commande tee constitue un mécanisme essentiel pour la répartition des flux de données dans les environnements Linux et Unix. Inspirée par la forme en T d'un raccord de tuyauterie, elle effectue une lecture à partir de l'entrée standard et redirige les données simultanément vers la sortie standard, généralement l'écran, ainsi qu vers un ou plusieurs fichiers spécifiés.
Cet outil répond parfaitement au besoin de visualiser une sortie en temps réel tout en en conservant une trace dans un fichier, ce qui le rend indispensable pour l'administration système, le débogage de scripts et la gestion des journaux. Contrairement aux simples redirections avec > ou >>, sa capacité à maintenir l'affichage terminal en est l'avantage majeur.
Syntaxe fondamentale
Pour consulter la documentation officielle, exécutez : man tee
commande | tee [options] fichier1 fichier2 ...
- Elle consomme les données provenant d'un tuyau (pipe) ou de l'entrée standard.
- Elle génère une sortie à la fois sur le terminal et dans les fichiers cibles.
- La spécification de plusieurs fichiers est possible, séparés par des espaces.
Options de la commande
| Option | Option longue | Description |
|---|---|---|
-a |
--append |
Ajoute le contenu à la fin du fichier sans écraser les données existantes. |
-i |
--ignore-interrupts |
Ignore les signaux d'interruption, comme Ctrl+C, pour garantir l'intégrité de l'écriture. |
-p |
--output-error |
Fournit des diagnostics en cas d'erreur lors de l'écriture vers des cibles non standard. |
-u |
- | Désactive la mise en mémoire tampon pour une sortie immédiate. |
--help |
- | Affiche l'aide et quitte le programme. |
--version |
- | Indique la version de la commande et termine l'exécution. |
Exemples d'utilisation courante
1. Affichage terminal et écriture par défaut
ls --color=never | tee listing_fichiers.txt
Cette commande affiche la liste des fichiers dans le terminal et l'écrit en écrasant le contenu de listing_fichiers.txt.
2. Mode ajout pour conserver l'historique
echo "Nouvelle entrée de journal" | tee -a journal_execution.log
Les informations sont ajoutées à la fin du fichier, préservant ainsi les enregistrements précédents.
3. Écriture simultanée dans plusieurs fichiers
dmesg | tee journal_noyau /tmp/sauvegarde_dmesg
Une seule source de données est dirigée vers plusieurs fichiers, ce qui facilite la création de sauvegardes multiples.
4. Gestion des interruptions pour les tâches longues
ping example.com | tee -i resultats_ping.log
L'option -i assure que les données déjà traitées sont intégralement écrites même si l'utilisateur interrompt le processus avec Ctrl+C.
5. Écriture sans mise en mémoire tampon pour la surveillance
tail -f /var/log/syslog | tee -u copie_temps_reel.log
Les données sont synchronisées en temps réel vers le fichier de sauvegarde sans délai de buffering.
6. Modification de fichiers protégés avec sudo
echo "CHEMIN=\$CHEMIN:/opt/bin" | sudo tee -a /etc/environment
Cette technique permet d'écrire dans des fichiers système nécessitant des privilèges élevés, sans avoir à basculer vers l'utilisateur root.
7. Écriture exclusive dans un fichier, sans affichage
ps aux | tee processus.txt > /dev/null
La sortie est redirigée vers le périphérique nul, de sorte que seules les données sont enregistrées dans le fichier, sans encombrer le terminal.
8. Capture des erreurs pour une journalisation complète
make 2>&1 | tee compilation.log
La redirection 2>&1 fusionne les flux de sortie standard et d'erreur, permettant de consigner tous les messages dans le fichier journal.
Application avancée : journalisation intégrale dans un script
#!/bin/bash
# Script de sauvegarde avec journalisation complète
exec 2>&1 # Combinaison des sorties standard et d'erreur
exec > >(tee backup_$(date +%Y%m%d).log) # Redirection de toutes les sorties via tee
echo "$(date) - Début de l'opération de sauvegarde..."
tar -czf /sauvegarde/donnees.tar.gz /chemin/donnees/
echo "$(date) - Sauvegarde terminée. Taille : $(du -h /sauvegarde/donnees.tar.gz | cut -f1)"
Ce script assure que chaque message produit est à la fois affiché et archivé, ce qui simplifie le diagnostic ultérieur des éventuels problèmes.
Codes de sortie de la commande
0: Toutes les cibles d'écriture ont été traitées avec succès.>0: Au moins une écriture a échoué, bien que les autres fichiers pusisent avoir été correctement mis à jour.
Points clés à retenir
- Fonctionnalité centrale : lecture unique, écriture multiple vers l'écran et les fichiers.
- Comportement par défaut : écrasement du contenu cible ; utiliser l'option
-apour l'ajout. - Combinaisons fréquentes :
sudo teepour contournre les restrictions de permissions,2>&1pour capturer les flux d'erreur. - Domaines d'application : administration système, journalisation de scripts, surveillance en temps réel et écriture dans des fichiers protégés.