Administración de Sistemas Linux: la Guía Completa
Aprende administración de sistemas Linux: usuarios, servicios systemd, procesos, monitorización de disco y memoria, logs, cron y copias de seguridad con rsync.
InSkillCoach
Administración de Sistemas Linux: la Guía Completa
Administrar un sistema Linux es mucho más que teclear unos cuantos comandos en un terminal. Es entender cómo interactúan los usuarios, los servicios, los procesos y el almacenamiento, y saber intervenir con rapidez cuando algo deja de funcionar. En esta guía cubrimos los siete pilares de la administración de sistemas: la gestión de usuarios, los servicios systemd, los procesos, la monitorización de recursos, los registros, la planificación de tareas y las copias de seguridad. Cada sección contiene comandos reales que puedes ejecutar en cualquier distribución moderna (Debian, Ubuntu, Rocky Linux, Fedora).
1. Gestión de Usuarios y Grupos
Crear y modificar usuarios
El comando useradd crea un usuario. En la mayoría de las distribuciones, conviene usar la opción -m para crear el directorio personal.
# Crear un usuario con su directorio personal y un shell bash
sudo useradd -m -s /bin/bash alice
# Definir su contraseña
sudo passwd alice
# Comprobar la información de un usuario
id alice
getent passwd alice
El comando usermod modifica una cuenta existente:
# Añadir a alice al grupo docker (la opción -a es indispensable para no
# sobrescribir los grupos existentes)
sudo usermod -aG docker alice
# Cambiar el shell de inicio de sesión
sudo usermod -s /bin/zsh alice
# Bloquear una cuenta (impide el inicio de sesión con contraseña)
sudo usermod -L alice
# Desbloquear la cuenta
sudo usermod -U alice
# Definir una fecha de caducidad de la cuenta
sudo usermod -e 2026-12-31 alice
Gestionar los grupos
# Crear un grupo
sudo groupadd developpeurs
# Listar los grupos de un usuario
groups alice
# Eliminar a un usuario de un grupo
sudo gpasswd -d alice docker
# Eliminar un grupo
sudo groupdel developpeurs
Configurar sudo correctamente
No modifiques nunca /etc/sudoers directamente con un editor convencional: un error de sintaxis puede dejarte sin acceso root. Utiliza siempre visudo, que valida la sintaxis antes de guardar.
# Editar el archivo sudoers de forma segura
sudo visudo
# Buena práctica: crear un archivo específico en /etc/sudoers.d/
sudo visudo -f /etc/sudoers.d/alice
Ejemplos de reglas sudoers:
# Dar todos los derechos a alice (con contraseña)
alice ALL=(ALL:ALL) ALL
# Autorizar al grupo admin a hacerlo todo
%admin ALL=(ALL) ALL
# Autorizar a alice a reiniciar nginx sin contraseña, y nada más
alice ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
2. Servicios systemd
systemctl: el director de orquesta
systemd es el sistema de init de prácticamente todas las distribuciones actuales. El comando systemctl controla los servicios (denominados unidades).
# Iniciar, detener, reiniciar un servicio
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# Recargar la configuración sin interrumpir el servicio (si es compatible)
sudo systemctl reload nginx
# Activar el inicio automático en el arranque
sudo systemctl enable nginx
# Activar e iniciar con un solo comando
sudo systemctl enable --now nginx
# Comprobar el estado detallado
systemctl status nginx
# Listar todas las unidades fallidas
systemctl --failed
# Listar todos los servicios activos
systemctl list-units --type=service --state=running
Anatomía de una unidad systemd
Las unidades personalizadas se colocan en /etc/systemd/system/. Este es un servicio mínimo para una aplicación:
# /etc/systemd/system/monapp.service
[Unit]
Description=Mon application web
After=network.target
[Service]
Type=simple
User=monapp
WorkingDirectory=/opt/monapp
ExecStart=/opt/monapp/bin/serveur --port 8080
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Tras cualquier modificación de un archivo de unidad, recarga el demonio:
# Tener en cuenta los nuevos archivos de unidad
sudo systemctl daemon-reload
sudo systemctl enable --now monapp
journalctl: leer los registros de los servicios
# Registros de un servicio concreto
journalctl -u nginx
# Seguir los registros en tiempo real (equivalente a tail -f)
journalctl -u nginx -f
# Registros desde el último arranque
journalctl -b
# Registros de las dos últimas horas
journalctl --since "2 hours ago"
# Filtrar por nivel de gravedad (errores y superiores)
journalctl -p err -b
3. Gestión de Procesos
Observar los procesos
# Vista completa de todos los procesos
ps aux
# Árbol de procesos (quién ha lanzado qué)
ps auxf
# Vista clásica en tiempo real
top
# Vista en tiempo real mejorada (hay que instalarlo: apt install htop)
htop
# Encontrar el PID de un proceso por su nombre
pgrep -a nginx
Prioridades: nice y renice
La prioridad de un proceso va de -20 (prioridad máxima) a 19 (prioridad mínima). Solo root puede asignar un valor negativo.
# Lanzar una compresión con prioridad baja para no molestar al sistema
nice -n 19 tar -czf /backup/archive.tar.gz /var/www
# Cambiar la prioridad de un proceso ya lanzado (PID 4321)
sudo renice -n 10 -p 4321
Terminar un proceso
# Solicitar una parada limpia (SIGTERM, señal 15)
kill 4321
# Forzar la parada (SIGKILL, señal 9): solo como último recurso
kill -9 4321
# Matar todos los procesos que tengan un nombre dado
pkill -f "python script_bloque.py"
# Enviar una señal de recarga de la configuración
kill -HUP 4321
4. Monitorización de Disco y Memoria
Espacio en disco: df y du
# Ocupación de todos los sistemas de archivos, en unidades legibles
df -h
# Ocupación de los inodos (un disco puede tener los inodos llenos con espacio libre)
df -i
# Tamaño total de un directorio
du -sh /var/log
# Los 10 subdirectorios más grandes de /var
du -h --max-depth=1 /var | sort -rh | head -10
Memoria: free
# Estado de la memoria en unidades legibles
free -h
# Actualizar cada 5 segundos
free -h -s 5
Fíjate en la columna available y no en free: Linux utiliza la memoria no usada como caché de disco, y esa caché se libera automáticamente cuando las aplicaciones la necesitan. Una memoria «llena» de caché es un comportamiento normal y sano.
Entradas/salidas de disco: iostat
iostat forma parte del paquete sysstat (sudo apt install sysstat).
# Estadísticas de E/S extendidas, actualizadas cada 2 segundos
iostat -x 2
# Centrarse en un disco concreto
iostat -x 2 /dev/sda
Las columnas que hay que vigilar: %util (saturación del disco; cerca del 100 % = cuello de botella) y await (tiempo medio de espera de las peticiones en milisegundos).
5. Registros: journald y logrotate
Controlar el tamaño de journald
Por defecto, journald puede ocupar un espacio considerable en /var/log/journal. Límítalo en /etc/systemd/journald.conf:
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=500M
MaxRetentionSec=1month
# Aplicar la configuración
sudo systemctl restart systemd-journald
# Comprobar el espacio ocupado por los registros
journalctl --disk-usage
# Purgar manualmente por encima de 200 MB
sudo journalctl --vacuum-size=200M
logrotate para los archivos de log clásicos
Las aplicaciones que escriben en /var/log (nginx, aplicaciones propias) deben gestionarse con logrotate. Ejemplo de configuración en /etc/logrotate.d/monapp:
# /etc/logrotate.d/monapp
/var/log/monapp/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 monapp monapp
postrotate
systemctl reload monapp > /dev/null 2>&1 || true
endscript
}
# Probar la configuración sin modificar nada
sudo logrotate -d /etc/logrotate.d/monapp
# Forzar una rotación inmediata
sudo logrotate -f /etc/logrotate.d/monapp
6. Tareas Planificadas: cron y timers de systemd
cron: el método clásico
# Editar la crontab del usuario actual
crontab -e
# Listar las tareas planificadas
crontab -l
Sintaxis de una línea de cron: minuto hora día_del_mes mes día_de_la_semana comando.
# Copia de seguridad todos los días a las 2:30
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# Limpieza todos los domingos a las 4:00
0 4 * * 0 find /tmp -type f -mtime +7 -delete
# Cada 15 minutos
*/15 * * * * /usr/local/bin/verifier-service.sh
Timers de systemd: la alternativa moderna
Los timers ofrecen registro a través de journalctl, gestión de dependencias y recuperación de las ejecuciones perdidas (Persistent=true). Se necesitan dos archivos: un servicio y un timer.
# /etc/systemd/system/backup.service
[Unit]
Description=Sauvegarde quotidienne
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Déclenche la sauvegarde quotidienne
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
[Install]
WantedBy=timers.target
# Activar el timer y comprobar la próxima ejecución
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
| Criterio | cron | Timer de systemd |
|---|---|---|
| Sencillez | Basta una línea | Dos archivos de unidad |
| Registro | Hay que gestionarlo uno mismo | Integrado en journalctl |
| Recuperación si la máquina está apagada | No (salvo anacron) | Sí con Persistent=true |
| Dependencias entre tareas | No | Sí (After=, Requires=) |
| Precisión | Al minuto | Al segundo |
7. Copias de Seguridad: rsync y tar
rsync: sincronización incremental
rsync solo transfiere las diferencias, lo que lo hace ideal para copias de seguridad periódicas, tanto en local como en remoto.
# Copia local: -a conserva permisos, fechas y enlaces; -v modo detallado
rsync -av /var/www/ /backup/www/
# Simulación sin copiar nada (prueba siempre primero)
rsync -avn --delete /var/www/ /backup/www/
# Espejo exacto: --delete elimina en el destino lo que ha desaparecido del origen
rsync -av --delete /var/www/ /backup/www/
# Copia remota por SSH con exclusiones
rsync -av --delete \
--exclude 'cache/' \
--exclude '*.tmp' \
-e "ssh -p 2222" \
/var/www/ backup@serveur-backup:/backups/www/
Ojo con la barra final: /var/www/ copia el contenido del directorio, mientras que /var/www copia el propio directorio dentro del destino.
tar: archivos completos
# Crear un archivo comprimido con marca de tiempo
tar -czf /backup/www-$(date +%Y%m%d).tar.gz /var/www
# Listar el contenido sin extraer
tar -tzf /backup/www-20260917.tar.gz
# Extraer en un directorio concreto
tar -xzf /backup/www-20260917.tar.gz -C /tmp/restauration
# Archivo con compresión zstd (más rápida que gzip)
tar --zstd -cf /backup/www.tar.zst /var/www
Verificar tus copias de seguridad
Una copia de seguridad sin probar no es una copia de seguridad. Programa restauraciones de prueba con regularidad:
# Restaurar en un directorio temporal y comparar con el origen
mkdir /tmp/test-restauration
tar -xzf /backup/www-20260917.tar.gz -C /tmp/test-restauration
diff -r /tmp/test-restauration/var/www /var/www
Buenas prácticas
- Utiliza siempre
visudopara modificar la configuración de sudo, y prefiere archivos específicos en/etc/sudoers.d/. - Concede los permisos sudo más restringidos posible: un comando concreto en lugar de
ALL. - Tras cada modificación de una unidad systemd, ejecuta
systemctl daemon-reloady comprueba consystemctl status. - Prefiere
kill(SIGTERM) akill -9: da a los procesos la oportunidad de terminar limpiamente. - Vigila los inodos (
df -i) tanto como el espacio en disco: un sistema puede quedar bloqueado con espacio libre. - Limita el tamaño de journald y configura logrotate desde la instalación de un nuevo servicio.
- Redirige la salida de tus tareas cron a un archivo de log o usa timers de systemd para beneficiarte de journalctl.
- Aplica la regla 3-2-1 en las copias de seguridad: tres copias, dos soportes distintos, una copia fuera de las instalaciones.
- Prueba tus restauraciones con regularidad, no solo tus copias de seguridad.
Conclusión
La administración de sistemas Linux se apoya en un pequeño número de herramientas fundamentales que usarás a diario: useradd y visudo para las cuentas, systemctl y journalctl para los servicios, ps, top y kill para los procesos, df, free e iostat para los recursos, cron o los timers de systemd para la automatización, y rsync para las copias de seguridad. Dominar estas herramientas te permite diagnosticar y resolver la gran mayoría de las incidencias en producción.
El siguiente paso lógico es automatizar: convierte tus intervenciones manuales en scripts, luego en tareas planificadas y después en configuración gestionada con herramientas como Ansible. Un buen administrador de sistemas es aquel que nunca repite dos veces a mano la misma operación.
Acerca de InSkillCoach
Experto en formación y tecnologías
Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.
Certificaciones:
- AWS Certified Solutions Architect – Professional
- Certificaciones de Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión