Learn

Pipes et redirections

Terminal

Composer des commandes avec |, >, >>, < pour transformer le terminal en chaîne de montage.

Le vrai pouvoir du terminal vient de la composition. ls, grep, et wc séparés sont utiles. Mais branchés bout à bout avec un pipe, ils résolvent des problèmes qui prendraient une vraie petite appli ailleurs.

stdin, stdout, stderr

Chaque commande a trois "tuyaux" implicites :

  • stdin (entrée standard) : ce qu'elle lit en entrée.
  • stdout (sortie standard) : ce qu'elle écrit normalement.
  • stderr (sortie d'erreur) : ce qu'elle écrit en cas d'erreur.

Par défaut, stdout et stderr s'affichent dans le terminal. Les redirections permettent de les envoyer ailleurs.

Rediriger vers un fichier

shell
ls > fichiers.txt
echo "bonjour" > message.txt

> envoie stdout vers un fichier. Attention : il écrase le fichier s'il existe déjà.

shell
echo "première ligne" > log.txt
echo "deuxième ligne" >> log.txt

>> ajoute à la fin du fichier au lieu d'écraser. Indispensable pour les logs.

Rediriger les erreurs

shell
ls /dossier-inexistant 2> erreurs.txt
ls /dossier-inexistant 2>> erreurs.txt
commande &> tout.txt
  • 2> redirige stderr (les erreurs) vers un fichier.
  • &> redirige stdout ET stderr ensemble. Pratique pour capturer tout ce qu'une commande produit.

Le pipe : chaîner des commandes

Le pipe | envoie stdout d'une commande vers stdin de la suivante :

shell
ls | grep README
cat acces.log | grep ERROR | wc -l
ps aux | grep node
  • ls | grep README : liste les fichiers, ne garde que ceux qui contiennent "README".
  • cat acces.log | grep ERROR | wc -l : compte combien de lignes "ERROR" contient le fichier de log.
  • ps aux | grep node : cherche les processus Node.js en cours.

Exemple pratique complet

Trouver combien de fichiers .js se trouvent dans le dossier courant :

shell
ls | grep ".js$" | wc -l

Extraire les lignes d'erreur d'un fichier de log et les sauvegarder :

shell
cat app.log | grep ERROR > erreurs-aujourd-hui.txt
Redirections (GNU Bash manual)

Coche les étapes pour débloquer la suite

Retour au cours