GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué significa conectar Stdout y Stdin?

Estoy leyendo un libro, dice:

Cada proceso tiene al menos tres canales de comunicación disponibles:"entrada estándar
" (STDIN), "salida estándar" (STDOUT) y "error estándar" (STDERR).

La mayoría de los comandos aceptan su entrada desde STDIN y escriben su salida en STDOUT.
Escriben mensajes de error en STDERR. Esta convención le permite encadenar
comandos como bloques de construcción para crear canalizaciones compuestas.

El shell interpreta los símbolos < , > y >> como instrucciones para redirigir la entrada o salida de un comando hacia o desde un archivo.

Para conectar el STDOUT de un comando al STDIN de otro, use el |
símbolo, comúnmente conocido como tubería.

ps -ef | grep httpd

Básicamente, lo que esto dice es que la entrada estándar es un comando que permite al usuario escribir en un archivo, mientras que la salida estándar es un comando que tiene la salida de escritura del shell bash en el shell, y el error estándar es como la salida, pero solo es se invoca cuando hay un error en el sistema de archivos. Luego llegamos a la parte de conectar STDOUT y STDIN y estoy perdido.

Respuesta aceptada:

La entrada estándar y la salida estándar no son comandos.

Imagine los comandos como máquinas en una fábrica con una línea de montaje. La mayoría de las máquinas están diseñadas para tener una cinta transportadora para alimentar datos y una cinta transportadora para alimentar datos; son la entrada estándar y la salida estándar respectivamente. El error estándar es una abertura en el costado de la máquina donde puede expulsar los rechazos.

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

El diagrama de arriba muestra una cinta transportadora que pasa por dos máquinas. Los datos provienen del depósito de entrada a la izquierda, se alimentan a la máquina A, luego la salida se transmite a la máquina B (para la cual es entrada) y la salida de la máquina B se deposita en el depósito de salida a la derecha.

En términos de Unix, esto se llama canalización. La metáfora es la de la plomería:una tubería conecta la máquina A con la máquina B. La sintaxis de shell para la tubería anterior es

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

El < el símbolo de redirección le dice al shell que conecte commandA Entrada estándar al archivo input-file.txt antes de ejecutar commandA . (Puede colocar la redirección antes o después del nombre del comando). El > el símbolo de redirección le dice al shell que conecte commandB La salida estándar de output-file.txt . La tubería (“| “) El símbolo en el medio le dice al shell que conecte commandA Salida estándar de commandB entrada estándar antes de ejecutarlos.

Relacionado:¿Conectar 2 GND con diferencia de voltaje relativa?

Los comandos pueden tener más de una entrada y más de una salida, pero eso es material para otro día.


Linux
  1. ¿Configurar el Shell para imprimir Stderr y Stdout en diferentes colores?

  2. Salida a Stdout y al mismo tiempo Grep en un archivo?

  3. ¿Qué forma de redirigir la salida de un programa y todavía hacer que vaya a la salida estándar?

  4. ¿Redirigir y canalizar la salida?

  5. Cómo redirigir la salida a un archivo y stdout

¿Qué es chroot jail y cómo usarlo?

Cómo redirigir la salida a un archivo y salida estándar en Linux

¿Qué es '/dev/null 2&1' en Linux?

¿Confundido acerca de stdin, stdout y stderr?

Determinar si la salida es stdout o stderr

¿Cuál es la diferencia entre las cadenas OUTPUT y FORWARD en iptables?