Aller au contenu
Administration Linux medium

Redirections et pipes sous Linux

6 min de lecture

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.

  • 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

Avant de rediriger quoi que ce soit, il faut comprendre que chaque commande utilise trois flux :

FluxNuméroNomRôle
Entrée standard0stdinCe que la commande lit (clavier par défaut)
Sortie standard1stdoutLe résultat normal (écran par défaut)
Sortie d’erreur2stderrLes 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.

L’opérateur > envoie la sortie standard dans un fichier. Si le fichier existe, il est écrasé :

Fenêtre de terminal
ls /etc > liste.txt

Le fichier liste.txt contient maintenant la liste des fichiers de /etc. Rien ne s’affiche à l’écran.

Vérifiez :

Fenêtre de terminal
head -n 5 liste.txt

L’opérateur >> ajoute à la fin du fichier sans écraser le contenu existant :

Fenêtre de terminal
echo "--- Fin du rapport ---" >> liste.txt

Rediriger echo est un moyen simple de créer un petit fichier :

Fenêtre de terminal
echo "nameserver 1.1.1.1" > /tmp/resolv-test.conf

Pour envoyer les messages d’erreur dans un fichier séparé :

Fenêtre de terminal
find /etc -name "*.conf" 2> erreurs.log

Les résultats normaux s’affichent à l’écran. Les erreurs « Permission denied » vont dans erreurs.log.

/dev/null est un fichier spécial qui avale tout ce qu’on lui envoie. C’est le « trou noir » de Linux :

Fenêtre de terminal
find / -name "sshd_config" 2>/dev/null

Les erreurs « Permission denied » disparaissent, seuls les résultats utiles s’affichent.

Pour envoyer tout (résultat + erreurs) dans un même fichier :

Fenêtre de terminal
find / -name "*.log" > tout.log 2>&1

2>&1 signifie « envoie le flux 2 (stderr) là où va le flux 1 (stdout) ».

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.

Fenêtre de terminal
ls /etc | head -n 5

ls liste les fichiers, le pipe envoie cette liste à head qui n’affiche que les 5 premières lignes.

Fenêtre de terminal
cat /etc/passwd | cut -d: -f1 | sort
  1. cat /etc/passwd — affiche le fichier
  2. cut -d: -f1 — extrait le premier champ (le nom d’utilisateur) en utilisant : comme séparateur
  3. sort — trie par ordre alphabétique

Le résultat : la liste triée de tous les utilisateurs du système.

Fenêtre de terminal
ls /etc | wc -l

wc -l compte le nombre de lignes. Ici, le nombre de fichiers et répertoires dans /etc.

Fenêtre de terminal
ps aux | grep "sshd"

ps aux liste tous les processus, grep ne garde que ceux contenant « sshd ».

Par défaut, une redirection > envoie tout dans le fichier et rien à l’écran. Si vous voulez les deux :

Fenêtre de terminal
ls /etc | tee liste.txt

Le résultat s’affiche à l’écran et est enregistré dans liste.txt.

Pour ajouter au fichier au lieu d’écraser :

Fenêtre de terminal
ls /var | tee -a liste.txt
OpérateurRôleExemple
>Redirige stdout vers un fichier (écrase)ls > fichier.txt
>>Redirige stdout vers un fichier (ajoute)echo "fin" >> fichier.txt
2>Redirige stderr vers un fichierfind / -name x 2> err.log
2>/dev/nullIgnore les erreursfind / -name x 2>/dev/null
> f 2>&1Redirige stdout + stderrcmd > tout.log 2>&1
|Pipe : sortie d’une commande → entrée de la suivantels | head
teeAffiche et enregistre en même tempsls | tee fichier.txt
ProblèmeCause probableSolution
> a écrasé mon fichier> écrase toujoursUtiliser >> pour ajouter
Le pipe ne donne rienLa première commande ne produit pas de sortieTester 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ésultatstdout et stderr mélangés à l’écranAjouter 2>/dev/null
tee : commande introuvableTrès rare — paquet coreutils manquantsudo apt install coreutils
  • > é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/null supprime les erreurs — indispensable avec find lancé sans sudo.
  • tee est le compromis : afficher à l’écran et garder une trace dans un fichier.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn