Este artículo explora la implementación de scripts de automatización y técnicas de monitoreo en entornos Linux.
- Acceso remoto automatizado
Se pueden emplear tanto Expect como Bash puro para iniciar sesiones SSH.
Versión con Expect
#!/usr/bin/expect
set servidor "192.168.1.50"
set usuario "admin"
spawn ssh ${usuario}@${servidor}
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "ClaveSegura\r"}
}
interact
Versión con Bash y Here Document
#!/bin/bash
SERVIDOR="192.168.1.50"
USUARIO="admin"
expect <<fin_script eof="" exitosa="" expect="" fin_script="" spawn="" ssh=""></fin_script>
- Generación y análisis de arrays
Para trabajar con conjuntos de datos aleatorios:
#!/bin/bash
declare -a valores
for (( idx=0; idx<10; idx++ )); do
valores[$idx]=$RANDOM
done
max_val=${valores[0]}
min_val=${valores[0]}
for num in "${valores[@]}"; do
(( num > max_val )) && max_val=$num
(( num < min_val )) && min_val=$num
done
echo "Valores generados: ${valores[*]}"
echo "Valor máximo: $max_val"
echo "Valor mínimo: $min_val"
- Implementación de algoritmos de ordenamiento
Algoritmo de ordenamiento burbuja con entrada dinámica:
#!/bin/bash
read -p "Ingrese números separados por espacios: " -a coleccion
total=${#coleccion[@]}
for (( i=0; i<total-1 coleccion="" do="" for="" i="" if="" j="0;"> coleccion[j+1] )); then
temporal=${coleccion[j]}
coleccion[j]=${coleccion[j+1]}
coleccion[j+1]=$temporal
fi
done
done
echo "Orden ascendente: ${coleccion[*]}"
echo "Orden descendente: $(echo "${coleccion[@]}" | tr ' ' '\n' | sort -rn | tr '\n' ' ')"
</total-1>
- Herramientas de monitoreo del sistema
Carga del sistema
Para verificar la carga promedio:
# Muestra carga promedio y tiempo de actividad
uptime
w
Estadísticas de CPU
Monitoreo detallado del procesador:
# Estadísticas multiprocesador en intervalos
mpstat 2 5
Monitoreo interactivo con top
Campos principales del comando top:
- PID: Identificador único del proceso
- %CPU: Porcentaje de uso del procesador
- %MEM: Porcentaje de uso de memoria
- STAT: Estado actual del proceso
- TIME+: Tiempo total de ejecución acumulado
Uso de memoria
# Visualización legible del uso de memoria
free -h
# Estadísticas detalladas de memoria virtual
vmstat 1 4
Rendimiento de E/S
# Estadísticas de entrada/salida
iostat -x 2 3
# Monitoreo en tiempo real del disco
iotop -oP
Tráfico de red
# Análisis de tráfico por interfaz
iftop -i eth0
# Carga de red en tiempo real
nload -u K
Solución integral
Instalación y configuración de Cockpit para gestión gráfica:
sudo dnf install cockpit
sudo systemctl enable --now cockpit.socket
# Acceso mediante navegador
# https://<dirección_ip>:9090
- Verificación de conectividad en red
Implementación con bucle for
#!/bin/bash
RED_BASE="192.168.10"
for HOST in {1..254}; do
IP="${RED_BASE}.${HOST}"
if ping -c1 -W1 "$IP" &>/dev/null; then
echo "✓ ${IP} - Accesible"
else
echo "✗ ${IP} - No responde"
fi
done
Implementación con bucle while
#!/bin/bash
RED_BASE="192.168.10"
CONTADOR=1
while (( CONTADOR <= 254 )); do
IP="${RED_BASE}.${CONTADOR}"
ping -c1 -W1 "$IP" &>/dev/null
[ $? -eq 0 ] && ESTADO="✓ Accesible" || ESTADO="✗ No responde"
echo "${IP} - ${ESTADO}"
((CONTADOR++))
done
- Programación de tareas de respaldo
Script para respaldos incrementales con marca temporal:
#!/bin/bash
DIRECTORIO_RESPALDO="/backup"
FECHA=$(date -d 'yesterday' +%Y-%m-%d-%H)
ARCHIVO="respaldo-sistema-${FECHA}.tar.xz"
[ ! -d "$DIRECTORIO_RESPALDO" ] && mkdir -p "$DIRECTORIO_RESPALDO"
tar -cJf "${DIRECTORIO_RESPALDO}/${ARCHIVO}" /etc 2>/dev/null
if [ $? -eq 0 ]; then
echo "Respaldo completado: ${ARCHIVO}"
else
echo "Error en el proceso de respaldo"
fi
Configurar en crontab para ejecución diaria:
# Ejecutar a las 2:30 AM cada día de la semana
30 2 * * 1-5 /ruta/al/script_respaldo.sh