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

```bash
#!/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.

```bash
#!/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.

```bash
#!/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.

```bash
#!/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.

```bash
#!/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á.

```bash
#!/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.

```bash
#!/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.

```bash
#!/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.

```bash
#!/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.

```bash
#!/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:

```bash
chmod +x script_name.sh
```

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