La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Linux1 Linux RHC030 Modulo 7. Standard I/O y tuberias (Pipes) Relator : Cristian Leiva.

Presentaciones similares


Presentación del tema: "Linux1 Linux RHC030 Modulo 7. Standard I/O y tuberias (Pipes) Relator : Cristian Leiva."— Transcripción de la presentación:

1 Linux1 Linux RHC030 Modulo 7. Standard I/O y tuberias (Pipes) Relator : Cristian Leiva

2 2© 2007 Linux. Todos los derechos reservados. Unidad 7 – Sistemas de Archivos Linux  Entrada estándar y salida estándar  Error estándar  Tuberías

3 3© 2007 Linux. Todos los derechos reservados.  Conceptos Claves  Los programas basados en la terminal tienden a leer información desde una fuente y a escribir la información en un destino.  La fuente desde donde se leen los programas se conoce como una entrada estándar (stdin, del inglés standard in) y suele estar conectada al teclado de la terminal.  El destino al que los programas escriben se conoce como una salida estándar (stdout, del inglés standard out) y suele estar conectada a la pantalla de la terminal.  Cuando se utiliza la shell bash, la stdout puede redirigirse mediante > o >> y la stdin puede redirigirse mediante <. Entrada estándar y salida estándar

4 4© 2007 Linux. Todos los derechos reservados. Tipos de Programas  Programas gráficos –Los programas gráficos están diseñados para ejecutarse en el entorno gráfico X. –Expect the user to be using a mouse, popup menus and buttons, for user input –Esperan que el usuario utilize el mouse y los componentes gráficos comunes tales como menús emergentes y botones para la entrada de datos –Ejemplo – Mozilla Web Browser  Programas de pantalla –Los programas de pantalla esperan utilizar una consola de texto. –Apropiados para terminales y consolas virtuales –Ejemplo – vi y nano  Programas de terminal –Reunen entradas y salidas de pantalla en un flujo –suelen llamarse simplemente comandos. –Ejemplo – ls y cat

5 5© 2007 Linux. Todos los derechos reservados. Entrada estándar (stdin) y salida estándar (stdout)  Los programas de terminal suelen leer información como un flujo desde una sola fuente tal como el teclado de una terminal (stdin)  Generalmente, escriben información como un flujo a un solo destino como por ejemplo una pantalla (stdout)  Generalmente, stdin y stdout están conectadas a la terminal que ejecuta el comando.  Se considera conveniente redirigir (stdin) desde (stdout) hacia los archivos.

6 6© 2007 Linux. Todos los derechos reservados. Escritura de una salida a un archivo  La shell bash usa > para redirigir un flujo de stdout de proceso a un archivo. [elvis@station elvis]$ ps aux > sluggish.txt [elvis@station elvis]$ [elvis@station elvis]$ head sluggish.txt USERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1380 76 ? S Jun02 0:04 init [ root 2 0.0 0.0 0 0 ? SW Jun02 0:00 [keventd] root 3 0.0 0.0 0 0 ? SW Jun02 0:00 [kapmd]

7 7© 2007 Linux. Todos los derechos reservados. Agregando una salida a un archivo  Para agregar una salida de un comando a un archivo, en lugar de sobrescribirlo, bash usa >>. [elvis@station elvis]$ date > sluggish.txt [elvis@station elvis]$ ps aux >> sluggish.txt [elvis@station elvis]$ head sluggish.txt Tue Jun 3 16:57:23 EDT 2003 USERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1380 76 ? S Jun02 0:04 init [ root 2 0.0 0.0 0 0 ? SW Jun02 0:00 [keventd] root 3 0.0 0.0 0 0 ? SW Jun02 0:00 [kapmd]

8 8© 2007 Linux. Todos los derechos reservados. Redirección de stdin  bash usa < para hacer que lean entradas desde alguna parte diferente al teclado. [elvis]$ mail -s "Computer is sluggish" root@localhost@localdomain Hey root... I'm sending a list of processes that were running in a separate email. Thanks! --elvis. Cc: [elvis]$ mail -s "ps output" root@localhost@localdomain < sluggish.txt

9 9© 2007 Linux. Todos los derechos reservados. Archivos abiertos y descriptores de archivos  Con el fin de leer o escribir información en un archivo un proceso debe abrir el archivo.  Los procesos de Linux (y Unix) mantienen el registro de los archivos que están abiertos mediante la asignación de un número entero a cada uno.  El número entero se conoce como un descriptor de archivos.

10 10© 2007 Linux. Todos los derechos reservados. Archivos abiertos y descriptores de archivos  Cada proceso tiene un subdirectorio asociado bajo /proc llamado como su PID (ID del proceso). –El subdirectorio del proceso a su vez tiene un subdirectorio llamado fd (del inglés file descriptor). –Dentro del subdirectorio /proc/pid/fd, existe un enlace simbólico para cada archivo abierto por el proceso. –El nombre del enlace simbólico es el número entero del descriptor de archivo abierto y el enlace simbólico apunta al archivo mismo.

11 11© 2007 Linux. Todos los derechos reservados. Ejemplos stdin / stdout [elvis@station elvis]$ cat /etc/termcap [1]+ Stopped cat /etc/termcap [elvis@station elvis]$ [elvis@station elvis]$ ps PID TTY TIME CMD 1368 pts/1 00:00:00 bash 1910 pts/1 00:00:00 cat 1911 pts/1 00:00:00 ps [elvis@station elvis]$ ls -l /proc/1910/fd total 0 lrwx------1 elvis elvis 64 Sep 13 06:42 0 -> /dev/tty1 lrwx------1 elvis elvis 64 Sep 13 06:42 1 -> /dev/tty1 lrwx------1 elvis elvis 64 Sep 13 06:42 2 -> /dev/tty1 lr-x------1 elvis elvis 64 Sep 13 06:42 3 -> /etc/termcap

12 12© 2007 Linux. Todos los derechos reservados. Descriptores de Archivos  Como protocolo de Linux (y Unix), cada proceso hereda tres archivos abiertos tras el inicio. –Primero, descriptor de archivo 0, es la entrada estándar. –Segundo, descriptor de archivo 1, es la salida estándar. –Tercero, descriptor de archivo 2, es el error estándar. FlujoDescriptorAbreviación Standard In0stdin Standard Out1stdout Standard Error2stderr

13 13© 2007 Linux. Todos los derechos reservados. Descriptores de Archivos <>

14 14© 2007 Linux. Todos los derechos reservados. Redireccionamiento [elvis@station elvis]$ cat /etc/termcap > /tmp/foo [1]+ Stopped cat /etc/termcap >/tmp/foo [elvis@station elvis]$ [elvis@station elvis]$ ps PID TTY TIME CMD 1368 pts/1 00:00:00 bash 1910 pts/1 00:00:00 cat 1911 pts/1 00:00:00 ps [elvis@station elvis]$ ls -l /proc/1910/fd total 0 lrwx------1 elvis elvis 64 Sep 13 06:42 0 -> /dev/tty1 lrwx------1 elvis elvis 64 Sep 13 06:42 1 -> /tmp/foo lrwx------1 elvis elvis 64 Sep 13 06:42 2 -> /dev/tty1 lr-x------1 elvis elvis 64 Sep 13 06:42 3 -> /etc/termcap

15 15© 2007 Linux. Todos los derechos reservados.  Conceptos Claves  Los programas Unix reportan condiciones de error a un destino llamado error estándar (stderr).  Usualmente, stderr está conectado a una pantalla de terminal y los mensajes de error se encuentran entremezclados con las salidas estándar.  Cuando se utiliza la shell bash, el flujo de stderr puede redirigirse a un archivo mediante 2>.  Al utilizar bash, el flujo de stderr puede combinarse con el flujo de stdout mediante 2>&1 o >& Error estándar

16 16© 2007 Linux. Todos los derechos reservados. Error estándar (stderr)  En la siguiente secuencia, elvis está utilizando el comando head -1 para generar una lista de las primeras líneas de todos los archivos en el directorio /etc/rc.d.  [elvis@station elvis]$ head -1 /etc/rc.d/*  ==> /etc/rc.d/init.d <==  head: /etc/rc.d/init.d: Is a directory  ==> /etc/rc.d/rc <==  #! /bin/bash  ==> /etc/rc.d/rc0.d <==  head: /etc/rc.d/rc0.d: Is a directory  ==> /etc/rc.d/rc1.d <==  head: /etc/rc.d/rc1.d: Is a directory  ==> /etc/rc.d/rc2.d <==  head: /etc/rc.d/rc2.d: Is a directory  ==> /etc/rc.d/rc3.d <==  head: /etc/rc.d/rc3.d: Is a directory  ==> /etc/rc.d/rc4.d <==  head: /etc/rc.d/rc4.d: Is a directory  ==> /etc/rc.d/rc5.d <==  head: /etc/rc.d/rc5.d: Is a directory  ==> /etc/rc.d/rc6.d <==  head: /etc/rc.d/rc6.d: Is a directory  ==> /etc/rc.d/rc.local <==  #!/bin/sh  ==> /etc/rc.d/rc.sysinit <==  #!/bin/bash  ==> /etc/rc.d/rc.sysinit.rpmsave <==  #!/bin/bash

17 17© 2007 Linux. Todos los derechos reservados. Ejemplo de Error estándar (stderr)  [elvis@station elvis]$ head -1 /etc/rc.d/* > rcsummary.out  head: /etc/rc.d/init.d: Is a directory  head: /etc/rc.d/rc0.d: Is a directory  head: /etc/rc.d/rc1.d: Is a directory  head: /etc/rc.d/rc2.d: Is a directory  head: /etc/rc.d/rc3.d: Is a directory  head: /etc/rc.d/rc4.d: Is a directory  head: /etc/rc.d/rc5.d: Is a directory  head: /etc/rc.d/rc6.d: Is a directory

18 18© 2007 Linux. Todos los derechos reservados. Error estándar (stderr)  Segundo flujo de salida –usado para reportar condiciones de error  Aunque no es obvio desde el principio, los comando realmente estan enviando salida a dos flujos independientes. –(stdout) –(stderr) [elvis]$ head -1 /etc/rc.d/* > rcsummary.out 2> rcsummary.err [elvis]$

19 19© 2007 Linux. Todos los derechos reservados. Combinación de stdout y stderr  Usando 2>&1 para combinar stdout y stderr se introdujo en la shell Unix original, la shell Bourne (sh). Dado que bash está diseñado para ser compatible con sintaxis anteriores sh también soporta esta sintaxis. Sin embargo, la sintaxis no es conveniente.  Para simplificar las cosas, bash usa >& para combinar stdin y stdout como en el siguiente ejemplo. [ elvis@station elvis]$ head -1 /etc/rc.d/* >& rcsummary.both

20 20© 2007 Linux. Todos los derechos reservados. Redirección de stdin, stdout y stderr en bash

21 21© 2007 Linux. Todos los derechos reservados.  Conceptos Claves  El flujo de stdout desde un proceso puede estar conectado al flujo de stdin de otro proceso mediante lo que Unix llama una "tubería".  Varios de los comandos en Unix están diseñados para operar como un filtro, leer la entrada desde stdin y enviar la salida a stdout.  bash usa "|" para crear una tubería entre dos comandos. Tuberías

22 22© 2007 Linux. Todos los derechos reservados. Tubería (Pipes)  Pipe o tubería es una de las formas más comunes y eficaces para redirigir una combinación de la salida (salida estándar) de un comando la cual es "entubada" directamente dentro de la entrada (entrada estándar) de otro comando.  Con el fin de crear una tubería por medio de bash, los dos comandos se unen con una barra vertical |

23 23© 2007 Linux. Todos los derechos reservados. Ejemplo Tuberia (Pipe)  Usando el comando find para listar los archivos alfabeticamente [prince]$ find /etc -size +100k 2>/dev/null | sort /etc/aep/aeptarg.bin /etc/lynx.cfg.ja /etc/makedev.d/cciss /etc/squid/squid.conf /etc/squid/squid.conf.default /etc/termcap [prince]$

24 24© 2007 Linux. Todos los derechos reservados. Filtro de salida con grep  El comando grep se utiliza para buscar y extraer líneas que contengan una cadena de texto específico.  Ejemplo: Se trata de hallar un directorio llamado templates que se creó hace unos meses. Utiliza el comando locate para encontrarlo. [prince]$ locate templates | grep prince /home/prince/.kde/share/apps/quanta/templates /home/prince/proj/templates [prince]$  [prince@station prince]$ locate templates  /etc/openldap/ldaptemplates.conf  /usr/share/doc/libxslt-1.0.27/html/libxslt- templates.html  /usr/share/doc/libxslt-1.0.27/templates.gif  /usr/share/doc/docbook-style-xsl- 1.58.1/docsrc/templates.xml  /usr/share/man/man5/ldaptemplates.conf.5.gz  /usr/share/man/man3/ldap_free_templates.3.gz  /usr/share/man/man3/ldap_init_templates_buf.3.gz  /usr/share/man/man3/ldap_init_templates.3.gz ... Con el fin de reducir la información a archivos más importantes, prince toma la stdout desde el comando locate y crea una tubería para la stdin del comando grep, "buscando" la palabra "prince".

25 25© 2007 Linux. Todos los derechos reservados.


Descargar ppt "Linux1 Linux RHC030 Modulo 7. Standard I/O y tuberias (Pipes) Relator : Cristian Leiva."

Presentaciones similares


Anuncios Google