Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

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

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

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.