Sunteți pe pagina 1din 24

REDIRECCIONAMIE

NTO Y TUBERIAS

TEMA #5

CONTENIDO
Entrada estndar y salida estndar
Error estndar
Redireccionamiento
Tuberas

ENTRADA ESTNDAR Y SALIDA


ESTNDAR
Conceptos Claves
Los programas basados en la terminal tienden a
leer informacin desde una fuente y a escribirla en
un destino.
La fuente desde donde se leen los programas se
conoce como una entrada estndar (stdin, del ingls
standard in) y suele estar conectada por defecto al
teclado de la terminal.
El destino al que los programas escriben se conoce
como una salida estndar (stdout, del ingls
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

TIPOS DE PROGRAMAS
Programas grfi cos
Los programas grfi cos estn diseados para ejecutarse en
el entorno grfi co X.
Esperan que el usuario utilize el mouse y los componentes
grfi cos comunes tales como mens 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 fl ujo
suelen llamarse simplemente comandos.
Ejemplo ls y cat

ESCRITURA DE UNA SALIDA A UN


ARCHIVO
La shell bash usa > para redirigir un fl ujo de
stdout de proceso a un archivo.
[elvis@station elvis]$ ps aux > salida.txt
[elvis@station elvis]$
[elvis@station elvis]$ head salida.txt
USER PID %CPU %MEM VSZ RSS TTY STAT
1380 76

START TIME
Jun02 0:04

COMMAND

root

0.0

0.0

init [

root

0.0

0.0

SW

Jun02

0:00

[keventd]

root

0.0

0.0

SW

Jun02

0:00

[kapmd]

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 > salida.txt
[elvis@station elvis]$ ps aux >> salida.txt
[elvis@station elvis]$ head salidatxt
Tue Jun 3 16:57:23 EDT 2003
USER PID %CPU %MEM VSZ RSS TTY STAT
1380 76

START TIME
Jun02 0:04

COMMAND

root

0.0

0.0

init [

root

0.0

0.0

SW

Jun02

0:00

[keventd]

root

0.0

0.0

SW

Jun02

0:00

[kapmd]

REDIRECCIN 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 < nota.txt

ARCHIVOS ABIERTOS Y
DESCRIPTORES DE ARCHIVOS
Con el fi n de leer o escribir informacin en un archivo
un proceso debe abrir el archivo.
Los procesos de Linux (y Unix) mantienen el registro
de los archivos que estn abiertos mediante la
asignacin de un nmero entero a cada uno.
El nmero entero se conoce como un descriptor de
archivos.

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 ingls file descriptor).
Dentro del subdirectorio /proc/pid/fd, existe un enlace
simblico para cada archivo abierto por el proceso.
El nombre del enlace simblico es el nmero entero del
descriptor de archivo abierto y el enlace simblico apunta al
archivo mismo.

EJEMPLOS STDIN / STDOUT


[elvi s@station elvis]$ cat /etc/termcap
[1]+ Stopped cat /etc/termcap
[elvi s@station elvis]$
[elvi s@station elvis]$ ps
PID T TY
TIME
CMD
1368 pts/1
00:00:00 ba sh
1910 pts/1
00:00:00 ca t
1911 pts/1
00:00:00 ps
[elvi s@station elvis]$ ls -l /proc/1910/fd
total 0
lrwx------ 1 elvis
elvis
6 4 Sep 13 06:42
lrwx------ 1 elvis
elvis
6 4 Sep 13 06:42
lrwx------ 1 elvis
elvis
6 4 Sep 13 06:42
lr-x------ 1 elvis
elvis
6 4 Sep 13 06:42
/etc/termcap

0
1
2
3

-> /dev/tty1
-> /dev/tty1
-> /dev/tty1
->

DESCRIPTORES DE ARCHIVOS
Cuando un programa se ejecuta, automticamente se
le proporcionan 3 descriptores de archivo:
- Entrada estndar (stdin)
- Salida estndar (stdout)
- Error estndar (stderr)
Flujo

Descriptor

Abreviacin

Standard In

stdin

Standard Out

stdout

Standard Error

stderr

DESCRIPTORES DE ARCHIVOS

<>

REDIRECCIONAMIENTO
[ e lv is@st at io n el vi s]$ cat / e t c/ t e r mcap > / t mp/ foo
[ 1 ] + Stopped c at /e tc /termc a p > / tmp/foo
[ e lv is@st at io n el vi s]$
[ e lv is@st at io n el vi s]$ ps
P ID T TY
TI ME
CMD
1 36 8 pts/ 1
0 0 :0 0 : 0 0 bash
1 91 0 pts/ 1
0 0 :0 0 : 0 0 c at
1 91 1 pts/ 1
0 0 :0 0 : 0 0 ps
[ e lv is@st at io n el vi s]$ l s -l / proc/ 1 910 / fd
tota l 0
lrwx-----lrwx-----lrwx-----l r- x - - - - - -

1
1
1
1

elvis
elvis
elvis
elvis

elvis
elvis
elvis
elvis

64
64
64
64

Sep
Sep
Sep
Sep

13
13
13
13

06:42
06:42
06:42
06:42

0
1
2
3

->
->
->
->

/dev/tty1
/tmp/foo
/dev/tty1
/ e t c / t e rm c a p

ERROR ESTNDAR
Conceptos Claves
Los programas Unix reportan condiciones de
error a un destino llamado error estndar (stderr).
Usualmente, stderr est conectado a una
pantalla de terminal y los mensajes de error se
encuentran entremezclados con las salidas
estndar.
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 ESTNDAR (STDERR)


En la siguiente secuencia, el usuario elvis est
utilizando el comando head -1 para generar una
lista de las primeras lneas 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 <==

==> /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

head: /etc/rc.d/rc2.d: Is a directory

==> /etc/rc.d/rc.sysinit.rpmsave
<==

==> /etc/rc.d/rc3.d <==

#!/bin/bash

head: /etc/rc.d/rc3.d: Is a directory

EJEMPLO DE ERROR ESTNDAR


(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

ERROR ESTNDAR (STDERR)


Segundo fl ujo de salida
usado para reportar condiciones de error
Aunque no es obvio desde el principio, los comando
realmente estan enviando salida a dos fl ujos
independientes.
(stdout)
(stderr)

[elvis]$ head -1 /etc/rc.d/* > rcsummary.out 2>


rcsummary.err
[elvis]$

COMBINACIN 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 diseado para ser
compatible con sintaxis anteriores sh tambin
soporta esta sintaxis. Sin embargo, la sintaxis no
es conveniente.
Para simplifi car las cosas, bash usa >& para
combinar stdin y stdout como en el siguiente
ejemplo.

[elvis@station

elvis]$ head -1 /etc/rc.d/* >&


rcsummary.both

REDIRECCIN DE STDIN, STDOUT


Y STDERR EN BASH

TUBERAS
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 "tubera".
Varios de los comandos en Unix estn diseados
para operar como un filtro, leer la entrada desde
stdin y enviar la salida a stdout.
bash usa "|" para crear una tubera entre dos
comandos.

TUBERA (PIPES)
Pipe o tubera es una de las formas ms comunes y
efi caces para redirigir una combinacin de la salida
(salida estndar) de un comando la cual es
"entubada" directamente dentro de la entrada
(entrada estndar) de otro comando.
Con el fi n de crear una tubera por medio de bash,
los dos comandos se unen con una barra vertical |

EJEMPLO TUBERIA (PIPE)


Usando el comando fi nd 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]$

FILTRO DE SALIDA CON GREP

El comando grep se utiliza para buscar y extraer


lneas que contengan una cadena de texto
especfi co.
Ejemplo: Se trata de hallar un directorio llamado
templates. Utiliza el comando locate para
encontrarlo.
[prince@station prince]$ locate
templates

/etc/openldap/ldaptemplates.conf
/usr/share/doc/libxslt-1.0.27/html/libxslttemplates.html
/usr/share/doc/libxslt-1.0.27/templates.gif
/usr/share/doc/docbook-style-xsl1.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

[prince]$ locate templates | grep


prince
/

home/prince/.kde/share/apps/quanta/t
emplates

/home/prince/proj/templates
[prince]$

Con el fin de reducir la informacin


a
archivos ms importantes, prince
toma la stdout desde el comando
locate y crea una tubera para la
stdin del comando grep,

TAREA
Investigar la aplicacin y uso de los siguientes
comandos:
ps
Email
Grep
locate

S-ar putea să vă placă și