Francisco Javier López Torrijos
Analista Sistemas Informáticos de Gestión
Diseño y Desarrollo Web
Las Pipes (canalización) se usan para redireccionar la stdout de un programa hacia la la stdin de otro, o lo que es lo mismo utilizar la salida de un programa como entrada de otro, en principio no hay límite en el número de programas utilizados, veamos un ejemplo para genérico para comprender su funcionamiento
programa1 | programa2 | script3 | ..... | programaN
Ahora un ejemplo mas práctico, el cual utilizaremos para ver la línea de la salida de ifconfig (herramienta que nos devuelve la información de una tarjeta de red) en la que aparece la MAC de la misma, mediante grep
ifconfig eth0 | grep direcciónHW
la cual, suponiendo la existencia en nuestro sistema de una tarjeta de red eth0, nos devuelve algo parecido a:
eth0 Link encap:Ethernet direcciónHW 00:15:f2:1b:65:ec
Las Pipes pueden llegar a ser una herramienta muy potente, mucho mas de lo que parece con la primera impresión, tanto para seguimiento de errores, como en configuración del sistema, seguridad,... y todo aquello que la imaginación nos permita
Vamos a ver un ejemplo en el que utilizaremos la salida de un comando mediante una Pipes (|), para utilizarla con otro comando para realizar una tarea repetitiva, y así agilizar nuestro trabajo.
Voy a utilizar algunos comandos que no hemos visto, que veremos mas adelante en una sección dedicada a los comandos mas comunes, por lo que simplemente diré lo que hacen a forma de indicación. Si alguien tiene interés en ir investigando para conocer más a fondo los distintos comandos, os recuerdo que podéis utilizar man (man comando) o info (info comando) para ver todas las opciones y algunos ejemplos de los comandos que vayamos viendo.
Abriremos un terminal si estamos utilizando una distribución con entorno gráfico, que en estos tiempos será lo mas habitual.
Con el pipe le pasamos a rm mediante xargs cada resultado devuelto por ls *1, por lo que se construyen 4 comandos rm y el nombre de cada fichero que cumple el patrón *1
En este caso en concreto podríamos haber realizado lo mismo con:
rm *1
Pero como indiqué antes hemos utilizado un pipe para ilustrar un ejemplo sencillo