Tuberías y redirecciones en Linux

Las redirecciónes nos permiten en Linux redirigir la entrada o salida estándar desde o hacia un fichero, respectivamente. La tubería nos permite usar la salida de un comando como entrada para otro, permitiendo concatenar comandos.

 

Redirecciones

Primero señalar que en cuando hablamos de la entrada estándar se hace referencia, normalmente, a lo escrito a través del teclado y como salida estándar a lo envíado a la pantalla, aunque pueden ser otros los dispositivos definidos como estándar en algún caso especial. Las redirecciones se realizan con los símbolos > y < usando su similitud con unas flechas. Así con el símbolo > podemos redirigir la salida estándar desde un comando hacia un fichero. La redirección es muy útil cuando la salida es muy larga y no nos cabe en pantalla, cuando necesitamos o nos es conveniente guardarla en un fichero, etc. Veamos un ejemplo.

$ echo "Hola mundo"
Hola mundo
$ echo "Hola mundo" > saludo
$ cat saludo
Hola mundo

Como vemos en el ejemplo con el comando echo mandamos a pantalla un mensaje, pero si usamos la redirección > mandamos el mensaje al fichero saludo. Luego con el comando cat hemos mostrado el contenido del fichero que hemos creado. Para añadir información a un fichero existente, sin sobreescribirlo se usa >>. Veamos otro ejemplo:

$ echo "Hola mundo"
Hola mundo
$ echo "Hola mundo" > saludo
$ cat saludo
Hola mundo
$ echo "Ahora he sobreescrito el fichero saludo" > saludo
$ cat saludo
Ahora he sobreescrito el fichero saludo
$ echo "Pero ahora le he añadido otra línea" > saludo
$ cat saludo
Ahora he sobreescrito el fichero saludo
Pero ahora le he añadido otra línea

Como vemos en este ejemplo > destruye el contenido del fichero si existe pero >> añade la información al final.

El símbolo < permite enviar el contenido de un fichero como entrada estándar. Esto es útil, por ejemplo, en programas o comandos en los que introducimos o podemos introducir los argumentos por el teclado, de tal manera que podemos sustituirlos por un fichero. Un ejemplo tirivial con cat es:

$ echo "Hola mundo" > saludo
$ cat < saludo
Hola mundo

 

Tuberías

Las tubería es una redirección especial que nos permite enviar la salida de un comando como entrada de otro, para ellos se usa el símbolo |. Su gran útilidad es que nos permite concatenar comandos enriqueciendo mucho la programación. Veamos unos sencillos ejemplos con seq y head:

$ seq 1 5 |head -2
1
2

 

Redirecciones, avanzado

También exite la salida de error que va por otro ‘canal’ diferente. Así por ejemplo si el fichero file1 existe y el file2 no tenemos el siguiente comportamiento

$ ls file1 file2
ls: no se puede acceder a file2: No existe el archivo o el directorio
file1
$ ls file1 file2 > salida
ls: no se puede acceder a file2: No existe el archivo o el directorio
$ cat salida
file1

Como vemos, cuando hemos redirigido la salida al fichero salida, el mensaje de error que nos informa que el fichero file2 no existe sigue saliendo por pantalla. Para poder redireccinar también la salida de error tenemos que usar &> que nos dice que redireccionemos ambas salidas, así:

$ ls file1 file2 &> salida
$ cat salida
ls: no se puede acceder a file2: No existe el archivo o el directorio
file1

De hecho la salida estándar suele ir identificada con 1 (o &1 si va despues de > para diferenciarla de un fichero con nombre 1), y la salida de error con 2 (o &2) para poder hacer redirecciones individuales. Así, es equivalente a redirigir la sólo salida el siguiente comando:

$ ls file1 file2 1> salida
ls: no se puede acceder a file2: No existe el archivo o el directorio
$ cat salida
file1

Para redirigir la salida de error a un fichero

$ ls file1 file2 2> salida
file1
$ cat salida
ls: no se puede acceder a file2: No existe el archivo o el directorio

2>&1 o 1>&2  sirven para redirigir la salida de error a la estandar  o viceversa para luego, por ejemplo, enviarla con una tubería a otro comando.

$ ls file1 file2 2>&1 salida |wc -l
2

 

 

2 comments to Tuberías y redirecciones en Linux

Leave a Reply