Volver al índice

Módulo 3: Administración del Sistema

Automatización, gestión de usuarios, procesos y resolución de problemas

Automatización con Cron

Cron es el programador de tareas de Linux que permite ejecutar comandos en momentos específicos.

Sintaxis de Cron: * * * * * comando

│ │ │ │ │
│ │ │ │ └─ Día de la semana (0-7, 0 y 7 = domingo)
│ │ │ └─── Mes (1-12)
│ │ └───── Día del mes (1-31)
│ └─────── Hora (0-23)
└───────── Minuto (0-59)

# Editar tareas cron del usuario actual crontab -e
# Ejemplos de tareas programadas # Ejecutar script cada día a las 2 AM 0 2 * * * /ruta/backup.sh # Cada lunes a medianoche 0 0 * * 1 /ruta/limpieza.sh # Cada 6 horas 0 */6 * * * /ruta/actualizar.sh # Cada minuto (para pruebas) * * * * * echo "Hola" >> /tmp/log.txt
# Ver tareas programadas crontab -l # Eliminar todas las tareas crontab -r

Conocer tu Entorno

# Información del sistema uname -a # Información del kernel lsb_release -a # Distribución y versión cat /etc/os-release # Información detallada del SO
# Hardware lscpu # Información de CPU free -h # Memoria disponible (formato legible) lsblk # Discos y particiones df -h # Espacio en discos lshw -short # Resumen de hardware

Variables importantes: $HOME (directorio home), $PATH (rutas ejecutables), $USER (usuario actual)

Gestión de Software

Distribución Gestor Comandos principales
Ubuntu/Debian APT apt install, apt remove
Fedora/RHEL DNF/YUM dnf install, yum remove
Arch/Manjaro Pacman pacman -S, pacman -R
Universal Snap snap install, snap remove
# APT (Ubuntu/Debian) sudo apt update # Actualizar lista de paquetes sudo apt upgrade # Actualizar paquetes instalados sudo apt install nombre-paquete # Instalar paquete sudo apt remove nombre-paquete # Desinstalar paquete apt search "texto" # Buscar paquete apt list --installed # Listar paquetes instalados

Gestión de Usuarios y Grupos

# Crear usuario sudo adduser nombre-usuario # Interactivo (recomendado) sudo useradd -m -s /bin/bash usuario # No interactivo
# Información de usuarios id nombre-usuario # Información de usuario específico whoami # Usuario actual w # Usuarios conectados y qué hacen
# Gestión de contraseñas sudo passwd nombre-usuario # Cambiar contraseña (root) passwd # Cambiar propia contraseña
# Grupos sudo addgroup nombre-grupo # Crear grupo sudo usermod -aG grupo usuario # Añadir usuario a grupo groups nombre-usuario # Ver grupos de usuario
# Eliminar sudo userdel -r nombre-usuario # Eliminar usuario y su home sudo groupdel nombre-grupo # Eliminar grupo

Archivos importantes: /etc/passwd (usuarios), /etc/shadow (contraseñas), /etc/group (grupos), /etc/sudoers (permisos sudo)

Procesos y Servicios

# Ver procesos ps aux # Todos los procesos ps -ef | grep nombre # Buscar proceso específico top # Monitor interactivo (Ctrl+C para salir) htop # Mejorado (instalar: sudo apt install htop)
# Gestión de procesos kill PID # Terminar proceso amablemente kill -9 PID # Forzar terminación killall nombre-proceso # Terminar por nombre pkill -f "patrón" # Terminar por patrón
# Servicios (systemd) systemctl status nombre-servicio # Ver estado sudo systemctl start nombre-servicio # Iniciar sudo systemctl stop nombre-servicio # Detener sudo systemctl restart nombre-servicio # Reiniciar sudo systemctl enable nombre-servicio # Habilitar al inicio sudo systemctl disable nombre-servicio # Deshabilitar al inicio systemctl list-units --type=service # Listar todos los servicios

Revisión de Errores

# Logs del kernel dmesg # Mensajes del kernel dmesg | grep -i error # Filtrar errores dmesg -T # Con timestamps legibles
# Systemd logs journalctl # Todos los logs journalctl -f # Seguir logs en tiempo real journalctl -u nombre-servicio # Logs de servicio específico journalctl --since "2026-01-01" --until "2026-01-02" # Logs por fecha journalctl -p err # Solo errores
# Archivos de log importantes tail -f /var/log/syslog # Logs generales (seguir en tiempo real) cat /var/log/auth.log # Autenticación y seguridad less /var/log/kern.log # Logs del kernel

Buenas prácticas: Revisar logs regularmente, configurar alertas para errores críticos, documentar soluciones a problemas recurrentes.

Práctica Guiada: Sistema de Monitoreo

Crea un script que monitoree tu sistema y envíe alertas:

#!/bin/bash # monitor_sistema.sh # ------------------------------------------------- LOG_FILE="/var/log/monitor_sistema.log" UMBRAL_CPU=80 UMBRAL_MEMORIA=90 UMBRAL_DISCO=85
# Función para loggear loggear() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" }
# Monitorear CPU USO_CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) if (( $(echo "$USO_CPU > $UMBRAL_CPU" | bc -l) )); then loggear "ALERTA: Uso de CPU alto: ${USO_CPU}%" fi
# Monitorear Memoria USO_MEMORIA=$(free | grep Mem | awk '{print $3/$2 * 100.0}' | cut -d'.' -f1) if [ "$USO_MEMORIA" -gt "$UMBRAL_MEMORIA" ]; then loggear "ALERTA: Uso de memoria alto: ${USO_MEMORIA}%" fi
# Monitorear Disco USO_DISCO=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1) if [ "$USO_DISCO" -gt "$UMBRAL_DISCO" ]; then loggear "ALERTA: Uso de disco alto: ${USO_DISCO}%" fi
# Monitorear servicios críticos SERVICIOS=("ssh" "cron" "nginx") for servicio in "${SERVICIOS[@]}"; do if ! systemctl is-active --quiet "$servicio"; then loggear "ALERTA: Servicio $servicio no está corriendo" sudo systemctl restart "$servicio" loggear "INFO: Servicio $servicio reiniciado" fi done
loggear "Monitoreo completado sin alertas críticas"

Para automatizar: Agrega esta línea a crontab para ejecutar cada 5 minutos:

*/5 * * * * /ruta/monitor_sistema.sh