Utiliser tee pour diviser la sortie et rediriger l'entrée standard avec <
Dans cette dernière étape, vous explorerez deux concepts de redirection complémentaires : la division de la sortie avec la commande tee et la fourniture de données à une commande à partir d'un fichier à l'aide de l'opérateur <.
Diviser la sortie avec tee
Parfois, vous souhaitez enregistrer la sortie d'une commande dans un fichier tout en la visualisant simultanément sur le terminal. Les opérateurs > et >> redirigent la sortie exclusivement vers un fichier, la masquant de l'écran. La commande tee résout ce problème en divisant la sortie, l'envoyant à la fois vers un fichier et vers la sortie standard (votre écran). Son nom vient du raccord en « T » utilisé en plomberie, qui divise un flux en deux directions.
Voyons cela en action. Nous allons lister le contenu du répertoire /etc/ et utiliser tee pour afficher la liste à l'écran et l'enregistrer dans un fichier nommé etc_listing.txt.
ls /etc/ | tee etc_listing.txt
Vous verrez la liste complète du répertoire s'afficher sur votre terminal. En même temps, la commande tee a écrit exactement la même sortie dans etc_listing.txt. Vous pouvez le vérifier :
cat etc_listing.txt
Le contenu du fichier correspondra à ce que vous avez vu à l'écran.
Par défaut, tee écrase le fichier de destination. Pour ajouter à un fichier à la place, utilisez l'option -a. C'est très utile pour la journalisation. Créons un fichier journal et ajoutons-y deux entrées.
date | tee system_log.txt
echo "User labex performed a system check." | tee -a system_log.txt
La première commande crée system_log.txt avec la date actuelle. La deuxième commande, utilisant tee -a, ajoute une nouvelle ligne sans supprimer la date. Vérifions le fichier final :
cat system_log.txt
Le résultat affichera les deux lignes :
Wed Jun 25 14:56:53 CST 2025
User labex performed a system check.
Rediriger l'entrée standard avec <
Examinons maintenant l'opposé de la redirection de sortie : la redirection de l'entrée standard (stdin). De nombreuses commandes, comme sort, wc ou cat, peuvent lire des données depuis stdin (généralement votre clavier). L'opérateur < vous permet d'indiquer à une commande de récupérer ses données d'entrée à partir d'un fichier à la place.
Tout d'abord, créons un fichier simple avec une liste d'éléments. Nous l'appellerons items.txt.
echo "banana" > items.txt
echo "apple" >> items.txt
echo "cherry" >> items.txt
Nous avons maintenant un fichier items.txt contenant trois éléments non triés. La commande sort peut trier des lignes de texte. Utilisons < pour injecter items.txt dans la commande sort.
sort < items.txt
La commande lira le contenu de items.txt comme entrée, le triera et affichera le résultat sur sa sortie standard (le terminal) :
apple
banana
cherry
C'est fonctionnellement similaire à l'exécution de sort items.txt, mais cela démontre le concept puissant de redirection d'un fichier vers l'entrée standard d'une commande. Cela devient essentiel lors de l'utilisation de commandes qui ne peuvent lire que depuis stdin et n'acceptent pas de nom de fichier comme argument.
Comme dernier exemple, considérons cat < items.txt. Cela indique à cat de lire son entrée depuis items.txt et, comme le rôle de cat est d'afficher son entrée sur sa sortie, il affiche le contenu du fichier à l'écran.
cat < items.txt
Ceci conclut notre tour d'horizon de la redirection de base des E/S sous Linux. Vous disposez désormais des outils nécessaires pour contrôler d'où vos commandes tirent leurs données et où leurs résultats sont envoyés.