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.
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 .
$ 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.
$ cat fichNos mostrará el resultado del
ls
anterior.
$ cat fich > fich2Copiará el contenido del fichero fich al fichero fich2, sobrescribiendo lo que antes hubiese en fich2.
$ 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).
$ mail alcortes < fichMandará un correo a alcortes con el contenido del fichero fich.
$ cat < fich > fich3Meterá 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 .
$ cat fich >> fich3Con 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.
$ 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