Comprendre les E/S standard sous Linux
Améliorez votre flux de travail de ligne de commande Linux en regroupant plusieurs commandes à l'aide d'E/S standard.
Lorsque vous utilisez Linux, vous pouvez rencontrer des références à « E/S standard » ou « entrée standard », « sortie standard » et « erreur standard ». Que veulent dire ces termes?
Entrée standard
L'entrée standard est un terme désignant l'entrée reçue par un programme basé sur des commandes. En utilisation interactive, cela vient normalement du clavier, mais comme vous le verrez plus tard, cela peut aussi venir d'un fichier.
Alors que le clavier de nos jours est généralement branché directement sur la machine, lorsque les terminaux de texte étaient plus courants, l'entrée standard était prise à partir du clavier du terminal connecté à un mini-ordinateur central ou à un ordinateur central. Les systèmes Linux modernes utilisent des émulateurs de terminaux ou la console système pour l'entrée standard.
Sortie standard
La sortie standard, comme l'entrée standard, est l'endroit où un programme enverra sa sortie texte. Encore une fois, il s'agit généralement d'un émulateur de terminal sur les systèmes modernes, mais dans le passé, il s'agissait également de terminaux physiques, soit avec des écrans CRT, soit imprimés sur papier à l'aide de télétypes.
Les terminaux de téléscripteur étaient plus courants lorsque le prédécesseur de Linux, Unix, était développé aux Bell Labs à la fin des années 1960 et au début des années 1970.
Comme l'entrée standard, vous pouvez également rediriger la sortie standard vers un fichier.
Erreur standard
L'erreur standard est généralement utilisée pour tous les messages d'erreur qu'un programme peut générer. Comme pour la sortie standard, elle est généralement affichée à l'écran mais peut également être redirigée vers un fichier ou vers un périphérique bloc comme /dev/null.
Comment rediriger l'entrée et la sortie sous Linux
L'une des fonctionnalités les plus puissantes des systèmes Linux et Unix est la possibilité de rediriger les entrées et les sorties vers des fichiers et d'autres programmes.
La méthode la plus largement utilisée consiste à envoyer la sortie d'une commande à une autre, ou un "pipeline". Par exemple, pour voir combien de commandes Linux ont "sh" dans leur nom, vous pouvez diriger la sortie de la commande ls avec grep.
ls /bin | grep 'sh'
Pour rediriger la sortie d'une commande vers un fichier, utilisez l'opérateur >. Par exemple, pour envoyer la sortie de la commande ls dans un nom de fichier filelist :
ls > filelist
L'opérateur >> ajoute la sortie à un fichier existant ou le crée s'il n'existe pas. Pour éviter d'écraser accidentellement un fichier, vous pouvez définir l'option "noclobber" dans Bash :
set noclobber
Vous pouvez également faire en sorte qu'un programme prenne l'entrée d'un fichier avec l'opérateur <. Le programme cat peut imprimer le contenu d'un fichier en prenant l'entrée du fichier et en envoyant la sortie vers la sortie standard.
cat < file
Bien sûr, vous pouvez simplement utiliser cat et spécifier le chemin du fichier comme argument, mais ce n'est qu'un exemple.
Vous pouvez rediriger l'erreur standard à l'aide d'un descripteur de fichier ou d'un nombre représentant l'une des formes d'E/S standard. Avec les descripteurs de fichier, 0 correspond à l'entrée standard, 1 à la sortie standard et 2 à l'erreur standard. La syntaxe dans Bash est [descripteur de fichier]>. Il est utile de rediriger l'erreur standard vers /dev/null pour se débarrasser des erreurs :
linux_command 2> /dev/null
Vous pouvez rediriger à la fois la sortie et l'entrée standard avec &>, ce qui est utile si vous devez envoyer un e-mail ou un message de forum décrivant un problème que vous rencontrez avec un programme :
linux_command &> file
Les E/S standard fonctionnent partout
Même avec les environnements graphiques disponibles aujourd'hui, les E/S standard restent importantes car il s'agit toujours de l'interface universelle, du bureau au serveur en passant par le mobile, basée sur le texte ASCII.