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

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

Embed Size (px)

Citation preview

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

Linux 1

Linux RHC030

Modulo 7. Standard I/O y tuberias (Pipes)

Relator : Cristian Leiva

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

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

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

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

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

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

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

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.

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

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

USER PID %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]

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

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

USER PID %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]

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

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

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

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.

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

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.

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

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

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

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.

Flujo Descriptor Abreviación

Standard In 0 stdin

Standard Out 1 stdout

Standard Error 2 stderr

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

13© 2007 Linux. Todos los derechos reservados.

Descriptores de Archivos

<>

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

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

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

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

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

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

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

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

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

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]$

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

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

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

20© 2007 Linux. Todos los derechos reservados.

Redirección de stdin, stdout y stderr en bash

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

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

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

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 |

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

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]$

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

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 aarchivos 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".

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

25© 2007 Linux. Todos los derechos reservados.