viernes, 9 de septiembre de 2011

Sesión 6 Redireccionamiento de Entrada/Salida

-Entrada estándar (STDIN) : Teclado

-Salida estándar (STDOUT) : Pantalla

-Error estándar (STDERR) : Pantalla

A continuación se muestra una tabla con los operadores de redirección:

Operador
Acción
>
Redirecciona la salida a un archivo
>>
Agrega la salida a un archivo
2>
Redirecciona la salida de error estándar a un archivo
2>>
Agrega a un archivo la salida de error estándar
<
Envia un archivo como entrada de un comando



Veamos algunos ejemplos:

En este ejemplo la salida del comando cat se redireccionará al archivo passwd-backup (si el archivo no existe lo crea). 
mi-usuario@maquina:~$ cat /etc/passwd > passwd-backup 
mi-usuario@maquina:~$

Ahora vamos a ver el contenido del archivo passwd-backup

mi-usuario@maquina:~$ cat passwd-backup

cat passwd-backup
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
- - El resto de la salida de este comando se omite - -

Vamos a agregar contenido al archivo passwd-backup
mi-usuario@maquina:~$ cat /etc/hosts >> passwd-backup 
mi-usuario@maquina:~$


Si vuelves a leer el contenido del archivo passwd-backup encontrarás que se agregó el contenido del archivo /etc/hosts, hay que fijarnos que el operador que utizamos fue el de agregar la salida (>>), si hubieramos ocupado el operador de redirección de la salida (>) el contenido del archivo passwd-backup  se hubiera sobrescrito, es decir el contenido actual (del archivo /etc/passwd) se borraría y se reemplazaría por el contenido del archivo nuevo (/etc/hosts).

Ahora vamos a producir a propósito un error, vamos a utilizar el comando touch sin argumentos, por lo cual nos debería salir un error en pantalla (STDERR), pero lo vamos a redireccionar a un archivo.


mi-usuario@maquina:~$ touch 2>  archivo-errores
mi-usuario@maquina:~$ 

A continuación vamos a abrir el contenido del archivo archivo-errores:


mi-usuario@maquina:~$ cat archivo-errores
touch: falta un archivo como argumento
Pruebe `touch --help' para más información.

Como te puedes dar cuenta el contenido de archivo-errores es el error producido por el comando touch, solo que se ha redireccionado a un archivo. Ahora prueba agregando (2>>) el error estandar que produce el comando mkdir al archivo archivo-errores.

Ahora vamos a ver como pasar un archivo como entrada estándar a un comando:

Primero vamos a crear un archivo con el mensaje "Texto dentro del archivo mensaje ":
mi-usuario@maquina:~$ echo "Texto dentro del archivo mensaje" > mensaje
mi-usuario@maquina:~$

Leemos el contenido de ese archivo para checar que el contenido se haya guardado correctamente:

mi-usuario@maquina:~$ cat mensaje

Texto dentro del archivo mensaje

Ahora vamos a pasarle el archivo mensaje como entrada estándar al comando cat, el cual leera el contenido de ese archivo:
mi-usuario@maquina:~$ cat < mensaje

Texto dentro del archivo mensaje

Como te darás cuenta leímos el contenido del archivo mensaje, ahora prueba el comando anterior con los comandos less y echo.

Piping

El piping es redireccionar la salida de un comando como entrada de otro comando, estos comandos se redireccionan mediante la tecla pipe ( | ), yo la escribo prsionando la tecla ALTGR+2 pero puede variar dependiendo de la distriución de cada teclado:

comando-1 |  comando-2

Veamos unos ejemplos:

En este ejemplo la salida del comando echo (pantalla) la vamos a redirecionar como entrada del comando cat
mi-usuario@maquina:~$ echo "este mensaje se redirecciona al comando cat" | cat
este mensaje se redirecciona al comando cat

El siguiente ejemplo la salida del comando cat (pantalla) la vamos a redireccionar como entrada del comando less
mi-usuario@maquina:~$ cat /etc/passwd | less
- - Inicio de salida omitida - -
pulse:x:109:114:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:110:117:RealtimeKit,,,:/proc:/bin/false
saned:x:111:118::/home/saned:/bin/false
hplip:x:112:7:HPLIP system user,,,:/var/run/hplip:/bin/false
gdm:x:113:120:Gnome Display Manager:/var/lib/gdm:/bin/false
eddye:x:1000:1000:eddye,,,:/home/eddye:/bin/bash
haldaemon:x:114:124:Hardware abstraction layer,,,:/var/run/hald:/bin/false
zend:x:1001:1001::/home/eddye/Escritorio/ZendServer-5.1.0_Tarball_B7-php5.3.5-linux-glibc23-x86_64/usr/zend/gui/lighttpd:/sbin/nologin
mysql:x:115:125:MySQL Server,,,:/nonexistent:/bin/false
sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin
carmeth:x:1003:1004:carmeth,,,,:/home/carmeth:/bin/bash
(END) 








No hay comentarios:

Publicar un comentario