GNU/Linux >> Tutoriels Linux >  >> Linux

Que signifie connecter Stdout et Stdin ?

Je lis un livre, il dit :

Chaque processus dispose d'au moins trois canaux de communication :"entrée standard" (STDIN), "sortie standard" (STDOUT) et "erreur standard" (STDERR).

La plupart des commandes acceptent leur entrée depuis STDIN et écrivent leur sortie dans STDOUT.
Elles écrivent des messages d'erreur dans STDERR. Cette convention vous permet d'enchaîner
des commandes comme des blocs de construction pour créer des pipelines composites.

Le shell interprète les symboles < , > , et >> comme instructions pour rediriger l'entrée ou la sortie d'une commande vers ou depuis un fichier.

Pour connecter le STDOUT d'une commande au STDIN d'une autre, utilisez le |
symbole, communément appelé tuyau.

ps -ef | grep httpd

Donc, fondamentalement, ce que cela dit, c'est que l'entrée standard est une commande qui permet à l'utilisateur d'écrire dans un fichier, tandis que la sortie standard est une commande qui a la sortie d'écriture du shell bash dans le shell, et l'erreur standard est comme la sortie mais c'est seulement invoqué en cas d'erreur dans le système de fichiers. Ensuite, nous arrivons à la partie de connexion STDOUT et STDIN et je suis perdu.

Réponse acceptée :

L'entrée standard et la sortie standard ne sont pas des commandes.

Imaginez les commandes comme des machines dans une usine avec une chaîne de montage. La plupart des machines sont conçues pour avoir une bande transporteuse pour introduire les données et une bande transporteuse pour extraire les données ; ce sont respectivement l'entrée standard et la sortie standard. L'erreur standard est une ouverture sur le côté de la machine où elle peut éjecter les rebuts.

+-------+     +------------------+       +------------------+     +------+
| input |     |    machine A     |       |    machine B     |     |output|
| reser ­­­|=====|<stdin     stdout>|=======|<stdin     stdout>|=====|bucket|
| ‑voir |  →  |      stderr      |   →   |      stderr      |  →  |      |
+-------+     +------------------+       +------------------+     +------+
                      ||                          ||

Le schéma ci-dessus montre une bande transporteuse qui passe par deux machines. Les données proviennent du réservoir d'entrée à gauche, sont transmises à la machine A, puis la sortie est acheminée vers la machine B (pour laquelle elle est entrée), et la sortie de la machine B est déposée dans le godet de sortie à droite.

En termes Unix, cela s'appelle un pipeline. La métaphore est celle de la plomberie :un tuyau relie la machine A à la machine B. La syntaxe shell pour le pipeline ci-dessus est

<input-file.txt commandA | commandB >output-file.txt

Le < le symbole de redirection indique au shell de se connecter commandA l'entrée standard du fichier input-file.txt avant de lancer commandA . (Vous pouvez placer la redirection avant ou après le nom de la commande.) Le > le symbole de redirection indique au shell de se connecter commandB la sortie standard de output-file.txt . Le tube ("| ") Le symbole au milieu indique au shell de se connecter commandA la sortie standard de commandB l'entrée standard avant de les lancer.

Connexe :Connexion de 2 GND avec une différence de tension relative ?

Les commandes peuvent avoir plus d'une entrée et plus d'une sortie, mais c'est du matériel pour un autre jour.


Linux
  1. Iptables et proxys transparents ?

  2. Afficher uniquement Stderr à l'écran, mais écrire à la fois Stdout et Stderr dans un fichier ?

  3. Que sont U_str, Recv-q et Send-q dans la sortie Ss ?

  4. Pourquoi Deis et qu'est-ce que c'est ?

  5. Comment rediriger la sortie vers un fichier et stdout

Qu'est-ce que la prison chroot et comment l'utiliser ?

Qu'est-ce que '/dev/null 2&1' sous Linux

Rediriger et canaliser la sortie ?

Est-il possible de faire en sorte que les sorties stdout et stderr soient de couleurs différentes dans XTerm ou Konsole ?

Confus à propos de stdin, stdout et stderr ?

Quelle est la différence entre les chaînes OUTPUT et FORWARD dans iptables ?