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 comandols
se 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
,awk
ycut
. - 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 decomando2
se 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 &
– Ejecutacomando1
ycomando2
en 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.