TUBERIAS Y REDIRECCIONES

 

En UNIX, al igual que en cualquier sistema operativo, existen 3 dispositivos de entrada/salida que son fundamentales:

En UNIX estos dispositivos son tratados como archivos, como ya dijimos anteriormente. Por defecto, la salida estándar y el error estándar están direccionados hacia la pantalla del terminal, y la entrada estándar corresponde al teclado. Pero en ocasiones puede ser que no nos interese que la información salga en pantalla, si no que nos interesa filtrarla o redireccionarla a un archivo para guardar la información o para un tratamiento posterior, o que la entrada a un programa sea el resultado de la ejecución de otro. Con este fin los sistemas operativos permiten la utilización de tuberías y redirecciones.

Existen los siguientes tipos de redirecciones:


Las redirecciones más empleadas son las de salida estándar.

Se puede redireccionar la entrada y salida simultáneamente, por ejemplo:

sort < archivo > archivo_ordenado

El comando sort utilizará archivo como entrada y lo ordenará enviando la salida a archivo_ordenado en lugar de hacerlo a la pantalla del terminal.

Las tuberías unen la salida estándar de un proceso con la entrada de otro, es decir, la salida de un proceso se emplea como entrada del siguiente. Para ello se emplea el símbolo pipe "|". La utilización de tuberías evita la utilización de archivos intermedios reduciendo el tiempo de proceso.

Ejemplos
ps -ef | grep usuario | sort Lista los procesos en ejecución entre los que busca los de un usuario y ordena el resultado.
cat archivo | cut -c10-80 | sort -r Muestra el contenido de un archivo entre las columnas 10 y 80 ordenadas inversamente.

La introducción de tuberías y redirecciones permite mejorar los resultados obtenidos y son básicas a la hora de realizar shell scripts.

Existe un comando que permite desviar una copia o bifurcación de la salida de un comando a un archivo sin alterar la entrada del siguiente en una tubería. Se trata del comando tee. En el siguiente ejemplo se almacena en un archivo el resultado del comando who y se cuentan las líneas de dicha ejecución (no del archivo, aunque el resultado sería el mismo).

who | tee archivo | wc -l

Para fusionar la salida estándar y la salida de errores se puede hacer usando 2>&1.

comando 2>&1 [archivo]

Si nos interesara únicamente redireccionar la salida de errores, habría que utilizar:

comando 2> archivo