Introduction
La commande tee sous Linux est un outil puissant qui vous permet d'afficher la sortie d'une commande dans le terminal tout en la sauvegardant simultanément dans un fichier. Cette fonctionnalité est particulièrement utile pour les administrateurs système et les développeurs qui ont besoin à la fois d'inspecter la sortie en temps réel et de la conserver pour une analyse ultérieure.
Ce labo (LabEx) vous présentera les bases de la multiplexation de sortie à l'aide de la commande tee. Vous apprendrez à afficher la sortie et à la sauvegarder simultanément, à rediriger les erreurs standard et à ajouter la sortie à des fichiers existants. Ces compétences sont essentielles pour une gestion efficace des journaux (logs), le débogage et la surveillance des systèmes dans les environnements Linux.
Comprendre les bases de la commande tee
La commande tee sous Linux tire son nom de la pièce de tuyauterie en forme de T, qui divise le flux d'eau en deux directions. De même, la commande tee divise la sortie d'une commande en deux directions : vers le terminal et vers un fichier.
Commençons par nous rendre dans notre répertoire de travail :
cd /home/labex/project
Création d'un fichier de test
Tout d'abord, créons un simple fichier texte que nous pourrons utiliser pour nos expériences :
echo "Hello, World" > hello.txt
Cette commande crée un fichier nommé hello.txt contenant le texte "Hello, World".
Utilisation de la commande tee
Maintenant, utilisons la commande tee pour afficher le contenu de hello.txt dans le terminal tout en le copiant dans un autre fichier :
cat hello.txt | tee copy.txt
Vous devriez voir la sortie suivante dans votre terminal :
Hello, World
La partie cat hello.txt lit le contenu du fichier hello.txt. Le symbole de pipe | prend cette sortie et l'envoie à la commande tee. La commande tee affiche ensuite le texte dans le terminal et l'écrit simultanément dans le fichier copy.txt.
Vérifions que le contenu a bien été copié dans copy.txt :
cat copy.txt
Vous devriez voir la même sortie :
Hello, World
Comprendre la structure de la commande
La syntaxe de base de la commande tee est la suivante :
command | tee filename
Où :
commandest n'importe quelle commande qui produit une sortie|(pipe) envoie la sortie de la commande à teeteeest la commande elle-mêmefilenameest le nom du fichier où la sortie sera enregistrée
Rediriger les erreurs standard avec tee
Sous Linux, les programmes peuvent afficher des informations via deux principaux canaux :
- Sortie standard (stdout): Sortie normale du programme
- Erreur standard (stderr): Messages d'erreur et diagnostics
Par défaut, la commande tee ne capture que la sortie standard. Cependant, dans de nombreuses situations, vous pourriez également vouloir capturer les messages d'erreur. C'est là que la redirection de sortie entre en jeu.
Comprendre la redirection des erreurs standard
Créons un script qui affiche à la fois de la sortie standard et des erreurs standard. Rendez-vous d'abord dans le répertoire du projet (si vous n'y êtes pas déjà) :
cd /home/labex/project
Maintenant, exécutons une commande qui produira à la fois de la sortie standard et des erreurs standard :
echo "This is standard output"
ls /nonexistentfile
Vous devriez voir une sortie similaire à celle-ci :
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Notez que le message d'erreur de la commande ls s'affiche directement dans le terminal.
Redirection des erreurs standard vers un fichier
Voyons d'abord comment rediriger uniquement la sortie d'erreur vers un fichier :
echo "This is standard output"
ls /nonexistentfile 2> error.log
Cette fois-ci, vous devriez seulement voir :
This is standard output
Le message d'erreur a été redirigé vers le fichier error.log. La syntaxe 2> indique au shell de rediriger les erreurs standard (descripteur de fichier 2) vers le fichier spécifié.
Vérifions le contenu de error.log :
cat error.log
Vous devriez voir :
ls: cannot access '/nonexistentfile': No such file or directory
Capture à la fois de la sortie et des erreurs avec tee
Maintenant, utilisons tee pour capturer à la fois la sortie standard et les erreurs standard dans un fichier tout en les affichant également dans le terminal :
{
echo "This is standard output"
ls /nonexistentfile
} 2>&1 | tee both.log
Vous devriez voir à la fois la sortie et l'erreur dans le terminal :
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Vérifions le contenu de both.log :
cat both.log
Vous devriez voir la même sortie :
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Comprendre la structure de la commande
Dans la commande 2>&1 | tee both.log :
{ ... }regroupe plusieurs commandes ensemble2>&1redirige les erreurs standard (descripteur de fichier 2) vers la sortie standard (descripteur de fichier 1)|envoie la sortie combinée à la commandeteetee both.logaffiche la sortie dans le terminal et l'écrit dans le fichierboth.log
Cette technique est particulièrement utile pour enregistrer la sortie des commandes lors de la maintenance du système ou du dépannage.
Ajouter la sortie avec tee
Par défaut, la commande tee écrase le fichier cible chaque fois qu'elle est utilisée. Cependant, dans de nombreux scénarios, vous pourriez vouloir ajouter de nouvelles informations à un fichier existant plutôt que de remplacer son contenu. C'est là que l'option -a (append, ajouter) s'avère pratique.
Comprendre l'option d'ajout
Rendez-vous dans le répertoire du projet si vous n'y êtes pas déjà :
cd /home/labex/project
Commençons par créer un fichier avec des informations sur le système :
uname -a | tee system_info.log
Cette commande affichera les informations sur votre système dans le terminal et les enregistrera dans le fichier system_info.log. La sortie ressemblera à ceci (votre sortie peut différer) :
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Maintenant, vérifions le contenu du fichier :
cat system_info.log
Vous devriez voir les mêmes informations sur le système.
Ajout d'informations au fichier
Maintenant, ajoutons plus d'informations à ce fichier en utilisant l'option -a :
echo "Date and time: $(date)" | tee -a system_info.log
Cela affichera quelque chose comme :
Date and time: Wed May 3 14:22:34 UTC 2023
Le drapeau -a indique à tee d'ajouter la sortie au fichier au lieu de l'écraser.
Vérifions à nouveau le contenu du fichier :
cat system_info.log
Vous devriez maintenant voir à la fois les informations sur le système et la date :
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Ajout de plus d'informations
Ajoutons encore plus d'informations à notre fichier journal :
echo "Disk usage:" | tee -a system_info.log
df -h | tee -a system_info.log
Cela affichera les informations sur l'utilisation du disque et les ajoutera à notre fichier journal. La sortie variera en fonction de votre système, mais elle pourrait ressembler à ceci :
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
Vérifions une fois de plus le contenu de notre fichier journal :
cat system_info.log
Vous devriez maintenant voir toutes les informations que nous avons ajoutées :
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
Comprendre la structure de la commande
La syntaxe pour ajouter des données avec tee est la suivante :
command | tee -a filename
Où :
commandest n'importe quelle commande qui produit une sortie|(pipe) envoie la sortie de la commande àteeteeest la commande elle-même-aest l'option pour ajouter au fichier au lieu de l'écraserfilenameest le nom du fichier où la sortie sera ajoutée
Cette approche est particulièrement utile pour :
- Construire des fichiers journaux au fil du temps
- Capturer la sortie de plusieurs commandes dans un seul fichier
- Maintenir un enregistrement des états ou des opérations du système
Résumé
Dans ce laboratoire, vous avez appris à utiliser la commande tee pour la multiplexion de sortie sous Linux. Cette puissante utilitaire vous permet de visualiser la sortie des commandes dans le terminal tout en la sauvegardant simultanément dans des fichiers, ce qui en fait un outil essentiel pour les administrateurs système et les développeurs.
Voici les compétences clés que vous avez acquises :
Utilisation de base de tee : Vous avez appris à utiliser
teepour afficher la sortie dans le terminal tout en la sauvegardant dans un fichier.Redirection des erreurs standard : Vous avez maîtrisé la capture à la fois de la sortie standard et des erreurs standard en utilisant la redirection
2>&1en combinaison avectee, ce qui est crucial pour une journalisation complète.Ajout de sortie : Vous avez découvert comment utiliser l'option
-aavecteepour ajouter la sortie à des fichiers existants au lieu de les écraser, vous permettant de construire des journaux de manière incrémentielle.
Ces techniques sont précieuses pour diverses tâches sous Linux, notamment :
- La création de journaux détaillés pour le débogage
- La surveillance des activités système
- La documentation des sorties de commandes lors de l'administration système
- La conservation des résultats des commandes pour une référence future
Comprendre comment gérer efficacement la sortie sous Linux est une compétence fondamentale qui vous sera très utile au fur et à mesure de votre progression avec les systèmes Linux.



