Pipes Linux et redirections : stdout, stderr, tee et 2>&1
À la fin de ce tutoriel, vous saurez brancher stdin / stdout / stderr (0, 1, 2), rediriger avec
>/>>/2>/2>&1/&>, chaîner avec le pipe|, utiliser tee et/dev/null, et un mini here-doc — lab/tmp/lab-pipes, sans root ni secrets.Niveau : Débutant · Temps estimé : 40–50 min · Versions testées : Ubuntu 22.04 / 24.04, Debian 12 ; notes Rocky/Alma 9 · Dernière vérification : 2026-09-11
Slug proposé :
linux-pipes-redirections· Série : Linux Basics (P5) · Remplace / fusionne : N/A — création (chapitre 12)
Prérequis
- Terminal Linux : navigation (
pwd,ls,cd, chemins) - Archives tar / gzip — vous y avez déjà croisé
tar | gzip; ici on explique le mécanisme - Hub Linux Basics
- Shell bash (défaut Ubuntu/Debian/Rocky) ; compte non-root
- Lab dans
/tmp/lab-pipes— pas de secrets
Coût : 0 €. Déjà présents : bash, tee, sort, uniq, wc, grep.
Ce que nous allons construire
/tmp/lab-pipes/
├── data/ (fichiers texte de démo)
├── out/ (fichiers créés par > >> tee)
└── logs/ (stdout / stderr séparés ou fusionnés)
Flux : commande → stdout(1) / stderr(2)
→ > / >> / 2> / 2>&1 / &>
→ | (pipe) → tee → /dev/null
→ lab combiné + nettoyage
(Schéma à remplacer par une image locale Excalidraw / draw.io, alt : « Pipes Linux : stdin stdout stderr, redirections, pipe, tee, 2>&1 ».)
Chapitre #12 de Linux Basics. Pipeline CI, logs ou tar | gzip reposent sur rediriger et enchaîner. Ici = socle redirections + pipe. Pipelines texte avancés (awk, cut, xargs) : plus tard en Shell Automation — linux-pipelines-texte.
Étape 1 — stdin, stdout, stderr (descripteurs 0, 1, 2)
Chaque processus a trois flux standard :
| FD | Nom | Rôle | Par défaut |
|---|---|---|---|
| 0 | stdin | Entrée | Clavier / pipe amont |
| 1 | stdout | Sortie « normale » | Terminal |
| 2 | stderr | Erreurs / diagnostics | Terminal (même écran, autre canal) |
mkdir -p /tmp/lab-pipes/{data,out,logs}
cd /tmp/lab-pipes
printf 'alphanbetanalphangammanbetan' > data/names.txt
printf 'line-1nline-2nline-3n' > data/sample.txt
# stdout vs stderr (chemin OK + invalide)
ls data/names.txt /tmp/lab-pipes/does-not-exist
Messages mélangés à l’écran, mais pas le même descripteur. Un CI qui ne capture que stdout peut être « vert » alors que stderr crie.
Étape 2 — Rediriger stdout : > et >>
>: écrit stdout dans un fichier (écrase s’il existe).>>: ajoute (append) à la fin.
cd /tmp/lab-pipes
echo 'premier' > out/app.log
echo 'second' >> out/app.log
cat out/app.log
# Écrasement volontaire
echo 'seul' > out/app.log
cat out/app.log
| Opérateur | Effet sur stdout |
|---|---|
> |
Crée / écrase le fichier |
>> |
Crée / ajoute |
1> |
Identique à > (explicite) |
Astuce : set -o noclobber refuse d’écraser avec > (>| force) — utile en scripts (bash scripting).
Étape 3 — stderr : 2>, fusion 2>&1, &> / >&
cd /tmp/lab-pipes
# stdout → fichier OK ; stderr reste à l’écran
ls data/names.txt /tmp/nope-1 > out/ls-ok.txt
cat out/ls-ok.txt
# stderr seul dans un fichier
ls data/names.txt /tmp/nope-2 > out/ls-out.txt 2> logs/ls-err.txt
echo '--- stdout ---'; cat out/ls-out.txt
echo '--- stderr ---'; cat logs/ls-err.txt
# Fusion classique : stderr rejoint stdout, puis tout dans un fichier
ls data/names.txt /tmp/nope-3 > logs/both.txt 2>&1
cat logs/both.txt
# Bash : raccourci &> (équivalent courant de >fichier 2>&1)
ls data/names.txt /tmp/nope-4 &> logs/both-amp.txt
cat logs/both-amp.txt
| Syntaxe | Sens |
|---|---|
2> fichier |
stderr → fichier (écrase) |
2>> fichier |
stderr → append |
2>&1 |
stderr vers là où pointe stdout maintenant |
&> fichier |
stdout et stderr → fichier (bash) |
>& fichier |
Variante bash de &> |
Ordre critique : cmd >f 2>&1 fonctionne ; cmd 2>&1 >f ne fusionne pas comme on croit (stderr suit l’ancien stdout = le terminal). Mémorisez : rediriger stdout d’abord, puis 2>&1.
Rocky/Alma 9 (bash) : mêmes opérateurs. Sous /bin/sh (dash), préférez >f 2>&1 à &>.
Étape 4 — Redirection d’entrée : <
cd /tmp/lab-pipes
# stdin depuis fichier
wc -l < data/sample.txt
# sort depuis un fichier
sort < data/names.txt > out/names-sorted.txt
cat out/names-sorted.txt
< branche le fichier sur le stdin. Moins fréquent que >, indispensable si l’outil ne lit que stdin.
Étape 5 — Le pipe | : chaînes utiles
Le pipe connecte le stdout de gauche au stdin de droite — cœur des pipes linux en DevOps.
cd /tmp/lab-pipes
# Uniques après tri
sort data/names.txt | uniq
# Compter les lignes uniques
sort data/names.txt | uniq | wc -l
# Filtrer puis compter
grep -n alpha data/names.txt | wc -l
# Pipeline « logs » factice
printf 'INFO oknERROR timeoutnWARN retrynERROR timeoutn'
| grep ERROR | sort | uniq -c
| Chaîne | Usage typique |
|---|---|
sort | uniq |
Dédupliquer (après tri) |
sort | uniq -c |
Compter les occurrences |
grep | wc -l |
Compter les matches |
cmd | head |
Échantillonner |
Rappel : le pipe ne transporte que stdout (sinon cmd 2>&1 | …). Les chaînes cut | awk | xargs = leçon future pipelines texte (Shell Automation), pas ici.
Étape 6 — tee, /dev/null, tee -a
tee copie stdin vers un fichier et vers stdout (d’où le nom « T » de plomberie).
cd /tmp/lab-pipes
# Voir ET enregistrer
sort data/names.txt | uniq | tee out/unique.txt
cat out/unique.txt
# Append avec tee -a
echo 'delta' | tee -a out/unique.txt
cat out/unique.txt
# Jeter stdout : /dev/null (garder seulement le statut / stderr)
ls data/names.txt > /dev/null
# Silencer tout (tests, cron bruyant)
ls /tmp/nope-null &> /dev/null || echo "échec attendu, silencieux"
| Outil | Rôle |
|---|---|
tee fichier |
Écrit + laisse passer stdout |
tee -a fichier |
Append + laisse passer |
> /dev/null |
Ignore stdout |
2> /dev/null |
Ignore stderr |
&> /dev/null |
Ignore les deux |
Pattern CI : make test 2>&1 | tee out/test.log — fichier et console.
Étape 7 — Here-doc et here-string (bref)
cd /tmp/lab-pipes
# Here-doc : plusieurs lignes vers stdin (déjà vu pour créer des fichiers)
cat > out/note.txt << 'EOF'
titre=lab-pipes
date=2026-09-11
EOF
cat out/note.txt
# Here-string : une chaîne vers stdin (bash)
wc -w <<< 'pipes linux redirection tee'
grep -o 'linux' <<< 'guide pipes linux 2026'
<< 'EOF': bloc multi-lignes (quotes = pas d’expansion$VAR).<<< 'texte': here-string bash, test rapide sans fichier.
Étape 8 — Lab final combiné + nettoyage
Scénario : mini rapport (uniques + erreurs) façon job CI.
cd /tmp/lab-pipes
# 1) Données + bruit stderr volontaire
{
sort data/names.txt | uniq | tee out/report-unique.txt
ls data/names.txt /tmp/missing-lab 2> logs/report-err.txt
} > out/report-stdout.txt 2>&1 || true
# 2) Fusion utile pour archivage
cat out/report-unique.txt | tee out/report-final.txt | wc -l > out/report-count.txt
cat logs/report-err.txt >> out/report-final.txt
# 3) Vérifications
echo '=== unique ==='; cat out/report-unique.txt
echo '=== count ==='; cat out/report-count.txt
echo '=== err ==='; cat logs/report-err.txt
test -s out/report-unique.txt && test -f logs/report-err.txt && echo "OK lab pipes"
Validé si : out/ + logs/ peuplés, tee a dupliqué, stderr isolé.
rm -rf /tmp/lab-pipes
test ! -d /tmp/lab-pipes && echo "lab pipes nettoyé"
Rien à désinstaller. Jamais rm -rf / ni redirections root hors lab.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
| Fichier vide alors que l’erreur s’affiche | Seul stdout redirigé | 2> ou 2>&1 / &> |
stderr encore à l’écran après 2>&1 >f |
Ordre des redirections | >f 2>&1 (stdout d’abord) |
| Pipe « perd » les erreurs | | ne prend que stdout |
cmd 2>&1 | … |
| Fichier écrasé par accident | > au lieu de >> |
>> ou tee -a ; noclobber |
tee « mange » la suite du pipe |
Mauvais placement | … | tee f | wc (tee au milieu) |
Script /bin/sh refuse &> |
dash ≠ bash | Écrire >f 2>&1 |
| Attendre awk/xargs ici | Mauvais niveau | Socle ici ; suite = linux-pipelines-texte |
Quiz (3 questions)
1. Que fait cmd > out.txt 2>&1 ?
– A. Envoie seulement stderr dans out.txt
– B. Envoie stdout et stderr dans out.txt
– C. Ignore stdout
2. Quelle est la différence principale entre > et | ?
– A. > écrit stdout dans un fichier ; | envoie stdout vers le stdin de la commande suivante
– B. Ils sont strictement identiques
– C. | n’existe que sous Windows
3. À quoi sert tee dans sort f | uniq | tee out/u.txt ?
– A. À supprimer stderr
– B. À écrire le flux dans out/u.txt et le laisser passer sur stdout
– C. À monter un système de fichiers
Réponses : 1‑B · 2‑A · 3‑B
FAQ
Quelle différence entre pipe et redirection sous Linux ?
La redirection (>, >>, <, 2>) branche un flux vers/depuis un fichier. Le pipe | envoie le stdout vers le stdin de la commande suivante. Ensemble : socle des pipes linux DevOps.
Comment capturer stdout et stderr dans le même fichier ?
commande > logs/all.txt 2>&1 ou commande &> logs/all.txt (bash). Écran + fichier : commande 2>&1 | tee logs/all.txt.
Pourquoi utiliser /dev/null ?
Pour ignorer une sortie (bruit, tests) : grep motif f > /dev/null ou cmd &> /dev/null. En prod, journalisez plutôt (tee / fichier) au lieu de tout masquer.
Pour aller plus loin
man bash(sections Redirections),man tee,help tee- Précédent pratique : archives tar (
tar | gzip) - Scripts : Bash scripting
- Plus tard :
linux-pipelines-texte(Shell Automation — distinct de ce socle)
Maillage série Linux Basics
| ← Précédent | Archives tar / gzip |
| → Suivant | Bash scripting · ou hub Linux Basics |
| Hub | Linux Basics |
| Aussi | Terminal navigation · (plus tard) pipelines texte |
Meta publication (à remplir dans Rank Math / SEO)
- Title SEO : Pipes Linux et redirections : stdout, stderr, tee, 2>&1 (2026)
- Meta description (≤ 155) : Maîtrisez pipes Linux et redirections (stdin/stdout/stderr, |, tee, 2>&1). Lab DevOps /tmp — guide Basics 2026.
- Focus keyphrase : pipes linux
- KW secondaires : pipe bash, stdout stderr, tee, 2>&1, /dev/null, redirection linux, here-doc
- Schemas Rank Math : Article + HowTo (étapes lab) + FAQ (3 questions ci-dessus)
- Image mise en avant :
assets/web/devopelastichayway/cover-linux-pipes-redirections-1200x630.webp(Visuels Linux — WebP 1200×630) - Catégorie : Linux · Niveau : Débutant
- Slug :
linux-pipes-redirections - Statut : HOLD — draft only (ne pas publier)
← Retour parcours Linux — Basics, Admin, Réseau & Sécurité, Shell & Automation.