Entrée standard, sortie standard et erreur standard

LinuxBeginner
Pratiquer maintenant

Introduction

Imaginez chaque commande Linux comme une machine. Les données entrent d’un côté, puis la machine les traite. Mais contrairement aux machines simples qui n’ont qu’une seule sortie, une commande Linux possède deux conduits distincts pour envoyer les résultats :

  • Sortie standard (stdout) : le « conduit des résultats ». Lorsque la machine fonctionne correctement, le résultat final sort par ici.
  • Erreur standard (stderr) : le « conduit des erreurs ». En cas de problème, les messages d’erreur sortent par ici.

Par défaut, les deux conduits affichent leur contenu à l’écran.

Ce modèle de « flux » est l’une des idées les plus importantes du travail avec le shell. Les commandes Linux ne se contentent pas « d’afficher du texte » : elles produisent souvent des flux de données structurés. Une fois que vous comprenez ces flux, la redirection et les pipelines deviennent logiques plutôt que mystérieux.

Dans ce lab, vous exécuterez des commandes pour observer ces deux flux différents en action.

Sortie standard (stdout)

Observez le fonctionnement du « conduit des résultats ».

Nous allons utiliser ls, qui affiche la liste des fichiers. Lorsque ls s’exécute correctement, il envoie les noms de fichiers vers la sortie standard.

Exécutez cette commande :

ls -l

Vous devriez voir une liste de fichiers.

Que s’est-il passé ?

Comme la commande s’est exécutée correctement, le programme ls a envoyé la liste au flux stdout. Votre terminal surveille ce flux et l’affiche.

Retenez que le terminal n’est que la destination utilisée par défaut. La sortie standard n’est pas liée en permanence à l’écran ; vous pourrez donc bientôt l’enregistrer ou la rediriger ailleurs.

Erreur standard (stderr)

Examinons maintenant le « conduit des erreurs ». L’erreur standard (stderr) est réservée aux erreurs.

Nous pouvons forcer ls à signaler une erreur en lui demandant d’afficher le contenu d’un répertoire qui n’existe pas.

Exécutez cette commande :

ls -l /nonexistent_directory

Vous verrez un message d’erreur.

Que s’est-il passé ?

La commande a échoué. Au lieu d’envoyer un résultat vers stdout, elle a envoyé un message vers le flux stderr.

Par défaut, votre terminal surveille les deux flux. Il affiche donc l’erreur comme du texte normal.

C’est pourquoi les débutants supposent souvent que les messages de réussite et les messages d’erreur sont « le même type de sortie ». Ils peuvent avoir un aspect similaire à l’écran, mais ils circulent en interne par des canaux différents.

Sortie mixte

Voyons maintenant ce qui se passe lorsqu’une commande produit les deux types de sortie.

Nous allons demander à ls d’effectuer deux opérations :

  1. Afficher le contenu du répertoire courant . (opération réussie).
  2. Afficher le contenu de /fake (opération échouée).

Exécutez cette commande :

ls -l . /fake

Observez attentivement le résultat. Vous devriez voir deux parties :

  1. Un message d’erreur pour /fake.
  2. Une liste obtenue avec succès pour ..

Que s’est-il passé ?

L’erreur est passée par le flux stderr. La liste des fichiers est passée par le flux stdout. Votre terminal a reçu les deux flux et les a affichés à l’écran.

Cette distinction est essentielle. Dans le prochain lab, vous apprendrez à capturer stdout tout en ignorant stderr.

Cette séparation n’est pas seulement théorique. Dans l’automatisation réelle, les scripts doivent souvent enregistrer les résultats normaux tout en laissant les erreurs visibles, ou enregistrer les erreurs dans des journaux sans les mélanger aux données utiles.

Résumé

Dans ce lab, vous avez exploré les « flux de données » à l’aide de l’analogie de la machine à deux conduits :

  • Sortie standard : le canal utilisé pour les résultats normaux.
  • Erreur standard : le canal utilisé pour les messages d’erreur.

Par défaut, Linux affiche les deux flux à l’écran. Vous apprendrez ensuite à les séparer.