GNU/Linux >> Tutoriales Linux >  >> Linux

¿En qué orden se ejecutan los comandos canalizados?

Realmente nunca he pensado en cómo el shell ejecuta realmente los comandos canalizados. Siempre me han dicho que la "salida estándar de un programa se canaliza into the stdin of another”, como una forma de pensar en las tuberías. Entonces, naturalmente, pensé que en el caso de decir, A | B , A se ejecutaría primero, luego B obtiene la salida estándar de A y usa la salida estándar de A como su entrada.

Pero he notado que cuando las personas buscan un proceso en particular en ps , incluirían grep -v "grep" al final del comando para asegurarse de que grep no aparece en el resultado final.
Esto significa que en el comando ps aux | grep "bash" | grep -v "grep" se da a entender que ps sabía que grep se estaba ejecutando y, por lo tanto, está en la salida de ps . Pero si ps termina de ejecutarse antes de que su salida se canalice a grep , ¿cómo supo que grep estaba corriendo?

[email protected]: ~$ ps | grep ".*"
PID TTY          TIME CMD
3773 pts/0    00:00:00 bash
3784 pts/0    00:00:00 ps
3785 pts/0    00:00:00 grep

Respuesta aceptada:

Los comandos canalizados se ejecutan simultáneamente. Cuando ejecuta ps | grep … , es la suerte del sorteo (o una cuestión de detalles del funcionamiento del shell combinado con el ajuste fino del programador en las entrañas del kernel) si ps o grep comienza primero y, en cualquier caso, continúan ejecutándose simultáneamente.

Esto se usa muy comúnmente para permitir que el segundo programa procese los datos tal como salen del primer programa, antes de que el primer programa haya completado su operación. Por ejemplo

grep pattern very-large-file | tr a-z A-Z

comienza a mostrar las líneas coincidentes en mayúsculas incluso antes de grep ha terminado de recorrer el archivo grande.

grep pattern very-large-file | head -n 1

muestra la primera línea coincidente y puede dejar de procesar mucho antes de grep ha terminado de leer su archivo de entrada.

Si lee en alguna parte que los programas canalizados se ejecutan en secuencia, huya de este documento. Los programas canalizados se ejecutan simultáneamente y siempre lo han hecho.


Linux
  1. Comandos programados

  2. ¿Qué hace que Grep considere que un archivo es binario?

  3. Linux:¿cómo saber qué hacer con Grep en Dmesg?

  4. ¿Comprender los comandos Ssh sospechosos?

  5. ¿Qué significa rc en archivos de puntos?

Qué es Git Bash; Trabajar con comandos de Git Bash

Cómo ejecutar comandos de Linux en segundo plano

Cómo ejecutar comandos Sudo sin contraseña

Cómo ejecutar comandos sudo sin contraseña

¿Qué significa \b en un patrón grep?

Comandos para aprender sobre un sistema desconocido