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
> envoie stdout vers un fichier. Attention : il écrase le fichier s'il existe déjà.
>> ajoute à la fin du fichier au lieu d'écraser. Indispensable pour les logs.
Rediriger les erreurs
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 :
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 :
Extraire les lignes d'erreur d'un fichier de log et les sauvegarder :
Redirections (GNU Bash manual)