Aprovecha el precio especial.

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14d

12h

42m

51s

105

Flujos estándar y cómo los Pipes nos pueden dar super poderes

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

streams.png
  • 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.

TRABAJEMOS CON LOS INPUTS Y OUTPUTS

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

PIPES - Un gran poder conlleva una gran responsabilidad 💪

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.

Termina el curso de Terminal y Línea de Comandos y nunca pares de aprender 🚀

Escribe tu comentario
+ 2
Ordenar por:
3
33241Puntos
5 años

Gracias!!

2
41Puntos
4 años

Gracias, fue de muy gran ayuda,

test pipes.PNG
2
4 años

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

<
2
1512Puntos
4 años

Muchas gracias, me ha dejado los conceptos mucho más claros.

2
5821Puntos
4 años

Muchísimas gracias, he entendido bastante, solamente tengo una pregunta, con los pipes entonces ¿hay alguna necesidad de usar los ‘>’, ‘<’, ‘>>’ ?

1
4556Puntos
4 años

Muy bueno, claramente explicado

1
3878Puntos
4 años

Buenísimo el aporte, se entiende super bien

1
10156Puntos
4 años

juan@DESKTOP:~$ history | grep “rm”

El pipe también te genera el archivo? o como seria con pipe

3
2167Puntos
4 años

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.

1
5427Puntos
5 años

Buena explicacion!

1
2294Puntos
4 años

Muy buena explicación… thanks

1
18879Puntos
4 años

Me alegra que hayas comprendido todo 😉

1
22719Puntos
4 años

Gracias 😄

1
11779Puntos
5 años

Muy buena la explicación

1
9985Puntos
4 años

Excelente explicación me ayudo bastante. Gracias

1
6756Puntos
4 años

buenisimo todo!

1
18879Puntos
4 años

Muchas gracias 😊

1
25842Puntos
4 años

Me encanto y me ayudo mucho gracias

1
11451Puntos
4 años

Muchas gracias por este articulo! Fue de gran utilidad para tener mayor claridad en los PIPES y los comandos

1
18879Puntos
4 años

Me da mucha alegría que te haya podido ayudar 😊

1
9676Puntos
4 años

¡Muchísimas gracias! Lo dejaste muy claro.

1
18879Puntos
4 años

Me alegra que te haya servido 😊

1
13595Puntos
4 años

👏👏 Me encantó la explicación.

1
1537Puntos
4 años

Muchísimas gracias. Antes no lo entendía y ahora me encantan los Pipes. Excelente claridad!

1
2167Puntos
4 años

Muchas gracias, esto refuerza a la clase anterior

0
23522Puntos
4 años

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.

0
3651Puntos
4 años

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?

0
6886Puntos
4 años

jajaja lo mejor que he leído divertido y una explicación mas que clara, ídolo

0
16980Puntos
4 años

Muchas gracias! ahora quedó mucho más claro.

0
1409Puntos
4 años

Realmente me quedó muchísimo más claro con este post el uso de los PIPES. Gracias!

0
48936Puntos
4 años

Muchas gracias por la información 👍

0
5242Puntos
4 años

No puedo creer que me funcionó ejercicio head.jpg

0
10040Puntos
4 años

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!

0
18203Puntos
4 años

Muchas gracias! me sirvió un buen

0
24682Puntos
4 años

Excelente resumen, debería ser tomado en cuenta en clase.

0
3646Puntos
4 años

Gracias, muy buen material.