La pièce est silencieuse, mais sous la surface, les données coulent comme du sang dans les veines d’un réseau. Trois canaux. Toujours trois. Le stdin, le stdout, le stderr. L’entrée, la sortie, les cris d’erreur. Comprendre leur flux, c’est apprendre à les détourner. À les forcer. C’est là que l’artisan devient architecte… ou bourreau.
3.1 Entrée / sortie standard
Chaque commande naît avec trois portes greffées sur elle.
- stdin (0) : Le conduit d’entrée. Par défaut, c’est le clavier. Là où elle écoute vos ordres.
- stdout (1) : Le conduit de sortie. Par défaut, l’écran. Là où elle crache son résultat.
- stderr (2) : Le conduit des erreurs. Par défaut, l’écran aussi. Là où elle hurle ses problèmes.
Séparer le murmure normal des hurlements d’erreur, c’est la première étape pour garder les mains propres.
3.2 Redirections
Ici, on plie le flux à sa volonté. On ne se contente plus de ce que le terminal veut bien montrer.
-
>: La redirection écrasante. Elle prend la sortie standard et la balance dans un fichier. Elle efface tout ce qui était là avant. Un règlement de comptes.$ ls -la > inventaire_complet.txt # La liste du dossier est capturée, écrasant le fichier $ echo "Dernière ligne." > journal.log # L'ancien journal a disparu. Il ne reste que cette phrase. -
>>: La redirection silencieuse. Elle ajoute. Elle complète. L’outil du chroniqueur patient.$ date >> surveillance.log # La date et l'heure sont ajoutées en bas du fichier, sans toucher au reste. $ who >> connexions.txt # La liste des utilisateurs connectés s'ajoute à l'historique. -
<: L'injection. On prend un fichier et on l’injecte dans l’entrée standard d’une commande. Comme lui faire avaler un dossier.$ sort < liste_non_triee.txt # Le fichier est lu et trié. $ grep "cible" < dump_massif.data # On cherche un motif dans une masse de données. -
2>: Le silencieux. Le plus important peut-être. Il attrape les hurlements d’erreur (stderr) et les jette où vous voulez. Souvent dans le néant.$ find / -name "secret.conf" 2> /dev/null # Les erreurs "Permission denied" partent dans /dev/null. On ne voit que les résultats. $ cp fichier_inexistant.txt backup/ 2> erreurs.log # L'erreur est capturée dans un log, elle ne salit plus l'écran.On peut tout combiner. Opérer proprement.
$ commande_delicate > resultat_succes.log 2> erreurs_critiques.log # Le succès va dans un fichier, les erreurs dans un autre. L'écran reste vierge.
3.3 Pipes
Le |. Une simple barre verticale. C’est l’arme absolue. Elle prend la sortie d’une commande à gauche et la branche directement sur l’entrée de celle à droite. Les données ne touchent plus le sol. C’est un flux continu, une chaîne de montage.
-
Chaînage basique : Le résultat devient la matière première.
$ ps aux | grep bash # Liste tous les processus, puis filtre pour ne garder que ceux contenant "bash". # On cherche une aiguille dans une botte de processus.$ cat /var/log/syslog | grep "error" | head -20 # Lit le log, filtre les erreurs, n'en garde que les 20 premières. # Une enquête en trois temps. -
Chaînage créatif : L’art de la cascade.
$ find . -type f -name "*.txt" | xargs rm # Trouve les fichiers .txt et les passe à `rm` pour suppression. # Une élimination de preuves automatisée.$ ss -tulpn | grep :80 # Liste toutes les connexions réseau, puis cherche qui écoute sur le port 80. # Identifier qui tient le bar. -
L’usine à données : Où la magie noire opère.
$ journalctl --since "1 hour ago" | grep -E "(FAILED|ERROR)" | tail -5 > alertes_recentes.txt # Extrait les logs système de la dernière heure, filtre les échecs/erreurs, garde les 5 dernières, sauvegarde. # Un rapport d'activité suspecte.$ sort fichier_des_noms.txt | uniq -c | sort -rn | head -10 # Trie les noms, supprime les doublons en les comptant, re-trie par compte décroissant, garde le top 10. # La liste des suspects les plus fréquents.
Le terminal n’est plus une simple fenêtre. C’est un tableau de contrôle. Vous ne lancez plus des ordres, vous orchestrez des flux. Vous détournez la parole des commandes pour la faire chuchoter à vos fichiers, ou hurler dans le vide. Le | est votre scalpel, disséquant la sortie d’une commande pour n’en nourrir qu’une autre.
La lumière du moniteur éclaire des lignes de code figées. Le pipe clignote, attendant la prochaine instruction. Le pouvoir est dans le flux. À vous de décider qui noyer, et qui abreuver.