Tuberías en la shell

Las tuberías en la programación de la shell en Unix/Linux son una forma poderosa de combinar la salida de un comando con la entrada de otro. A continuación algunos aspectos claves sobre su uso.
Aspectos claves
- Conectar Comandos:
- Las tuberías permiten conectar la salida estándar de un comando con la entrada estándar de otro, creando una secuencia de procesos conectados.
- Ejemplo:
ls -l | grep "file"– La lista de archivos del comandolsse filtra para mostrar solo las líneas que contienen la palabra “file” con el comandogrep.
- Secuencias de Comandos:
- Puedes encadenar varios comandos mediante tuberías para realizar operaciones más complejas.
- Ejemplo:
cat archivo.txt | grep "patrón" | sort– Lee un archivo, filtra líneas que contienen un patrón y luego ordena esas líneas.
- Filtros y Procesamiento de Texto:
- Las tuberías son útiles con comandos de procesamiento de texto como
grep,sed,awkycut. - Ejemplo:
ps aux | grep "proceso"– Filtra la lista de procesos para mostrar solo aquellos que contienen el nombre del proceso.
- Las tuberías son útiles con comandos de procesamiento de texto como
- Redirección de Salida:
- Puedes redirigir la salida de una cadena de tuberías a un archivo.
- Ejemplo:
comando1 | comando2 > salida.txt– La salida decomando2se guarda en el archivosalida.txt.
- Uso en Scripts:
- Las tuberías son comúnmente utilizadas en scripts de shell para automatizar tareas complejas.
- Ejemplo en un script:
ls | grep "patrón" | awk '{print $2}'– Lista archivos, filtra por un patrón y muestra el segundo campo.
- Proceso en Segundo Plano:
- Puedes ejecutar comandos en segundo plano con
&al final de una cadena de tuberías. - Ejemplo:
comando1 | comando2 &– Ejecutacomando1ycomando2en segundo plano.
- Puedes ejecutar comandos en segundo plano con
- Filtrar y Transformar Datos:
- Las tuberías son ideales para filtrar datos y transformarlos según sea necesario.
- Ejemplo:
cat registro.txt | grep "error" | awk '{print $3}'– Muestra la tercera columna de líneas que contienen “error” en un registro.
- Interactividad:
- Al usar tuberías, puedes interactuar en tiempo real con datos a medida que fluyen a través de la cadena de comandos.
Su uso es una forma flexible y poderosa de trabajar con flujos de datos en la línea de comandos, permitiendo la construcción de procesos complejos mediante la combinación de comandos más simples y especializados.
Ejemplos
Listar archivos y filtrar por extensión:
ls -l | grep ".txt"
Con este comando se lista los archivos en el directorio actual y filtra solo aquellos que tienen la extensión “.txt”.
Contar líneas en un archivo:
cat archivo.txt | wc -l
Utilizando cat para mostrar el contenido del archivo y wc -l para contar las líneas en ese contenido.
Buscar archivos grandes en un directorio:
du -h | sort -rh | head
du -h muestra el tamaño de los archivos y directorios, sort -rh ordena por tamaño de manera descendente, y head muestra las primeras líneas (los archivos más grandes).
Contar palabras únicas en un archivo de texto:
cat texto.txt | tr -s ' ' '\n' | sort | uniq -c
Usa tr para reemplazar espacios por saltos de línea, sort para ordenar las palabras, y uniq -c para contar las ocurrencias únicas de cada palabra.
Obtener información de uso de la CPU:
ps aux | sort -nk 3 | tail
Lista los procesos ordenados por uso de CPU en orden ascendente y muestra los últimos procesos en ejecución.
Buscar errores en el registro del sistema:
cat /var/log/syslog | grep "error"
Muestra las líneas en el registro del sistema que contienen la palabra “error”.
Crear un archivo de resumen de directorios:
find /ruta/del/directorio -type f -exec du -h {} + | sort -rh > resumen.txt
Utiliza find para encontrar archivos, du -h para obtener sus tamaños, y sort para ordenar el resumen por tamaño en orden descendente.
Buscar procesos y mostrar información específica:
ps aux | grep "proceso" | awk '{print $1, $2, $11}'
Lista procesos que contienen la palabra “proceso” y muestra información específica utilizando awk.
Estos ejemplos demuestran cómo las tuberías permiten combinar de manera eficiente la salida de un comando con la entrada de otro, brindando flexibilidad y potencia en la manipulación y análisis de datos en la línea de comandos.