625 tutoriels en ligne

Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Search Console

tee : la commande pour enregistrer les sorties du terminal

Temps de lecture estimé : 7 minutes
Accueil Terminal tee : la commande pour enregistrer les sorties du terminal

La commande tee vous permet de lancer une commande complexe dans votre terminal, de voir défiler des dizaines de lignes de résultats cruciaux et de les sauvegarder dans un fichier. Elle agit comme un embranchement sur une canalisation : elle laisse l’eau (vos données) couler vers sa destination habituelle tout en en détournant une partie vers un réservoir (votre fichier).

  • Apprenez lancer une commande depuis le terminal et sauvegarder sa sortie sur fichier grâce à tee.
  • Gagnez en sérénité lors de vos tâches longues grâce à une méthode de surveillance visuelle couplée à un archivage automatique sans faille.
  • Optimisez votre productivité en automatisant la copie de vos données vers plusieurs destinations simultanément.

Comprendre le fonctionnement de la commande tee  depuis le terminal est une étape essentielle. Dans ce tutoriel, nous allons décomposer ensemble son fonctionnement, explorer ses options et voir comment elle peut transformer votre manière de travailler au quotidien, que vous soyez un curieux du dimanche ou un futur administrateur système.

Qu’est-ce que la commande tee ?

Pour comprendre l’utilité de cet outil, il faut d’abord saisir le concept de flux de données dans un terminal. En informatique, une commande produit généralement une sortie standard que l’on appelle le STDOUT. Par défaut, cette sortie s’affiche sur votre écran. Si vous utilisez une redirection classique avec le symbole de la flèche, vous envoyez le résultat directement dans un fichier, mais votre écran devient désespérément vide. Vous ne savez plus ce qui se passe pendant que la machine travaille.

C’est ici que tee entre en scène de façon magistrale. Son nom vient de la forme de la lettre T, qui évoque un raccord de plomberie. Imaginez un tuyau qui arrive par le bas et qui se divise en deux branches horizontales. La commande reçoit des données en entrée, les affiche sur votre terminal pour que vous puissiez suivre l’évolution en direct, et en écrit simultanément une copie dans un ou plusieurs fichiers. C’est le don d’ubiquité appliqué à la ligne de commande.

L’avantage majeur réside dans la surveillance. Si vous effectuez une mise à jour système ou une installation logicielle qui dure dix minutes, vous voulez voir les messages d’erreur éventuels en temps réel. En même temps, conserver une trace écrite (un log) est indispensable pour analyser ce qui s’est passé plus tard. Sans cet outil, vous seriez obligé de choisir entre voir et archiver.

La syntaxe de base pour bien démarrer

Abordons maintenant la structure de la commande. Comme pour la plupart des outils sous Linux ou macOS, la syntaxe est pensée pour être concise. La forme la plus simple s’écrit en utilisant un « pipe », ce petit trait vertical accessible souvent via la touche Alt Gr et 6 sur votre clavier. Le pipe sert à passer le relais entre deux commandes.

La structure type ressemble à ceci :

commande_initiale | tee nom_du_fichier.txt.

Prenons un exemple très simple que vous pouvez tester immédiatement. Si vous tapez la commande qui liste les fichiers de votre dossier, à savoir la commande ls, et que vous voulez garder une trace de cette liste dans un document nommé inventaire.txt, vous écrirez simplement :

ls | tee inventaire.txt. 

En validant, vous verrez la liste de vos dossiers s’afficher normalement sous vos yeux, mais si vous ouvrez ensuite le fichier inventaire.txt, vous constaterez qu’il contient exactement la même chose.

Il est important de noter que par défaut, si le fichier inventaire.txt existait déjà, la commande tee va l’écraser impitoyablement pour le remplacer par le nouveau contenu.

C’est un comportement standard qu’il faut garder en tête pour éviter de perdre des notes importantes. Heureusement, nous verrons un peu plus loin qu’il existe un moyen très simple d’ajouter du texte à la suite d’un fichier existant plutôt que de tout effacer.

Pour ceux qui débutent avec le terminal :

Pourquoi utiliser tee plutôt qu’une simple redirection ?

Vous pourriez me rétorquer qu’une simple flèche vers la droite suffit largement pour créer un fichier. C’est vrai, mais la différence est fondamentale en termes d’expérience utilisateur.

La redirection classique est une redirection exclusive. Elle coupe le lien avec votre écran. Dans un contexte professionnel, c’est un peu comme si vous demandiez à un collègue de rédiger un rapport mais qu’il s’enfermait dans un bureau sans fenêtre : vous ne saurez s’il a réussi qu’une fois qu’il sortira, peut-être une heure plus tard.

L’utilisation de tee dans votre terminal apporte une visibilité totale. Imaginez que vous fassiez une sauvegarde de votre base de données. En utilisant cet outil, vous voyez les messages de succès ou d’avertissement défiler, ce qui vous rassure sur le bon déroulement de l’opération, tout en sachant que chaque ligne est gravée dans votre fichier de journalisation.

Pour bien comprendre l’utilité de tee, prenez l’exemple d’un administrateur système qui lance un script de nettoyage sur un serveur distant en utilisant une redirection classique vers un fichier log. Pensant que tout se passe bien… À son retour, le fichier log fait plusieurs gigaoctets car une erreur s’est produite en boucle, saturant tout l’espace disque du serveur. S’il avait utilisé tee, il aurait vu immédiatement les messages d’erreur s’emballer sur son écran et aurait pu stopper le massacre en deux secondes. C’est parfois la différence entre une petite correction et une après-midi de crise.

L’astuce du mode ajout pour préserver vos données

Comme nous l’avons évoqué, le comportement de base consiste à écraser le contenu existant. C’est souvent ce que l’on veut pour un rapport, mais c’est catastrophique si vous tenez un journal de bord de vos activités sur plusieurs jours. Pour remédier à cela, il existe une option indispensable : l’option -a, comme « append » (ajouter en anglais).

La syntaxe devient alors :

commande | tee -a journal.txt.

Grâce à cette petite lettre supplémentaire, la commande va d’abord lire le fichier existant, se placer tout à la fin, et commencer à écrire les nouvelles données à la suite du texte déjà présent.

C’est l’outil parfait pour créer ce qu’on appelle des « logs » chronologiques. Vous pouvez ainsi lancer plusieurs commandes différentes tout au long de votre session et retrouver l’historique complet de vos résultats dans un seul et même document, bien classé.

Écrire dans plusieurs fichiers simultanément

L’une des fonctionnalités les plus méconnues et pourtant les plus puissantes de cet outil est sa capacité à cloner la sortie vers plusieurs destinations à la fois. Si vous travaillez sur un projet collaboratif, vous aurez peut-être besoin de garder une copie locale de vos résultats, mais aussi d’envoyer ces mêmes résultats sur un dossier partagé avec votre équipe.

Au lieu de faire plusieurs copier-coller ou de relancer la commande, vous pouvez simplement lister les fichiers les uns après les autres. Par exemple :

commande | tee fichier1.txt fichier2.txt fichier3.txt. 

Votre terminal affichera toujours le résultat une seule fois, mais les trois fichiers seront créés ou mis à jour instantanément avec le même contenu. C’est un gain de temps phénoménal et cela garantit que toutes vos copies sont strictement identiques, éliminant ainsi le risque d’erreur humaine.

Le super-pouvoir de tee avec les privilèges sudo

S’il y a bien une situation où les débutants s’arrachent les cheveux sur le terminal, c’est lorsqu’ils essaient de modifier un fichier système. Imaginez que vous deviez ajouter une ligne de configuration dans un fichier protégé, situé dans un dossier racine.

Naturellement, vous pourriez tenter une redirection classique précédée de la commande sudo, comme ceci : 

sudo echo "ma_config" > /etc/fichier_protege.conf

Et là, c’est le drame : le système vous renvoie une erreur de type « Permission denied ».

Pourquoi ? Parce que si la commande echo est bien lancée avec les droits de l’administrateur, la redirection (le symbole >) est gérée par votre propre session utilisateur, qui elle, n’a pas le droit d’écrire dans ce dossier sensible. C’est un piège classique de la ligne de commande.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

C’est là que notre outil du jour brille par son ingéniosité. En utilisant la syntaxe suivante : 

echo "ma_config" | sudo tee /etc/fichier_protege.conf

Vous contournez le problème. Ici, c’est la commande tee elle-même qui reçoit les privilèges élevés. Elle reçoit le texte de la part d’echo et, grâce au sudo placé juste devant elle, elle a l’autorisation légitime d’ouvrir le fichier protégé et d’y inscrire les données.

C’est une méthode beaucoup plus propre et sécurisée que d’ouvrir un éditeur de texte complet juste pour une ligne.

Ignorer les interruptions pour un travail serein

Parfois, vous lancez une tâche de fond qui va durer des heures. Dans le monde informatique, il arrive que des signaux d’interruption soient envoyés (comme un utilisateur qui appuie par erreur sur Ctrl+C). Si vous ne voulez pas que votre processus d’écriture soit stoppé net au milieu de sa tâche, l’outil dispose d’une option robuste : -i (pour ignore interrupts).

En tapant :

commande | tee -i fichier.txt

Vous demandez au programme de continuer son travail d’écriture même si un signal d’interruption est détecté. C’est une sécurité supplémentaire pour s’assurer que vos précieux fichiers de log ne soient pas corrompus ou tronqués par une fausse manipulation. C’est un peu comme mettre une ceinture de sécurité supplémentaire lors d’un long trajet sur l’autoroute du code.

Combiner tee avec d’autres outils : la puissance du pipeline

Le véritable génie du terminal réside dans la combinaison des forces. La commande tee n’est pas une île déserte ; elle s’intègre parfaitement dans des chaînes de traitement complexes. Voyons un cas concret : vous voulez chercher tous les fichiers qui contiennent le mot « erreur » dans un dossier, afficher les résultats, mais aussi compter combien il y en a et sauvegarder ce compte.

Vous pourriez construire une ligne comme celle-ci : 

grep -r "erreur" ./logs | tee -a rapport_erreurs.txt | wc -l

Décomposons ensemble cette étape :

  1. La première partie cherche le mot dans vos dossiers.
  2. Le premier pipe envoie le résultat à tee.
  3. Ce dernier affiche le contenu sur la sortie standard tout en l’écrivant dans « rapport_erreurs.txt ».
  4. Le second pipe prend ce que tee a affiché et l’envoie à la commande wc -l, qui va compter les lignes.

Au final, vous voyez sur votre écran le nombre total d’erreurs, mais votre fichier contient le détail complet de ces erreurs. C’est une efficacité chirurgicale que peu d’outils graphiques peuvent égaler avec autant de simplicité.

La gestion des erreurs : ne rien laisser passer

Il existe un petit secret que les experts utilisent souvent. Par défaut, la commande tee ne capture que la sortie standard (le succès). Si votre commande initiale échoue, les messages d’erreur (appelés STDERR) s’afficheront sur l’écran mais ne seront pas enregistrés dans votre fichier. Pour un guide complet, il est crucial de savoir comment capturer l’intégralité du flux.

Pour ce faire, on utilise une redirection spéciale avant le pipe : 2>&1. Cela signifie « renvoie les erreurs vers le flux normal ». Votre commande ressemblera alors à : 

ma_commande 2>&1 | tee journal_complet.txt

Avec cette astuce, vous avez la certitude que tout ce qui s’est affiché sur votre terminal, que ce soit une réussite ou un échec cuisant, est précieusement conservé dans votre archive.

Récapitulatif des commandes tee

CommandeUtilisationExemple
tee fichier.txtAffiche la sortie et l’écrit dans un fichierls | tee liste.txt
tee -a fichier.txtAjoute la sortie à un fichier existantdate | tee -a log.txt
tee fichier1 fichier2Écrit dans plusieurs fichiersls | tee a.txt b.txt
commande | tee fichier.txtDuplique la sortie standardps aux | tee process.txt
tee >(commande)Redirige la sortie vers une autre commandeecho test | tee >(wc -c)
sudo commande | tee fichierÉcrit dans un fichier protégéecho test | sudo tee /etc/test.conf
tee /dev/ttyForce l’affichage dans le terminalmake | tee /dev/tty
tee /dev/nullIgnore l’écriture dans un fichierls | tee /dev/null
tee fichier.log > /dev/nullÉcrit sans afficher à l’écrancommande | tee log.txt > /dev/null
tee -i fichier.txtIgnore les interruptionslongue_cmd | tee -i log.txt
tee --helpAffiche l’aidetee --help
tee --versionAffiche la versiontee --version

Les 5 questions les plus fréquentes sur la commande tee

À quoi sert exactement la commande tee ?

La commande tee permet de dupliquer la sortie d’une commande :
elle l’affiche dans le terminal tout en l’écrivant dans un ou plusieurs fichiers.
C’est idéal pour garder une trace (log) sans perdre l’affichage en direct.

ls | tee fichiers.txt

Quelle est la différence entre > et tee ?

  • > redirige la sortie uniquement vers un fichier
  • tee écrit dans le fichier ET dans le terminal

ls > fichiers.txt # pas d'affichage ls | tee fichiers.txt # affichage + fichier

tee est donc bien plus pratique pour le debug et l’apprentissage.

Pourquoi sudo commande > fichier ne fonctionne pas ?

Parce que la redirection > est gérée avant sudo.
Le fichier est donc écrit sans les droits administrateur.
La solution correcte :

commande | sudo tee fichier

C’est un cas d’usage classique de tee.

Comment ajouter du contenu sans écraser le fichier ?

Il faut utiliser l’option -a (append) :

date | tee -a log.txt

Sans -a, le fichier est écrasé à chaque fois.

Peut-on écrire dans plusieurs fichiers en même temps ?

Oui, et c’est une des forces de tee :

ls | tee a.txt b.txt c.txt

👉 La sortie est :

  • affichée dans le terminal
  • copiée dans plusieurs fichiers simultanément

Tee, un pas de géant vers l’autonomie

Apprendre à utiliser la commande tee dans votre terminal, c’est un peu comme passer de la simple lecture à l’écriture active. Vous ne vous contentez plus de subir les informations qui défilent sur votre écran ; vous devenez le chef d’orchestre de vos données. En maîtrisant cet outil, vous gagnez en visibilité, en sécurité et surtout en sérénité lors de vos sessions de travail.

N’oubliez jamais que la console n’est pas un ennemi à dompter, mais un allié à apprivoiser. Chaque petite commande comme celle-ci est une brique supplémentaire dans votre édifice de compétences numériques. Prenez le temps d’expérimenter, faites des erreurs, testez les options -a ou -i, et vous verrez que très vite, vous ne pourrez plus vous passer de ce fameux « raccord en T » qui rend la gestion des fichiers si fluide.

Le voyage dans le monde Linux, Unix et macOS est vaste, mais avec des outils aussi polyvalents, vous êtes désormais armé pour affronter des configurations de plus en plus ambitieuses. Bonne exploration et que vos flux de données soient toujours bien dirigés !