Page cover

Scripts de utilidad de Linux

Aquí tienes el texto traducido al español y con un formato formal y claro para apuntes, manteniendo el código original correctamente presentado y con buena legibilidad:


10 Scripts Esenciales para Administradores de Sistemas Linux

Como administrador de sistemas, gestionar servidores Linux puede ser una tarea que requiere mucho tiempo y resulta tediosa. Para facilitar este trabajo, aquí tienes una recopilación de scripts esenciales que te ayudarán a automatizar tareas, optimizar procesos y mejorar la eficiencia general.

Estos scripts abarcan diversas funciones, desde la monitorización del rendimiento del sistema hasta la gestión de cuentas de usuario.


1. Monitorización de carga del sistema y uso de recursos

Permite llevar un control de la carga del sistema, la memoria libre y el espacio disponible en disco.

#!/bin/bash
echo "System Load: $(uptime)"
echo "Free Memory: $(free -h | grep Mem | awk '{print $4}')"
echo "Free Disk Space: $(df -h / | grep / | awk '{print $4}')"

2. Copias de seguridad automatizadas con sello temporal (timestamp)

Este script crea copias de seguridad de archivos y directorios críticos, añadiendo una marca de tiempo al archivo de respaldo.

#!/bin/bash
SOURCE="/path/to/your/important/files"
DESTINATION="/path/to/your/backup/directory"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
tar czf "${DESTINATION}/backup_${TIMESTAMP}.tar.gz" "${SOURCE}"

3. Gestión de cuentas de usuario

Automatiza la creación, eliminación y actualización de cuentas de usuario.

#!/bin/bash
# Uso: ./user_management.sh [create|delete|update] username

ACTION=$1
USERNAME=$2

case "${ACTION}" in
  create)
    sudo useradd "${USERNAME}"
    ;;
  delete)
    sudo userdel -r "${USERNAME}"
    ;;
  update)
    sudo passwd "${USERNAME}"
    ;;
  *)
    echo "Acción no válida. Uso: ./user_management.sh [create|delete|update] username"
    ;;
esac

4. Rotación de archivos de log

Evita que los archivos de registro crezcan demasiado automatizando su rotación.

#!/bin/bash
LOG_FILE="/path/to/your/logfile.log"
MAX_SIZE=10485760 # 10 MB
CURRENT_SIZE=$(wc -c <"${LOG_FILE}")

if [ "${CURRENT_SIZE}" -gt "${MAX_SIZE}" ]; then
  TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
  mv "${LOG_FILE}" "${LOG_FILE}_${TIMESTAMP}"
  touch "${LOG_FILE}"
fi

5. Notificación de uso de disco

Envía una alerta cuando el uso del disco supera un umbral definido.

#!/bin/bash
THRESHOLD=90
EMAIL="your-email@example.com"
PARTITION="/"

USAGE=$(df -h "${PARTITION}" | awk 'NR==2 {print $5}' | sed 's/%//')

if [ "${USAGE}" -gt "${THRESHOLD}" ]; then
  echo "El uso del disco en ${PARTITION} es del ${USAGE}%. Libere espacio si es necesario." | \
  mail -s "Alerta de uso de disco" "${EMAIL}"
fi

6. Monitorización y reinicio de servicios

Verifica automáticamente si un servicio esencial está activo y lo reinicia si no lo está.

#!/bin/bash
SERVICE="your-service-name"
EMAIL="your-email@example.com"

if systemctl is-active --quiet "${SERVICE}"; then
  echo "${SERVICE} está en ejecución."
else
  echo "${SERVICE} no está en ejecución. Reiniciando..." | mail -s "${SERVICE} Restart Alert" "${EMAIL}"
  systemctl start "${SERVICE}"
fi

7. Información de dirección IP

Obtiene la dirección IP pública y privada del servidor.

#!/bin/bash
PUBLIC_IP=$(curl -s https://ipinfo.io/ip)
PRIVATE_IP=$(hostname -I | awk '{print $1}')

echo "Public IP: ${PUBLIC_IP}"
echo "Private IP: ${PRIVATE_IP}"

8. Monitorización de la expiración de certificados SSL

Verifica la fecha de expiración de un certificado SSL y envía una notificación si está próxima.

#!/bin/bash
DOMAIN="yourdomain.com"
EMAIL="your-email@example.com"
DAYS_THRESHOLD=30

EXPIRATION_DATE=$(echo | openssl s_client -servername "${DOMAIN}" -connect "${DOMAIN}:443" 2>/dev/null | \
openssl x509 -enddate -noout | awk -F= '{print $2}')
EXPIRATION_SECONDS=$(date -d "${EXPIRATION_DATE}" +%s)
CURRENT_SECONDS=$(date +%s)
SECONDS_DIFFERENCE=$((EXPIRATION_SECONDS - CURRENT_SECONDS))
DAYS_DIFFERENCE=$((SECONDS_DIFFERENCE / 86400))

if [ "${DAYS_DIFFERENCE}" -lt "${DAYS_THRESHOLD}" ]; then
  echo "El certificado SSL para ${DOMAIN} expirará en ${DAYS_DIFFERENCE} días (${EXPIRATION_DATE})." | \
  mail -s "Alerta de expiración de certificado SSL" "${EMAIL}"
fi

9. Actualización automática de paquetes del sistema

Mantiene el sistema actualizado de forma automatizada.

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get autoremove -y

10. Comprobación de intentos fallidos de inicio de sesión SSH

Supervisa los intentos fallidos de acceso por SSH y envía una alerta si existen.

#!/bin/bash
LOG_FILE="/var/log/auth.log"
EMAIL="your-email@example.com"
FAILED_ATTEMPTS=$(grep "Failed password" "${LOG_FILE}" | wc -l)

if [ "${FAILED_ATTEMPTS}" -gt 0 ]; then
  echo "Se han detectado ${FAILED_ATTEMPTS} intentos fallidos de inicio de sesión SSH." | \
  mail -s "Alerta de inicio de sesión SSH" "${EMAIL}"
fi

Consejo final: Guarda estos scripts en un directorio seguro, dales permisos de ejecución con:

chmod +x script_name.sh

y programa su ejecución automática mediante cron para garantizar su funcionamiento continuo

Última actualización