¿En qué podemos ayudarte?
Tuberías y redireccionamientos
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