Antes de enseñarte los poderes que nos podrían proporcionar los Pipes, me gustaría mencionarte y recordate que en Linux/Unix cada nuevo proceso generado, es decir, cada nueva aplicación ejecutada, es inicializada con tres canales de datos, canales conocidos cómo streams. Ver clase.
Standar Input
Standar Output
Standar Error
El Standard input, es la entrada de datos de nuestro programa
En el Standard output el programa colocará todos los mensajes que necesita que el usuario visualice. Estos mensajes no deben de considerarse advertencias o errores.
En el Standard error el programa colocará todos los mensajes de advertencias y errores que puedan sucitarse durante la ejecución del mismo.
Ahora, veamos un ejemplo de cómo podemos sacarle provecho a los stream. El comando history nos permite conocer los últimos comandos ejecutados en nuestra sesión, ya para este punto del curso, seguro has ejecutado varios comandos en la terminal. Basta con que ejecutes history en tu terminal (Te prometo que no pasará nada malo ;D ).
juan@DESKTOP:~$ history
Una vez ejecutado estaremos visualizando en pantalla un listado de todos los comandos que hemos utilizado. Todo el texto que visualizamos (los comandos) se encuentran en el stream de el Standard output.
Si nosotros así lo deseamos, podemos almacenar esa salida en un archivo de texto plano. Basta con utilizar el signo mayor > que, seguido del nombre del archivo
juan@DESKTOP:~$ history > ultimos_comandos.txt
Con el signo mayor que, crearemos el archivo si este no existe, y colocaremos el output del programa allí; En caso que el archivo exista, y esté almacene algún tipo de contenido, el contenido será reemplazado por el output del programa. Si nosotros no queremos perder la contenido que posee un archivo, lo que podemos hacer es utilizar el doble signo mayor que.
juan@DESKTOP:~$ history >> ultimos_comandos.txt
Esto hará que el output sea agregado al final del archivo, sin reemplazar nada.
Una vez tenemos el output almacenado, hagamos algo interesante, utilicemos el comando grep para conocer qué archivos o folders has eliminado recientemente.
juan@DESKTOP:~$ grep < ultimos_comandos.txt "rm"
Al ejecutar esta sentencia estaremos visualizando los últimos comandos que cuentan con rm en su ejecución.
Con el signo menor que, estamos colocando todo el contenido del archivo cómo Standar Input del comando grep. A partir de estos inputs, el programa grep ya puede buscar rm
Existen comandos para muchas cosas, sin embargo, no existe un comando en la actualidad que lo haga todo. Si queremos hacer tareas complejas, es probable que tengamos que apoyarnos de más de un comando.
Regresemos al ejemplo anterior, donde nosotros necesitábamos conocer los archivos o folders eliminados recientemente. Para solucionar la problemática tuvimos que ejecutar el comando history y su output almacenarlo en un archivo, el cual nos sirvió cómo input del programa grep. ¿Obtuvimos el resultado deseado?, Si, pero, somos programadores par favar, siempre podemos mejorarlo. Es Aquí donde entran los TODOPODEROSOS PIPES a salvar el día, y hacer nuestro trabajo cómo administrador de servidores más sencillo.
Ejecutemos la siguiente sentencia.
juan@DESKTOP:~$ history | grep "rm"
¿Qué ha pasao’ amiwito, obtuviste el mismo resultado que en el ejemplo anterior?, Super interesante, ¿no lo crees? obtuvimos el mismo resultado solo que ahora con una sentencia mucho más corta, legible y sin tener que crear nuevos archivos en nuestro disco duro, bastante cool. 😎
El PIPE nos permitirá encadenar la ejecución de programas, pasando el output de uno cómo el input de otro. En este caso estamos colocando el output de history cómo el input de grep. El orden en el que se ejecutarán los programas es de izquierda a derecha y de esa misma manera es cómo se estarán pasados los outputs.
Y así cómo encadenamos la ejecución de dos comandos podemos hacerlo con tres, cinco, o con la n cantidad que necesitemos. Nosotros no estamos limitados únicamente a encadenar programas Unix/Linux, también podemos encadenar nuestros propios programas, no importa si están escritos en Java, Python, PHP etc… claro, siempre y cuando hayamos tomado en cuentos los streams en su codificación.
Gracias!!
Gracias, fue de muy gran ayuda,
Bien hecho!
Buenardo
Epicardo
No entendi absolutamente nada del comando
grep < ultimos_comandos.txt'rm'
no hallo ninguna diferencia entre ese comando y este
grep 'rm' ultimos_comandos.txt
Alguien podria ayudarme y decirme para que sirve realmente el simbolo menor que en la terminal
Gracias!
Your comment helped me to understand fully. Thank you
Buenisima explicacion, muchas gracias
Me gusta tu terminal!
Muchas gracias, me ha dejado los conceptos mucho más claros.
Muchísimas gracias, he entendido bastante, solamente tengo una pregunta, con los pipes entonces ¿hay alguna necesidad de usar los ‘>’, ‘<’, ‘>>’ ?
Genial!
Excelente explicación.
Muchas gracias 😊
Muy bueno, claramente explicado
Buenísimo el aporte, se entiende super bien
juan@DESKTOP:~$ history | grep “rm”
El pipe también te genera el archivo? o como seria con pipe
No, el Pipe no te generara el archivo.
En el primer ejemplo tu. Buscabas el historial - lo guardabas en un txt - luego con grep"rm" visualizabas los resultados.
con el pipe, te saltas el segundo paso, osea la creación del txt, y solo lo visualizas en pantalla.
Espero te haya podido ayudar.
Es correcto lo que dice Ludín.
Excelente resumen 😃
Que genial
Muchas gracias 💚
Buena explicacion!
Muy buena explicación… thanks
Me alegra que hayas comprendido todo 😉
Gracias 😄
Genial!
Muy buena la explicación
Excelente explicación me ayudo bastante. Gracias
buenisimo todo!
Muchas gracias 😊
Me encanto y me ayudo mucho gracias
Genial. Gracias.
De nada 😉
Muchas gracias por este articulo! Fue de gran utilidad para tener mayor claridad en los PIPES y los comandos
Me da mucha alegría que te haya podido ayudar 😊
¡Muchísimas gracias! Lo dejaste muy claro.
Me alegra que te haya servido 😊
Muy bueno!!!
👏👏 Me encantó la explicación.
Muchísimas gracias. Antes no lo entendía y ahora me encantan los Pipes. Excelente claridad!
Muchas gracias, esto refuerza a la clase anterior
WOOOOOOW! Quedé impresionado, en la clase del curso me preguntaba “yo para qué chuchas quiero todo esto?”. Y en efecto, tu tutorial me aclaró todo y me ocurrió el típico “Ahhhh ya entendí”.
En verdad, excelente aporte y muchísimas gracias, acabas de salvarme para muchas situaciones en mi futuro cómo desarrollador.
Eureka moment jajaja
Una observación:
grep < ultimos_comandos.txt"rm"
Es este caso no es redundante usar el ‘<’ ? Ya que por default grep utiliza un archivo como input?
Me ayudo mucho tu aporte, gracias. ❤️
jajaja lo mejor que he leído divertido y una explicación mas que clara, ídolo
Muchas gracias! ahora quedó mucho más claro.
Realmente me quedó muchísimo más claro con este post el uso de los PIPES. Gracias!
mucho mejor explicado que en la clase, gracias!
Muchas gracias por la información 👍
No puedo creer que me funcionó
No pued
1.
Wow, en serio te lo agradezco de corazón. Explicaste perfectamente con ejemplos, de forma clara y de modo que cualquiera pudiera seguir lo que decías sin necesitar archivos extra ni nada por el estilo. La verdad te felicito, se nota que tienes la voluntad de aprender, y más importante también de enseñar y ayudar. Vas a llegar muy lejos!
Alto crack!!! Gracias!!!
Muchas gracias! me sirvió un buen
Excelente resumen, debería ser tomado en cuenta en clase.
Gracias, muy buen material.