Automatización y Monitoreo de Sistemas Linux con Bash

Este artículo explora la implementación de scripts de automatización y técnicas de monitoreo en entornos Linux.

  1. 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>
  1. 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"

  1. 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>
  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

  1. 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

  1. 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

Etiquetas: bash expect linux Monitoring cron

Publicado el 7-10 06:12