La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Jugando con redirección en Bash

Presentaciones similares


Presentación del tema: "Jugando con redirección en Bash"— Transcripción de la presentación:

1 Jugando con redirección en Bash
Debian Day 2017 La Paz Este post tiene un artículo de consulta en: Rodrigo Garcia

2 Un pedazo de la filosofía UNIX
Haz que cada programa haga bien una cosa. Espera que la salida de cada programa se convierta en la entrada de otro programa, incluso desconocido. The UNIX philosophy is documented by Doug McIlroy

3 Streams y File-descriptors
Con la consola BASH (bourne again shell) se aprovechan los file-descriptors y streams para enviar la salida de un programa a un lugar, luego otro programa puede sacarla de ese lugar y utilizarla como su entrada. lsof -p $BASHPID ls /proc/<PID>/fd/

4 Streams y File-descriptors
File-descriptor (FD) Stdin (Entrada estándar) Stdout (Salida estándar) 1 Stderr (Error estándar) 2 lsof +f g -ap $BASHPID -d 0,1,2

5 Operadores comando > archivo comando >> archivo
comando1 | comando2 comando 2> archivo

6 Jugemos un poco ls $HOME > lista ls -l $HOME >> lista
ls no.existe > lista ls no.existe 2>> lista ls -R /var/log | grep “*.txt” find $HOME | grep “txt$” > mis_txts

7 ¿Salida estándar? Veamos a donde apunta: lsof +f g -ap $BASHPID -d 1
A mi me aparece: /dev/pts/1 y /dev/pts/1 es esta misma terminal por eso lo que sale en la salida estándar aparece en la pantalla. Si la redirigimos: ls -l $HOME > archivo Ahora stdout saldrá en “archivo”

8 ¿Entrada estandar? ls no lee nada de stdin por eso:
Digamos: echo “/var/log” > arch Luego: ls < arch # QUE? No sera : cat arch | ls #?? Es: cat arch | xargs ls # Ahhh! ls no lee nada de stdin por eso: ls < arch # no funciona En cambio si funciona: read A < arch echo $A

9 Error estándar Es similar a stdout solo que típicamente ahí solo van los mensajes de error. mv no.ex ex mv no.ex ex 2> errores combinando: ls no.existe 2>&1 reporte cat reporte Que pasa aqui, donde esta “reporte”?

10 El orden importa! nada hace que se apunte a “reporte”
ls no.existe 2>&1 reporte # hace: File descriptor (FD) Archivo > /dev/pts/5 ·----> /dev/pts/5 / 2 --´ nada hace que se apunte a “reporte”

11 Se evalúan primero los operadores antes que los comandos
ls algo-que-no-existe > reporte 2>&1 >: File descriptor (FD) Archivo > /dev/pts/5 > archivo > /dev/pts/5 2>&1: ·---> reporte / 2 ---´

12 Ahora se puede jugar más
ps aux --sort -rss | head for nombre in * do NS=$(echo $nombre | tr " " "_") mv "$nombre" "$NS" 2> /dev/null done

13 Aprovechando algunos comandos
tar -zcvf - carpeta/ | gpg \ -- symmetric --no-use-agent \ -- passphrase "123456" > \ carpeta.gpg # descifrar gpg --decrypt --no-use-agent \ -- passphrase \ carpeta.gpg | \ tar -C . -xvf -

14 Creative Commons Attribution 4.0 International License.
Gracias Esta presentación está bajo la licencia libre: Creative Commons Attribution 4.0 International License. Referencia más completa sobre esta charla:


Descargar ppt "Jugando con redirección en Bash"

Presentaciones similares


Anuncios Google