0%
Administración de Sistemas Linux: la Guía Completa

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.

I

InSkillCoach

· min

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
CriteriocronTimer de systemd
SencillezBasta una líneaDos archivos de unidad
RegistroHay que gestionarlo uno mismoIntegrado en journalctl
Recuperación si la máquina está apagadaNo (salvo anacron)Sí con Persistent=true
Dependencias entre tareasNoSí (After=, Requires=)
PrecisiónAl minutoAl 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 visudo para 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-reload y comprueba con systemctl status.
  • Prefiere kill (SIGTERM) a kill -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.

InSkillCoach

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+
1.5k
348

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!