Guide pratique de la commande tee sous Linux

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

  1. Fonctionnalité centrale : lecture unique, écriture multiple vers l'écran et les fichiers.
  2. Comportement par défaut : écrasement du contenu cible ; utiliser l'option -a pour l'ajout.
  3. Combinaisons fréquentes : sudo tee pour contournre les restrictions de permissions, 2>&1 pour capturer les flux d'erreur.
  4. Domaines d'application : administration système, journalisation de scripts, surveillance en temps réel et écriture dans des fichiers protégés.

Étiquettes: Linux TEE Shell bash scripting

Publié le 16 juillet à 03h21