next up previous contents index
Next: Pipes Up: Linux Previous: Comandos que has de   Índice General   Índice de Materias


Redirección de entrada-salida

Hasta ahora, los comandos se comportaban de una manera fija, tomaban los datos que necesitaban de la linea de comandos y los mostraban por pantalla (En ls /home, /home es el dato de entrada).

Esto es así porque todos los comandos tienen lo que se llaman entradas y salidas estándares (ver figura 1.1 en la pág. [*]). La entrada estándar es de donde un comando lee sus argumentos; la salida estándar es por donde muestra sus resultados; y la salida de error estándar es por donde muestra sus mensajes de error (si los hay). Generalmente la entrada estándar se le da por linea de comandos, y la salida estándar y la salida de error estándar suelen ser el terminal en que se ejecutaron, esto es, se muestran por pantalla.

Los mensajes de error de Linux suelen ser muy completos, y suelen dar bastantes pistas sobre lo que ha ocurrido; el usuario novel suele echarles un vistazo por encima sin entender lo que realmente Linux le intenta decir, es muy recomendable leer con detenimiento dichos mensajes y pararse a pensar sobre lo que dicen.

Figura: Canales de comunicación de un comando de Linux
\includegraphics[height=4cm]{entrada-salida.eps}

Es posible modificar el comportamiento de las entradas y salidas estándares. Por ejemplo podemos hacer que el resultado de un ls no se muestre por pantalla sino que se guarde en un archivo, que examinaremos más tarde.

Esto se consigue mediante la redirección de entrada-salida . Para ello disponemos de los siguientes operadores: $ >$ y $ <$.

Ej:
   $ ls > fich

En el fichero fich ha quedado almacenado el resultado de ejecutar ls, es decir hemos redirigido la salida estándar de ls a un fichero en vez de al terminal. Si el fichero fich no existía se crea y si ya existía, se sobrescribirá eliminándose el antiguo contenido (a no ser que no tengamos permiso de escritura sobre fich).

El comando cat puede ser de mucha utilidad para estas cosas, lo único que hace es mostrar su entrada estándar por su salida estándar, de forma que puede ser utilizado en general para todo tipo de redirecciones.

Ej:
   $ cat fich
Nos mostrará el resultado del ls anterior.

Ej:
   $ cat fich > fich2
Copiará el contenido del fichero fich al fichero fich2, sobrescribiendo lo que antes hubiese en fich2.

Ej:
   $ cat < fich

Nos mostrará el contenido del fichero fich por la salida estándar, es decir, el terminal (¡si ya lo sé, igual que cat fich).

Ej:
   $ mail alcortes < fich
Mandará un correo a alcortes con el contenido del fichero fich.

Ej:
   $ cat < fich > fich3
Meterá en el fichero fich3 el contenido del fichero fich.

A la hora de redirigir la salida de un comando a un fichero puede ser de utilidad no sobrescribir dicho fichero, sino concatenar el resultado del comando a continuación del contenido del fichero. Para ello tenemos el operador $ >>$.

Ej:
   $ cat fich >> fich3
Con esto ponemos el contenido del fichero fich a continuación de lo que contenía el fichero fich3.

Cuidado, si creas un bucle puedes llenar tu disco duro en pocos segundos, NUNCA intentes:

   $ cat <fich >>fich

La redirección de la salida de error estándar se realiza mediante el operador 2$ >$.

Ej: Si hacemos cat de un fichero que no existe tendremos un mensaje de error
   $ cat fich_que_no_existe
   cat: fich_que_no_existe: No existe el fichero o el directorio   
   $ cat fich_que_no_existe 2>errores_de_cat
   $ cat errores_de_cat
   cat: fich_que_no_existe: No existe el fichero o el directorio


next up previous contents index
Next: Pipes Up: Linux Previous: Comandos que has de   Índice General   Índice de Materias
Alberto Cortés 2001-03-29