Trabajando con Unix - La entrada estandar y La salida estandar

3 - La entrada estandar y La salida estandar

[editar]
Tutorial creado por Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=166
28 de Octubre de 2005
Intentemos abordar un problema simple: conseguir un listado del directorio /usr/bin. Si hacemos "ls /usr/bin" , algunos de los nombres de los ficheros saldrán por arriba de la pantalla. ¿Como se pueden ver todos los ficheros?

Algunos conceptos de Unix

El sistema operativo Unix facilita mucho a los programas el uso del terminal. Cuando un programa escribe algo en la pantalla, está usando algo llamado salida estándar. Salida estándar, en inglés standard output o stdout, es la manera que tiene el programa de escribirle cosas al usuario. El nombre por el que se indica un programa es entrada estándar (stdin). Es posible que un programa se comunique con el usuario sin usar la entrada o salida estándar, pero la mayoría de los comandos que se tratan en este libro usan stdin y stdout.

Por ejemplo, el comando ls imprime una lista de los directorios en la salida estándar, que está normalmente "conectada" al terminal. Un comando interactivo, como el shell, bash, lee los comandos de la entrada estándar.

Un programa también puede escribir en el error estándar, ya que es muy fácil hacer que la salida estándar apunte a cualquier lugar aparte del terminal. El error estándar (stderr) está casi siempre conectado al terminal para que alguna persona pueda leer el mensaje.

En esta sección, examinaremos tres modos de enredarse con la entrada y salida estándar: redireccionar la salida, redireccionar la entrada, y las tuberías.

Redireccionar la salida

Un aspecto muy importante de Unix es la posibilidad de redireccionar la salida. Esto permite que, en vez de ver los resultados de un comando, los salvemos en un fichero o los enviemos directamente a una impresora. Por ejemplo, para redireccionar la salida del comando "ls /usr/bin", se coloca un signo ">" al final de la línea, y se indica el fichero donde dejar la salida:

/home/larry$ ls

/home/larry$ ls -F /usr/bin > listado

/home/larry$ ls

listado

/home/larry$

Como se puede ver, en vez de escribir los nombres de todos los ficheros, el comando crea un fichero totalmente nuevo en el directorio actual. Echemos un vistazo a este fichero usando el comando cat.

Si se recuerda, cat era un comando bastante inútil que copiaba lo que se escribía (entrada estándar) al terminal (salida estándar). cat también imprime un fichero en la salida estándar si se indica el fichero como parámetro:

/home/larry$ cat listado

..

/home/larry$

La salida exacta del comando "ls /usr/bin" aparece en el contenido de listado. Por ahora todo bien, sin embargo no resuelve el problema original.3

A pesar de todo, cat hace algunas cosas interesantes cuando se redirecciona su salida. ¿Qué hace el comando "cat listado > fichero"? Normalmente, el "> fichero" dice "coge toda la salida del comando y ponla en fichero". La salida del comando "cat listado" es el fichero listado. Así hemos inventado un nuevo (y no tan eficiente) método de copiar ficheros.

¿Qué ocurre con el comando "cat > zorro" ? cat lee cada línea escrita en el terminal (entrada estándar) y la imprime de vuelta (salida estándar) hasta que lee |_Ctrl-d_|. En este caso, la salida estándar se ha redireccionado al fichero zorro. Ahora cat sirve como un editor rudimentario:

/home/larry$ cat > zorro

El rapido zorro marron salta sobre el descuidado perro.

pulsa Ctrl-d

Ahora se ha creado el fichero zorro que contiene la frase "El rapido zorro marron salta sobre el descuidado perro". Un último uso del versátil comando cat es concatenar ficheros. cat imprimirá cada fichero dado como parámetro, uno despues de otro. El comando "cat listado zorro" imprimirá el listado del directorio /usr/bin, y luego la tonta frase. Así, el comando "cat listado zorro > listyzorro" creará un nuevo fichero conteniendo los contenidos de listado y zorro.

Redireccionar la entrada

Así como cuando se redirecciona la salida estándar, es posible redireccionar la entrada. En lugar de que un programa lea su entrada desde el teclado, la leerá desde un fichero. Como redireccionar la entrada está relacionado con redireccionar la salida, parece natural que "<" sea el carácter para redireccionar la entrada. Éste también se usa después del comando que se desee ejecutar.

Esto es generalmente útil si se tiene un fichero de datos y un comando que espera sus datos desde la entrada estándar. Muchos comandos permiten especificar un fichero sobre el cual operar, así que en las actividades diarias el "<" no se usa tanto como otras técnicas.

Las tuberías

Muchos comandos Unix producen gran cantidad de información. Por ejemplo, es normal que un comando como "ls /usr/bin" produzca más salida que la que se puede ver en pantalla. Para que se pueda ver toda la información de un comando como "ls /usr/bin" , es necesario usar otro comando Unix llamado more4. more parará cada vez que la pantalla se llene de información. Por ejemplo, "more < /etc/rc" mostrará el fichero /etc/rc como lo haría "cat /etc/rc" , excepto que more permite leerlo. more también admite el comando "more /etc/rc" , y esa es la forma normal de invocarlo.

_

3 Para lectores impacientes, el comando que se debe usar es more. Sin embargo, hay que hablar un poco sobre algo más antes de llegar ahí.

4 Se llama more porque ese es el indicador que originalmente mostraba: "--more--". En varias versiones de Linux el comando more es identico a un comando más avanzado que hace todo lo que more puede hacer y más aún. Como demostración de que los programadores de ordenadores son malos cómicos, llamaron a este nuevo programa "less".

Sin embargo, eso no ayuda al problema de que "ls /usr/bin" muestre más información de la que se pueda ver. "more < ls /usr/bin" no funciona, ¡la redirección de entrada sólo funciona con ficheros, no comandos! Se podría hacer esto:

/home/larry$ ls /usr/bin > temp-ls

/home/larry$ more temp-ls

..

/home/larry$ rm temp-ls

Pero, Unix propone una forma más limpia de hacerlo. Se puede usar el comando "ls /usr/bin _ more". El carácter "_" es una tubería. Como una tubería de agua, una tubería Unix controla el flujo. En vez de agua, se controla el flujo de información.

Los filtros son programas muy útiles para usarse en conjunción con las tuberías. Un filtro es un programa que lee la entrada estándar, la cambia de alguna manera, y la saca por la salida estándar.

more es un filtro, lee los datos que coge de la entrada estándar y los muestra por la salida estándar pantalla a pantalla, permitiendo leer el fichero. more no es un gran filtro porque su salida no se puede enviar a otro programa.

Otros filtros incluyen los programas cat, sort, head, y tail. Por ejemplo, si se quiere leer sólo las primeras diez líneas de la salida de ls, se puede usar "ls /usr/bin _ head" .
[editar]

1 opinión

Unix.

Quisiera saber si unix se puede descargar de alguna web o un servidor, pero que la descarga sea gratis?

porfavor ayudame que me interesa mucho.

Tutoriales relacionados con 'Trabajando con Unix'

Unix es un potente sistema para aquellos que saben cómo dominar su poder. En este... Más »
A lo largo de este trabajo se va a intentar hacer un repaso de los... Más »
Esta es la primerísima edición del Linux en Castellano COMO. La audiencia a la que... Más »
El principal objetivo es introducir y discutir el modo principal[2] PSGML de Emacs y las... Más »
Este manual describe el uso y configuración del gestor de ventanas WindowMaker. Está previsto para... Más »

Autor y licencia de 'Trabajando con Unix'


Tutorial de Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=166 CopyLeft
Este trabajo está licenciado bajo la Creative Commons License. 1999-2005 © :: MonoNeurona.org ::
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.