GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué son las tuberías en Linux? ¿Cómo funciona la redirección de tuberías?

Es posible que haya utilizado una sintaxis como cmd0 | cmd1 | cmd2 en su terminal demasiadas veces.

Probablemente también sepa que es la redirección de tuberías la que se usa para redirigir la salida de un comando como entrada para el siguiente comando.

¿Pero sabes lo que hay debajo? ¿Cómo funciona realmente la redirección de tuberías?

No te preocupes porque hoy desmitificaré las tuberías de Unix para que la próxima vez que tengas una cita con esas elegantes barras verticales, sepas exactamente lo que está sucediendo.

Nota:he usado el término Unix en algunos lugares porque el concepto de conductos (como tantas otras cosas en Linux) se origina en Unix.

Pipas en Linux:La idea general

Esto es lo que verá en todas partes con respecto a "¿qué son las tuberías de Unix?":

  • Los conductos de Unix son un mecanismo IPC (Comunicación entre procesos), que reenvía la salida de un programa a la entrada de otro programa.

Ahora, esta es la explicación general que todos dan. Quiero ir más profundo. Reformulemos la línea anterior de una manera más técnica eliminando las abstracciones:

  • Las tuberías de Unix son un mecanismo IPC (Comunicación entre procesos) que toma el stdout de un programa y lo reenvía al stdin de otro programa a través de un búfer.

Mucho mejor. Eliminar la abstracción lo hizo mucho más limpio y preciso. Puedes mirar el siguiente diagrama para entender cómo funciona la tubería:

Uno de los ejemplos más simples del comando de canalización es pasar algún resultado de comando al comando grep para buscar una cadena específica.

Por ejemplo, puede buscar archivos con un nombre que contenga txt como este:

Recuerde:Pipe redirige stdout a stdin pero no como argumento de comando

Una cosa muy importante para entender es que la tubería transfiere el stdout de un comando a stdin de otro pero no como un argumento de comando. Lo explicaré con un ejemplo.

Si usas cat comando sin ningún argumento, se leerá de forma predeterminada desde stdin . He aquí un ejemplo:

$ cat
Subscribe to Linux Handbook for more articles like this
^D
Subscribe to Linux Handbook for more articles like this

Aquí usé cat sin pasar ningún archivo, por lo que el valor predeterminado es stdin . A continuación, escribí una línea y luego usé Ctrl+d para hacerle saber que terminé de escribir (Ctrl+d implica EOF o Fin de archivo). Una vez que terminé de escribir, cat leyó desde stdin , y escribió esa misma línea en stdout .

Ahora considere el siguiente comando:

echo hey | cat

El segundo comando NO es equivalente a cat hey . Aquí, el stdout , "hey", se lleva a un búfer y se transfiere a stdin de cat . Como no había argumentos en la línea de comandos, cat por defecto era stdin para leer, y ya había algo en la entrada estándar, por lo que el comando cat lo tomó y lo imprimió en stdout .

De hecho, creé un archivo llamado hey y le puse algo de contenido. Puedes ver la diferencia claramente en la imagen a continuación:

Tipos de tuberias en Linux

Hay dos tipos de conductos en Linux:

  • Tubos sin nombre, también llamados conductos anónimos
  • Tubos con nombre

Lea la historia completa

El resto del artículo está disponible solo para miembros de LHB. Puede registrarse ahora GRATIS para leer el resto de este artículo junto con el acceso a todas las publicaciones exclusivas para miembros. También se suscribe a nuestro boletín quincenal de Linux.

Suscríbete¿Ya tienes una cuenta?Iniciar sesión
Linux
  1. ¿Qué es un comando Chown en Linux y cómo usarlo?

  2. Tuberías y redirección en Linux - ¡Explicado!

  3. Cómo usar la redirección de comandos en Linux

  4. ¿Qué significa - en este comando de Linux?

  5. ¿Cómo canalizo el comando dividido de Linux?

Cómo encontrar qué dispositivos están conectados a la red en Linux

¿Qué son los puertos? ¿Cómo verificar los puertos abiertos de Linux?

ExpliqueShell:encuentre lo que hace cada parte de un comando de Linux

¿Qué significa el comando Cat en Linux?

¿Qué es el comando fuente en Linux y cómo funciona?

¿Qué es el comando Grep en Linux? ¿Por qué se usa y cómo funciona?