Comandos esenciales para infraestructura
Diccionario organizado por dominio operativo, con sintaxis, ejemplos reales y guías de proceso para las tareas más comunes en administración de servidores.
Usuarios y permisos
Gestión de identidad, propiedad de archivos y control de acceso.
Muestra el usuario con el que se está autenticado actualmente.
whoamiMuestra UID, GID y grupos del usuario actual o de otro especificado.
id deployEjecuta un comando con privilegios de superusuario según reglas de /etc/sudoers.
sudo systemctl restart nginxCambia de usuario dentro de la sesión actual. su - carga el entorno completo del usuario destino.
su - deployCrea un nuevo usuario en el sistema.
sudo adduser deployModifica un usuario existente, por ejemplo agregarlo a un grupo.
sudo usermod -aG docker deployCambia la contraseña de un usuario.
sudo passwd deployCambia permisos de lectura, escritura y ejecución. Notación numérica: 7=rwx, 6=rw-, 5=r-x, 4=r--.
chmod 644 deploy.sh # rw-r--r--Cambia el propietario y/o grupo de un archivo o carpeta.
sudo chown -R www-data:www-data /var/www/appLista los grupos a los que pertenece un usuario.
groups deployEdita de forma segura el archivo /etc/sudoers, validando sintaxis antes de guardar.
sudo visudoProcesos y systemd
Control de procesos en ejecución y administración de servicios del sistema.
Lista procesos en ejecución. aux muestra todos con detalle.
ps aux | grep nodeMonitor interactivo de procesos, CPU y memoria en tiempo real. htop es la versión mejorada y visual.
htopEnvía una señal a un proceso por PID. -9 fuerza terminación inmediata.
kill -9 4821Termina procesos por nombre en lugar de PID.
pkill -f "node server.js"Ejecuta un comando que sigue corriendo aunque se cierre la sesión de terminal.
nohup ./start.sh &Gestiona procesos en primer y segundo plano dentro de la misma sesión.
bg %1Controla servicios administrados por systemd: start, stop, restart, status, enable, disable.
sudo systemctl restart nginxConsulta los logs del sistema gestionados por systemd. -u filtra por servicio, -f sigue en vivo.
journalctl -u nginx -fPrograma tareas automáticas recurrentes. -e edita, -l lista las tareas del usuario actual.
crontab -eMuestra tiempo de actividad del servidor y carga promedio del sistema.
uptimeRed y conectividad
Diagnóstico de red, puertos, DNS y tráfico.
Muestra interfaces de red y sus direcciones IP asignadas.
ip aVerifica conectividad hacia un host y mide latencia.
ping -c 4 8.8.8.8Hace peticiones HTTP desde la terminal. -I solo headers, -v modo detallado.
curl -I https://api.koud.mxDescarga archivos desde una URL.
wget https://ejemplo.com/archivo.zipLista conexiones y puertos activos. ss es la versión moderna y más rápida.
ss -tulpnConsulta registros DNS de un dominio. dig ofrece salida más detallada.
dig koud.mx MXMuestra la ruta de saltos de red hasta un destino, útil para diagnosticar latencia.
traceroute koud.mxCopia archivos entre servidores usando el protocolo SSH.
scp app.zip usuario@servidor:/opt/appEscanea puertos abiertos y servicios expuestos de un host.
nmap -sV 192.168.1.10Muestra o define el nombre del equipo en la red.
hostname -I # muestra la IP localDiscos y almacenamiento
Uso de espacio, montaje de volúmenes e inspección de sistemas de archivos.
Muestra espacio usado y disponible por partición. -h formato legible.
df -hMuestra tamaño de carpetas y archivos. -sh resumen legible por directorio.
du -sh /var/log/*Lista dispositivos de bloque (discos y particiones) de forma jerárquica.
lsblkMonta o desmonta un sistema de archivos en un punto del árbol de directorios.
sudo mount /dev/sdb1 /mnt/dataHerramienta para crear, ver y modificar tablas de particiones. -l lista particiones existentes.
sudo fdisk -lSincroniza archivos entre carpetas o servidores de forma incremental. -avz comprime y preserva atributos.
rsync -avz ./build/ usuario@servidor:/var/www/app/Gestión de paquetes
Instalación y actualización de software según la distribución.
Gestor de paquetes de Debian/Ubuntu. update refresca índices, install instala, upgrade actualiza.
sudo apt update && sudo apt install nginxGestor de paquetes de RHEL/CentOS/Fedora. dnf es la evolución moderna de yum.
sudo dnf install nginxGestiona paquetes en formato snap, autocontenidos y con actualización automática.
sudo snap install code --classicInstala o consulta paquetes .deb de forma directa, sin resolver dependencias automáticamente.
sudo dpkg -i paquete.debMuestra la ruta del binario de un comando instalado.
which nodeLogs y monitoreo
Observabilidad: consulta de logs, métricas y salud del sistema.
Muestra mensajes del kernel, útil para diagnosticar hardware o errores de arranque.
dmesg | tail -50Muestra uso de memoria RAM y swap. -h formato legible.
free -hEstadísticas de memoria, procesos, CPU e I/O en intervalos.
vmstat 2 5Muestra estadísticas de uso de CPU y dispositivos de entrada/salida (disco).
iostat -x 2Ejecuta un comando repetidamente mostrando la salida en pantalla completa.
watch -n 2 df -hGestiona la rotación, compresión y eliminación automática de logs antiguos.
sudo logrotate -f /etc/logrotate.confSeguridad y firewall
Control de acceso a nivel de red y hardening básico.
Firewall simplificado de Ubuntu. Gestiona reglas de entrada/salida por puerto o servicio.
sudo ufw allow 443/tcp && sudo ufw enableFirewall de bajo nivel del kernel, más granular que ufw.
sudo iptables -L -n -vGestiona bloqueos automáticos de IPs con intentos fallidos de acceso (SSH, formularios, etc).
sudo fail2ban-client status sshdHerramienta para generar certificados, claves y verificar conexiones TLS/SSL.
openssl s_client -connect koud.mx:443Emite y renueva certificados SSL gratuitos de Let's Encrypt.
sudo certbot --nginx -d koud.mxDocker y contenedores
Ciclo de vida de contenedores e imágenes.
Lista contenedores en ejecución. -a incluye detenidos.
docker ps -aCrea y arranca un contenedor a partir de una imagen.
docker run -d -p 3000:3000 --name app node:20Ejecuta un comando dentro de un contenedor activo.
docker exec -it app shMuestra la salida de un contenedor. -f sigue en tiempo real.
docker logs -f appConstruye una imagen a partir de un Dockerfile.
docker build -t koud/app:latest .Orquesta múltiples contenedores definidos en docker-compose.yml.
docker compose up -dLimpia imágenes, contenedores y redes no usadas para liberar espacio.
docker system prune -afSSH y transferencia
Acceso remoto seguro y movimiento de archivos entre servidores.
Abre una sesión remota segura hacia otro servidor.
ssh usuario@servidor.com -p 22Genera un par de llaves pública/privada para autenticación sin contraseña.
ssh-keygen -t ed25519 -C "cyn@koud.mx"Copia la llave pública local al servidor remoto para habilitar login sin contraseña.
ssh-copy-id usuario@servidor.comTransfieren archivos sobre SSH. rsync es preferible para sincronizaciones grandes o repetidas.
scp -r ./dist usuario@servidor:/var/www/appMantienen sesiones de terminal activas aunque se cierre la conexión SSH.
tmux new -s deploySalud y disponibilidad
Comandos para confirmar que un servidor y sus servicios están funcionando correctamente.
Confirma en una sola palabra si un servicio está corriendo (active/failed/inactive). Ideal para scripts de verificación.
systemctl is-active nginxLista todos los servicios que fallaron al iniciar, útil como chequeo general post-reinicio.
systemctl list-units --failedMide el tiempo de arranque del sistema. blame muestra qué servicio tardó más en iniciar.
systemd-analyze blame | headMuestra tiempo activo y load average (1, 5, 15 min). Un load sostenido por encima del número de núcleos indica saturación.
uptimeLista archivos y puertos abiertos por proceso. Útil para saber qué proceso usa un puerto o archivo bloqueado.
sudo lsof -i :3000Verifica si un proceso específico está corriendo devolviendo su PID, sin depender de ps + grep.
pgrep -f "node server.js"Verifica que un endpoint de salud responda correctamente. -o /dev/null -w muestra solo el código de estado.
curl -s -o /dev/null -w "%{http_code}\n" https://api.koud.mx/healthPruebas de carga básicas para validar que un servicio soporta el tráfico esperado antes de un lanzamiento.
ab -n 500 -c 20 https://api.koud.mx/Consulta el estado de salud S.M.A.R.T. de un disco físico, detecta fallas antes de que ocurra la pérdida de datos.
sudo smartctl -H /dev/sdaMuestra temperatura de CPU y otros componentes, relevante en servidores físicos o bare metal.
sensorsExplorador interactivo de uso de disco, más rápido de navegar que combinar du + sort manualmente.
ncdu /varMuestra quién está conectado al servidor actualmente y qué está ejecutando.
wAuditoría y hardening
Herramientas para validar la postura de seguridad de un servidor: accesos, integridad, vulnerabilidades y malware.
Auditoría de seguridad completa del sistema: kernel, permisos, servicios, firewall. Genera un reporte con hardening index.
sudo lynis audit systemEscanea el sistema en busca de rootkits, backdoors y exploits locales conocidos.
sudo rkhunter --checkAlternativa a rkhunter para detección de rootkits, útil correrlas en conjunto para doble validación.
sudo chkrootkitAntivirus para Linux. freshclam actualiza las firmas, clamscan escanea archivos o directorios en busca de malware.
sudo freshclam && sudo clamscan -r /var/wwwMonitorea integridad de archivos del sistema comparando hashes contra una base inicial, detecta cambios no autorizados.
sudo aide --checkRegistra eventos de seguridad a nivel de kernel (acceso a archivos, cambios de permisos, ejecución de comandos).
sudo ausearch -m USER_LOGINMuestra historial de inicios de sesión exitosos (last) y fallidos (lastb), clave para detectar accesos sospechosos.
last -n 20 && sudo lastb -n 20Revisa cuántas IPs han sido bloqueadas por intentos fallidos de acceso en cada jail configurado.
sudo fail2ban-client status sshdLista paquetes con actualizaciones pendientes, incluyendo parches de seguridad críticos.
apt list --upgradable 2>/dev/null | grep -i securityConfigura la instalación automática de parches de seguridad sin intervención manual.
sudo dpkg-reconfigure unattended-upgradesEscanea el propio servidor desde afuera para confirmar que solo los puertos esperados están expuestos.
nmap -sV -p- IP_SERVIDORVerifica fecha de expiración y cadena de confianza de un certificado SSL en producción.
echo | openssl s_client -connect koud.mx:443 2>/dev/null | openssl x509 -noout -datesRespaldos y recuperación
Generación, verificación y sincronización de respaldos, incluyendo bases de datos y almacenamiento en la nube.
Empaqueta y comprime carpetas completas en un solo archivo para respaldo.
tar -czvf backup-$(date +%F).tar.gz /var/www/appSincroniza solo los cambios desde el último respaldo, mucho más rápido que copiar todo de nuevo.
rsync -avz --delete /var/www/app/ /mnt/backups/app/Respalda y restaura bases de datos PostgreSQL (incluyendo instancias Supabase). -Fc genera formato comprimido restaurable.
pg_dump -Fc -h host -U usuario basedatos > backup.dumpRespalda bases de datos MySQL/MariaDB en un archivo SQL exportable.
mysqldump -u usuario -p basedatos > backup.sqlSincroniza archivos hacia almacenamiento en la nube compatible con S3, incluyendo Cloudflare R2. Ideal para respaldos automatizados fuera del servidor.
rclone sync /var/backups r2:koud-backups/servidor-01 --progressHerramientas de respaldo con deduplicación, compresión y cifrado incorporado, con soporte para múltiples destinos remotos.
restic backup /var/www --repo /mnt/backups/restic-repoGenera un hash de verificación para confirmar que un respaldo no se corrompió al copiarlo o transferirlo.
sha256sum backup.tar.gz > backup.tar.gz.sha256Lista el contenido de un archivo comprimido sin extraerlo, confirmando que el archivo no está dañado.
tar -tzvf backup.tar.gz > /dev/null && echo OKAutomatiza la ejecución periódica de un script de respaldo.
0 3 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1Guías paso a paso
Procesos completos de infraestructura combinando varios comandos en secuencia.
Diagnosticar y liberar espacio en disco
Cuando un servidor reporta disco casi lleno y hay riesgo de caída de servicios.
- 1Revisar espacio total por partición.
df -h - 2Identificar qué carpetas ocupan más espacio dentro de la partición afectada.
du -sh /var/* | sort -rh | head -10 - 3Revisar logs grandes o antiguos, causa más común.
find /var/log -type f -size +100M - 4Forzar rotación y compresión de logs si aplica.
sudo logrotate -f /etc/logrotate.conf - 5Limpiar caché de paquetes y contenedores huérfanos.
sudo apt clean && docker system prune -af - 6Confirmar espacio recuperado.
df -h
Reiniciar un servicio caído
Un servicio (por ejemplo nginx o una API) dejó de responder.
- 1Verificar estado actual del servicio.
systemctl status nombre-servicio - 2Revisar los últimos logs para identificar la causa del fallo.
journalctl -u nombre-servicio -n 100 --no-pager - 3Verificar si el puerto sigue ocupado por un proceso zombie.
ss -tulpn | grep PUERTO - 4Reiniciar el servicio.
sudo systemctl restart nombre-servicio - 5Confirmar que arrancó correctamente y habilitarlo en el boot si no lo estaba.
systemctl is-active nombre-servicio && sudo systemctl enable nombre-servicio - 6Monitorear logs en vivo unos minutos para confirmar estabilidad.
journalctl -u nombre-servicio -f
Configurar acceso SSH sin contraseña
Habilitar autenticación por llave para automatizar despliegues o accesos frecuentes.
- 1Generar el par de llaves en la máquina local (si no existe).
ssh-keygen -t ed25519 -C "identificador" - 2Copiar la llave pública al servidor destino.
ssh-copy-id usuario@servidor - 3Verificar que el login funcione sin pedir contraseña.
ssh usuario@servidor - 4Endurecer el acceso deshabilitando login por contraseña en el servidor.
sudo nano /etc/ssh/sshd_config → PasswordAuthentication no - 5Reiniciar el servicio SSH para aplicar el cambio.
sudo systemctl restart ssh
Revisar y abrir un puerto en el firewall
Una aplicación nueva necesita exponer un puerto (por ejemplo una API en 3000 o un servicio en 5432).
- 1Confirmar que el proceso realmente está escuchando en el puerto esperado.
ss -tulpn | grep 3000 - 2Revisar reglas actuales del firewall.
sudo ufw status numbered - 3Abrir el puerto, idealmente restringido a un origen específico si es posible.
sudo ufw allow from IP_ORIGEN to any port 3000 - 4Confirmar la regla activa.
sudo ufw status - 5Probar conectividad externa al puerto.
curl -I http://IP_SERVIDOR:3000
Emitir certificado SSL con Let's Encrypt
Habilitar HTTPS en un dominio servido por nginx.
- 1Confirmar que el dominio ya resuelve correctamente al servidor.
dig +short dominio.com - 2Instalar certbot si no está presente.
sudo apt install certbot python3-certbot-nginx - 3Emitir el certificado y dejar que certbot configure nginx automáticamente.
sudo certbot --nginx -d dominio.com -d www.dominio.com - 4Verificar la renovación automática programada.
sudo certbot renew --dry-run - 5Confirmar que el sitio carga por HTTPS.
curl -I https://dominio.com
Desplegar y actualizar un contenedor en producción
Publicar una nueva versión de una app dentro de un contenedor sin downtime prolongado.
- 1Construir la nueva imagen con una etiqueta de versión clara.
docker build -t koud/app:v1.4 . - 2Verificar que el contenedor actual esté sano antes de tocarlo.
docker ps - 3Detener y remover el contenedor anterior.
docker stop app && docker rm app - 4Levantar el contenedor con la nueva imagen.
docker run -d -p 3000:3000 --name app koud/app:v1.4 - 5Revisar logs inmediatamente después del arranque.
docker logs -f app - 6Limpiar imágenes anteriores no usadas.
docker image prune -f
Checklist de salud general de un servidor
Validación rápida de que todo está corriendo correctamente, ideal como rutina diaria o post-despliegue.
- 1Revisar tiempo activo y carga del sistema.
uptime - 2Confirmar que no haya servicios caídos.
systemctl list-units --failed - 3Revisar memoria y espacio en disco disponibles.
free -h && df -h - 4Verificar que los procesos críticos estén activos.
pgrep -f "nombre-del-proceso" - 5Probar el endpoint de salud de la aplicación.
curl -s -o /dev/null -w "%{http_code}\n" https://tuapp.com/health - 6Revisar los logs recientes en busca de errores.
journalctl --since "1 hour ago" -p err
Auditoría de seguridad básica con Lynis
Evaluar la postura de seguridad de un servidor y obtener recomendaciones concretas de hardening.
- 1Instalar Lynis si no está presente.
sudo apt install lynis - 2Ejecutar la auditoría completa del sistema.
sudo lynis audit system - 3Revisar el "hardening index" y las advertencias marcadas como warning o suggestion.
cat /var/log/lynis-report.dat | grep warning - 4Complementar con un escaneo de rootkits.
sudo rkhunter --check --skip-keypress - 5Revisar accesos fallidos recientes por SSH.
sudo lastb -n 30 - 6Documentar hallazgos y aplicar correcciones priorizando lo marcado como crítico.
Configurar respaldo automático a Cloudflare R2
Sacar el respaldo del servidor de origen y programarlo para que corra sin intervención manual.
- 1Instalar y configurar rclone con las credenciales del bucket R2.
rclone config - 2Crear un script que respalde base de datos y archivos en un solo paquete.
pg_dump -Fc basedatos > /tmp/db.dump && tar -czf backup-$(date +%F).tar.gz /tmp/db.dump /var/www/app - 3Subir el paquete generado al bucket remoto.
rclone copy backup-$(date +%F).tar.gz r2:koud-backups/servidor-01 - 4Verificar integridad del archivo antes y después de subirlo.
sha256sum backup-$(date +%F).tar.gz - 5Programar el script como tarea recurrente.
crontab -e → 0 3 * * * /opt/scripts/backup-r2.sh - 6Probar una restauración real periódicamente, no solo confiar en que el respaldo se generó.
rclone copy r2:koud-backups/servidor-01/backup-2026-08-01.tar.gz /tmp/restore-test/