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

Es posible que haya utilizado una sintaxis comocmd0 | cmd1 | cmd2en su terminal demasiadas veces.

Probablemente también sepa que es la redirección de tubería la que se usa para redirigir la salida de un comando como entrada al 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.

Pipes en Linux: La idea general

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

  • Las tuberías 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 (Inter Process Communication) que toma elstdoutde un programa y lo reenvía alstdinde otro programa a través de un búfer.

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

uno de los mas simples example del comando de tubería es pasar algún resultado de comando al comando grep para buscar una cadena específica.

Para examplepuede buscar archivos con un nombre que contenga txt como este:

Tenga en cuenta: Pipe redirige stdout a stdin pero no como argumento de comando

Una cosa muy importante a entender es que la tubería transfiere lastdoutde un comando astdinde otro pero no como un argumento de comando. te lo explico con example.

y utilízalocatcomando sin ningún argumento, por defecto leerá destdin. Aquí hay un example:

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

Aquí usécatsin pasar ningún archivo, por lo que por defectostdin. 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, el gato leyó destdiny escribió esa misma línea parastdout.

Ahora considere el siguiente comando:

echo hey | cat

El segundo comando NO es equivalente acat hey. Aquí elstdout“hey”, se lleva a un búfer y se transfiere alstdindecat. Como no había argumentos en la línea de comandos, cat por defecto erastdinpara leer, y ya había algo en la entrada estándar, por lo que el comando cat lo tomó y lo imprimió enstdout.

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

Tipos de tuberías en Linux

Hay dos tipos de tuberías en Linux:

  • Canalizaciones sin nombre, también llamadas canalizaciones anónimas
  • Tuberías 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.

Suscribir

¿Ya tienes una cuenta?
Registrarse

Artículos Relacionados