← Sommaire SkyLinux

Leçon 68 : tee — Lire depuis l'entrée et écrire partout

La commande tee permet de lire depuis l'entrée standard et d'écrire la sortie simultanément dans un fichier ET dans la sortie standard. C'est l'outil idéal pour "espionner" un pipe tout en sauvegardant le résultat.

1. Comment fonctionne tee ?

Imaginons un té (T) de plomberie : l'eau arrive d'un côté, se divise en deux directions. tee fait pareil avec les données : elles arrivent du pipe, et une copie part vers le fichier pendant que l'autre continue son chemin.

# Schéma de fonctionnement
commande1 | tee fichier.txt | commande2

Le contenu est écrit dans fichier.txt ET passe à commande2.

2. Utilisation de base

2.1 Sauvegarder et voir le résultat

# Sauvegarder la liste des fichiers ET l'afficher
ls -la | tee liste_fichiers.txt

2.2 Écrire dans un fichier sans perdre la redirection

# Écrire dans un fichier ET continuer le pipe
echo "Bonjour le monde" | tee salut.txt | wc -c

Ce comando écrit "Bonjour le monde" dans salut.txt ET le compte avec wc -c.

3. Ajouter à un fichier existant

3.1 Avec l'option -a (append)

Par défaut, tee écrase le fichier. Avec -a, il ajoute à la fin :

# Ajouter au lieu d'écraser
echo "Ligne 1" | tee log.txt
echo "Ligne 2" | tee -a log.txt
cat log.txt

4. Utilisation avec les droits administrateur

4.1 Écrire dans un fichier protégé

tee est très utile quand vous devez écrire dans un fichier root avec sudo :

# Ajouter une ligne à un fichier système
echo "127.0.0.1 monserveur" | sudo tee -a /etc/hosts

Cette technique est plus propre que sudo sh -c 'echo ... >> fichier'.

4.2 Modifier un fichier de configuration

# Ajouter une variable d'environnement
echo "export MON_APPLI=prod" | sudo tee -a /etc/environment

5. tee avec plusieurs fichiers

5.1 Écrire dans plusieurs fichiers

tee peut envoyer le contenu vers plusieurs fichiers simultanément :

# Écrire dans plusieurs fichiers d'un coup
echo "Données de backup" | tee fichier1.txt fichier2.txt fichier3.txt

6. Combinaison avec d'autres commandes

6.1 logger — Consigner dans syslog ET afficher

# Logger un message ET l'afficher
echo "Installation terminée" | tee /dev/tty | logger

6.2 tee avec grep

# Sauvegarder les lignes filtrées
cat logs.txt | tee temp.txt | grep "ERROR"

6.3 tee avec xargs

# Sauvegarder ET traiter
echo "fichier1.txt fichier2.txt" | tr ' ' '\n' | tee liste.txt | xargs wc -l

7. Astuces avancées

7.1 tee vers stderr

# Écrire dans stdout ET stderr
commande 2>&1 | tee /dev/stderr | autre_commande

7.2 tee invisible (sans affichage)

# Écrire uniquement dans le fichier, sans stdout
commande | tee fichier.txt > /dev/null

7.3 tee avec timestamp

# Ajouter la date aux lignes
echo "Événement important" | tee -a journal.txt
date | tee -a journal.txt

8. Cas d'utilisation courants

8.1 Logger l'installation d'un logiciel

# Capturer la sortie ET l'afficher
sudo apt install mon-logiciel 2>&1 | tee install_log.txt

8.2 Sauvegarder un résultat intermédiaire

# Sauvegarder ET continuer le traitement
ps aux | tee processus.txt | grep python

8.3 Créer un fichier depuis un pipe

# Créer un fichier de configuration rapidement
cat <

9. Résumé des options

OptionDescription
-a, --appendAjouter au fichier au lieu d'écraser
-i, --ignore-interruptsIgnorer les signaux d'interruption

10. Exercices pratiques

  1. Créez un fichier liste.txt contenant le résultat de ls -R ~ tout en l'affichant à l'écran.
  2. Utilisez tee -a pour ajouter plusieurs lignes de texte à un même fichier.
  3. Sauvegardez la sortie d'une commande ps filtrée avec grep, puis utilisez tee pour la sauvegarder ET l'afficher.
  4. Créez un script qui utilise tee pour logger les étapes d'une installation dans un fichier.

Conclusion

tee est une commande simple mais puissante. Elle permet de dupliquer un flux de données sans interrompre le pipe, ce qui est idéal pour le débogage, la sauvegarde de résultats intermédiaires, ou l'écriture dans des fichiers protégés. Associé à sudo, il devient un outil indispensable pour administrer un système Linux.