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 alstdin
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