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