Sous Linux, chaque commande produit du texte en sortie — et ce texte peut être envoyé ailleurs que l’écran. Vers un fichier, vers une autre commande, ou même vers le néant (/dev/null). Ce mécanisme s’appelle la redirection et c’est l’un des concepts les plus puissants du shell. Combiné avec le pipe (|), il permet d’enchaîner des commandes simples pour accomplir des tâches complexes.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Rediriger la sortie d’une commande vers un fichier avec
>et>> - Distinguer sortie standard et sortie d’erreur
- Enchaîner des commandes avec le pipe
| - Masquer les erreurs avec
/dev/null - Afficher et enregistrer en même temps avec
tee
Les trois flux du shell
Section intitulée « Les trois flux du shell »Avant de rediriger quoi que ce soit, il faut comprendre que chaque commande utilise trois flux :
| Flux | Numéro | Nom | Rôle |
|---|---|---|---|
| Entrée standard | 0 | stdin | Ce que la commande lit (clavier par défaut) |
| Sortie standard | 1 | stdout | Le résultat normal (écran par défaut) |
| Sortie d’erreur | 2 | stderr | Les messages d’erreur (écran par défaut) |
Par défaut, stdout et stderr arrivent toutes les deux à l’écran. Les redirections permettent de les envoyer ailleurs.
Rediriger la sortie vers un fichier
Section intitulée « Rediriger la sortie vers un fichier »> — écrire (en écrasant)
Section intitulée « > — écrire (en écrasant) »L’opérateur > envoie la sortie standard dans un fichier. Si le fichier existe, il est écrasé :
ls /etc > liste.txtLe fichier liste.txt contient maintenant la liste des fichiers de /etc. Rien ne s’affiche à l’écran.
Vérifiez :
head -n 5 liste.txt>> — ajouter à la fin
Section intitulée « >> — ajouter à la fin »L’opérateur >> ajoute à la fin du fichier sans écraser le contenu existant :
echo "--- Fin du rapport ---" >> liste.txtCréer un fichier à partir de rien
Section intitulée « Créer un fichier à partir de rien »Rediriger echo est un moyen simple de créer un petit fichier :
echo "nameserver 1.1.1.1" > /tmp/resolv-test.confRediriger les erreurs
Section intitulée « Rediriger les erreurs »2> — rediriger stderr
Section intitulée « 2> — rediriger stderr »Pour envoyer les messages d’erreur dans un fichier séparé :
find /etc -name "*.conf" 2> erreurs.logLes résultats normaux s’affichent à l’écran. Les erreurs « Permission denied » vont dans erreurs.log.
2>/dev/null — ignorer les erreurs
Section intitulée « 2>/dev/null — ignorer les erreurs »/dev/null est un fichier spécial qui avale tout ce qu’on lui envoie. C’est le « trou noir » de Linux :
find / -name "sshd_config" 2>/dev/nullLes erreurs « Permission denied » disparaissent, seuls les résultats utiles s’affichent.
Rediriger stdout et stderr ensemble
Section intitulée « Rediriger stdout et stderr ensemble »Pour envoyer tout (résultat + erreurs) dans un même fichier :
find / -name "*.log" > tout.log 2>&12>&1 signifie « envoie le flux 2 (stderr) là où va le flux 1 (stdout) ».
Le pipe | — enchaîner des commandes
Section intitulée « Le pipe | — enchaîner des commandes »Le pipe (|) connecte la sortie d’une commande à l’entrée de la suivante. C’est la base de la philosophie Unix : des outils simples combinés entre eux.
Exemple de base
Section intitulée « Exemple de base »ls /etc | head -n 5ls liste les fichiers, le pipe envoie cette liste à head qui n’affiche que les 5 premières lignes.
Enchaîner plusieurs pipes
Section intitulée « Enchaîner plusieurs pipes »cat /etc/passwd | cut -d: -f1 | sortcat /etc/passwd— affiche le fichiercut -d: -f1— extrait le premier champ (le nom d’utilisateur) en utilisant:comme séparateursort— trie par ordre alphabétique
Le résultat : la liste triée de tous les utilisateurs du système.
Compter des résultats
Section intitulée « Compter des résultats »ls /etc | wc -lwc -l compte le nombre de lignes. Ici, le nombre de fichiers et répertoires dans /etc.
Filtrer avec grep
Section intitulée « Filtrer avec grep »ps aux | grep "sshd"ps aux liste tous les processus, grep ne garde que ceux contenant « sshd ».
tee — afficher et enregistrer en même temps
Section intitulée « tee — afficher et enregistrer en même temps »Par défaut, une redirection > envoie tout dans le fichier et rien à l’écran. Si vous voulez les deux :
ls /etc | tee liste.txtLe résultat s’affiche à l’écran et est enregistré dans liste.txt.
Pour ajouter au fichier au lieu d’écraser :
ls /var | tee -a liste.txtRécapitulatif
Section intitulée « Récapitulatif »| Opérateur | Rôle | Exemple |
|---|---|---|
> | Redirige stdout vers un fichier (écrase) | ls > fichier.txt |
>> | Redirige stdout vers un fichier (ajoute) | echo "fin" >> fichier.txt |
2> | Redirige stderr vers un fichier | find / -name x 2> err.log |
2>/dev/null | Ignore les erreurs | find / -name x 2>/dev/null |
> f 2>&1 | Redirige stdout + stderr | cmd > tout.log 2>&1 |
| | Pipe : sortie d’une commande → entrée de la suivante | ls | head |
tee | Affiche et enregistre en même temps | ls | tee fichier.txt |
Dépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
> a écrasé mon fichier | > écrase toujours | Utiliser >> pour ajouter |
| Le pipe ne donne rien | La première commande ne produit pas de sortie | Tester la première commande seule |
Permission denied avec > | Pas le droit d’écrire dans le répertoire | Écrire dans /tmp ou utiliser sudo |
| Les erreurs polluent le résultat | stdout et stderr mélangés à l’écran | Ajouter 2>/dev/null |
tee : commande introuvable | Très rare — paquet coreutils manquant | sudo apt install coreutils |
À retenir
Section intitulée « À retenir »>écrase,>>ajoute — c’est la différence la plus importante.|(pipe) est le ciment de la ligne de commande : il connecte les outils entre eux.2>/dev/nullsupprime les erreurs — indispensable avecfindlancé sanssudo.teeest le compromis : afficher à l’écran et garder une trace dans un fichier.