Tuberías y redireccionamientos

Estas aquí:
<< Regresar

Redireccionamiento

Una de las características más poderosas de la linea de comandos es el redireccionamiento de entradas y salidas. Previamente hemos visto instrucciones como ls en donde su salida aparece en la pantalla. Sin embargo podemos direccionar la salida por medio de una notación especial a archivos, dispositivos o incluso a otras instrucciones.

Salida estándar

La mayoría de las instrucciones de la línea de comandos muestran sus resultados enviándolos a lo que se conoce como la salida estándar. La salida estándar por defecto es la pantalla. Para redireccionar la salida a un archivo basta con emplear el signo de «>» como este:

ls > archivo_ls.txt

En este ejemplo, la salida de la instrucción ls es escrita en archivo_ls.txt, al ser redireccionada la salida al archivo ésta no aparecerá en la pantalla.

Cada vez que la instrucción sea llevada a cabo, archivo_ls.txt será sobre escrito desde el principio con la salida de la instrucción ls ocasionando una pérdida del contenido anterior del archivo, ahora bien si se desea concatenar el contenido sería usando los signos «>>», como se muestra a continuación:

ls >> archivo_ls.txt

Al concatenar el resultado, éste es agregado al final del archivo, produciendo que el archivo aumente de tamaño cada vez que la instrucción es llevada acabo. Encaso de que el archivo no exista en alguno de los casos anteriores este será creado.

Entrada estándar

Muchas instrucciones aceptan la entrada de argumentos, esta entrada se conoce como la entrada estándar y por defecto es el teclado, pero al igual que la salida estándar, puede ser redireccionada. Para redireccionar la entrada a un archivo en lugar del teclado se emplea el signo de «<«, como este:

sort < archivo_ls.txt

En el ejemplo previo, se han ordenado las líneas del contenido de archivo_ls.txt. El resultado será mostrado en pantalla, sin embargo no será redireccionado a archivo_ls.txt, esto quiere decir que no será sobre escrito el archivo. En caso de que se desease ordenar archivo_ls.txt se haría de la siguiente manera:

sort < archivo_ls.txt > sorted_archivo_ls.txt

En este caso se está ordenando archivo_ls.txt para después ser redireccionada su salida a sorted_archivo_ls.txt, el orden de las instrucciones es de izquierda a derecha.

Tuberías

Las tuberías es una de los elementos fuertes en linux que permiten hacer redireccionamiento de entradas y salidas, sirven para conectar múltiples instrucciones. Con las tuberías, la salida estándar de una instrucción alimenta la entrada estándar de otra, por ejemplo:

ls -l | less

En este ejemplo, la salida estándar de la instrucción ls alimenta la instrucción less, El uso de «| less» permite hacer que la salida tenga un funcionamiento del tipo scroll.

Nota: para salir de la aplicación less solo use la tecla q.

Ejemplos:

Muestra los primeros 10 nuevos archivos/directorios del directorio actual

ls -lt | head

Muestra de forma inversa (del más grande al más pequeño) el tamaño de los directorios

du | sort -nr

Imprime el número total de archivo en el directorio y todos sus subdirectorios

find . -type f -print | wc -l

Imprime en pantalla y guarda en archivo

ls -l | tee > archivo_ls.txt

Filtros

Existen programas que habitualmente son empleados por las tuberías y reciben el nombre de filtros. Los filtros toman la entrada estándar y llevan acabo una serie de operaciones sobre ésta para que posteriormente sea enviada a la salida estándar. De cualquier manera, los filtros pueden ser combinados para procesar información de la más diversa manera. Algunos de los filtros más empleados son los siguientes:

Programa Descripción
sort Ordena la entrada estándar y se visualiza el resultado en la salida estándar
uniq Elimina los elementos repetidos por línea
grep Analiza línea a línea la entrada estándar y muestra los resultados que coincidan con el patrón de búsqueda
fmt Lee de la entrada estándar e imprime en la salida estándar el contenido formateado del texto de entrada
pr Toma la entrada estándar y la divide en páginas con encabezados, saltos de página, piés de página para ser impresa
head Imprime las primeras 10 líneas de un archivo
tail Imprime las últimas 10 líneas de un archivo
tr Permite el intercambio de caracteres por otros, empleado habitualmente para cambiar de mayúsculas a minúsculas y viceversa
sed Editor de flujo, semejante a tr pero ofreciendo opciones más sofisticadas
awk Todo un lenguaje diseñado para la implementación de filtros. Exageradamente potente.

Redireccionamientos

Redirecciones de Entrada/Salida

La sintaxis de BASH permite diferentes formas de redirección de entrada/salida de las que el Shell Bourne tradicional carece. BASH puede redirigir la salida estándar y los flujos de error estándar a la vez utilizando la sintaxis:

orden &> archivo

que es más simple que teclear la orden Bourne equivalente, «orden > archivo 2>&1». Desde la versión 2.05b, bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada «here strings»):

orden <<< "cadena a leer como entrada estándar"

Si la cadena contiene espacios en blanco, deben utilizarse comillas.

Ejemplo: Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia stdout

# hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
exec 6>&1

1.- abre el archivo «test.data» para escritura

exec 1>test.data

2.- genera algún contenido

echo "data:data:data"

3.- recupera stdout original, al hacer que sea una copia del descriptor de archivo 6

exec 1>&6

4.- cierra el descriptor de archivo 6

exec 6>&-

Video: Ejemplo del uso de tuberías y redireccionamientos

En este video se muestra el uso de las tuberías y los redireccionamientos

Última actualización: septiembre 17, 2018

Deja un comentario

Facebook
Facebook
Twitter
Visit Us
LinkedIn
YOUTUBE
YOUTUBE