GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa si intende per collegamento di Stdout e Stdin?

Sto leggendo un libro, dice:

Ogni processo ha a disposizione almeno tre canali di comunicazione:"standard
input" (STDIN), "standard output" (STDOUT) e "standard error" (STDERR).

La maggior parte dei comandi accetta il loro input da STDIN e scrivono il loro output su STDOUT.
Scrivono messaggi di errore su STDERR. Questa convenzione ti consente di mettere insieme
comandi come blocchi costitutivi per creare pipeline composite.

La shell interpreta i simboli < , > e >> come istruzioni per reindirizzare l'input o l'output di un comando verso o da un file.

Per collegare lo STDOUT di un comando allo STDIN di un altro, utilizzare il |
simbolo, comunemente noto come pipa.

ps -ef | grep httpd

Quindi fondamentalmente quello che sta dicendo è che l'input standard è un comando che consente all'utente di scrivere su un file, mentre l'output standard è un comando che ha l'output di scrittura della shell bash nella shell, e l'errore standard è proprio come l'output ma è solo invocato quando si verifica un errore nel file system. Poi arriviamo alla parte di collegare STDOUT e STDIN e mi sono perso.

Risposta accettata:

Lo standard input e lo standard output non sono comandi.

Immagina i comandi come macchine in una fabbrica con una catena di montaggio. La maggior parte delle macchine è progettata per avere un nastro trasportatore per inserire i dati e un nastro trasportatore per far uscire i dati; sono rispettivamente lo standard input e lo standard output. L'errore standard è un'apertura sul lato della macchina dove può espellere gli scarti.

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

Il diagramma sopra mostra un nastro trasportatore che passa attraverso due macchine. I dati provengono dal serbatoio di input a sinistra, vengono inviati alla macchina A, quindi l'output viene convogliato ulteriormente alla macchina B (per la quale è input) e l'output della macchina B viene depositato nel secchio di output a destra.

In termini unix, questo è chiamato pipeline. La metafora è quella dell'impianto idraulico:un tubo collega la macchina A alla macchina B. La sintassi della shell per la tubazione sopra è

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

Il < il simbolo di reindirizzamento dice alla shell di connettere commandA è l'input standard del file input-file.txt prima di avviare commandA . (Puoi inserire il reindirizzamento prima o dopo il nome del comando.) Il > il simbolo di reindirizzamento dice alla shell di connettere commandB l'output standard di output-file.txt . La pipe ("| Il simbolo ") al centro dice alla shell di connettere commandA l'output standard di commandB è l'input standard prima di avviarli.

Correlati:Collegamento di 2 GND con differenza di tensione relativa?

I comandi possono avere più di un input e più di un output, ma questo è materiale per un altro giorno.


Linux
  1. Reindirizzamento e uscita del tubo?

  2. Iptables e proxy trasparenti?

  3. Cosa sono U_str, Recv-q e Send-q nell'output di SS?

  4. Perché Deis e che cos'è?

  5. Qual è la differenza nel reindirizzare un output usando >, &>, >&e 2&>?

Che cos'è chroot jail e come usarlo?

Che cos'è "/dev/null 2&1" in Linux

È possibile rendere l'output di stdout e stderr di colori diversi in XTerm o Konsole?

Confuso su stdin, stdout e stderr?

Qual è la differenza tra le catene OUTPUT e FORWARD in iptables?

Cosa produce pwd?