Linux · Sysadmin / DevOps

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.

koud@infra:~$
01

Navegación y archivos

Operaciones base de sistema de archivos: moverse, listar, crear, copiar, buscar y editar.

pwd

Muestra la ruta absoluta del directorio actual.

pwd
ls

Lista contenido de un directorio. -l detalle largo, -a incluye ocultos, -h tamaños legibles.

ls -lah /var/www
cd

Cambia de directorio. cd - vuelve al anterior, cd ~ va al home.

cd /etc/nginx/sites-available
mkdir

Crea directorios. -p crea rutas anidadas sin error si ya existen.

mkdir -p /opt/app/releases/v2
cp

Copia archivos o carpetas. -r recursivo, -v verboso, -a preserva atributos.

cp -av ./dist /var/www/app
mv

Mueve o renombra archivos.

mv app.conf.bak app.conf
rm

Elimina archivos. -r recursivo, -f fuerza sin confirmar. Usar con cuidado.

rm -rf ./tmp/cache
find

Busca archivos por nombre, tipo, tamaño o fecha de modificación.

find /var/log -name "*.log" -mtime +30
cat

Muestra el contenido completo de un archivo.

cat /etc/hostname
less

Muestra contenido paginado, ideal para archivos largos. Navegar con flechas, salir con q.

less /var/log/syslog
tail

Muestra el final de un archivo. -f sigue el archivo en tiempo real, -n define líneas.

tail -f -n 100 /var/log/nginx/error.log
head

Muestra las primeras líneas de un archivo.

head -n 20 access.log
grep

Busca patrones de texto. -i ignora mayúsculas, -r recursivo, -v invierte, -n muestra número de línea.

grep -rn "ERROR" /var/log/app/
sed

Editor de flujo para buscar y reemplazar texto sin abrir el archivo.

sed -i 's/DEBUG/false/g' .env
awk

Procesa texto por columnas, útil para extraer datos de logs o salidas de comandos.

awk '{print $1, $7}' access.log
nano / vim

Editores de texto en terminal. nano es simple, vim requiere modos (insertar con i, guardar y salir con :wq).

sudo nano /etc/hosts
tar

Empaqueta y comprime archivos. -czvf crea .tar.gz, -xzvf extrae.

tar -czvf backup.tar.gz /etc/nginx
ln

Crea enlaces. -s enlace simbólico (el más usado en configuraciones).

ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/
02

Usuarios y permisos

Gestión de identidad, propiedad de archivos y control de acceso.

whoami

Muestra el usuario con el que se está autenticado actualmente.

whoami
id

Muestra UID, GID y grupos del usuario actual o de otro especificado.

id deploy
sudo

Ejecuta un comando con privilegios de superusuario según reglas de /etc/sudoers.

sudo systemctl restart nginx
su

Cambia de usuario dentro de la sesión actual. su - carga el entorno completo del usuario destino.

su - deploy
useradd / adduser

Crea un nuevo usuario en el sistema.

sudo adduser deploy
usermod

Modifica un usuario existente, por ejemplo agregarlo a un grupo.

sudo usermod -aG docker deploy
passwd

Cambia la contraseña de un usuario.

sudo passwd deploy
chmod

Cambia 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--
chown

Cambia el propietario y/o grupo de un archivo o carpeta.

sudo chown -R www-data:www-data /var/www/app
groups

Lista los grupos a los que pertenece un usuario.

groups deploy
visudo

Edita de forma segura el archivo /etc/sudoers, validando sintaxis antes de guardar.

sudo visudo
03

Procesos y systemd

Control de procesos en ejecución y administración de servicios del sistema.

ps

Lista procesos en ejecución. aux muestra todos con detalle.

ps aux | grep node
top / htop

Monitor interactivo de procesos, CPU y memoria en tiempo real. htop es la versión mejorada y visual.

htop
kill

Envía una señal a un proceso por PID. -9 fuerza terminación inmediata.

kill -9 4821
pkill

Termina procesos por nombre en lugar de PID.

pkill -f "node server.js"
nohup

Ejecuta un comando que sigue corriendo aunque se cierre la sesión de terminal.

nohup ./start.sh &
jobs / fg / bg

Gestiona procesos en primer y segundo plano dentro de la misma sesión.

bg %1
systemctl

Controla servicios administrados por systemd: start, stop, restart, status, enable, disable.

sudo systemctl restart nginx
journalctl

Consulta los logs del sistema gestionados por systemd. -u filtra por servicio, -f sigue en vivo.

journalctl -u nginx -f
crontab

Programa tareas automáticas recurrentes. -e edita, -l lista las tareas del usuario actual.

crontab -e
uptime

Muestra tiempo de actividad del servidor y carga promedio del sistema.

uptime
04

Red y conectividad

Diagnóstico de red, puertos, DNS y tráfico.

ip a

Muestra interfaces de red y sus direcciones IP asignadas.

ip a
ping

Verifica conectividad hacia un host y mide latencia.

ping -c 4 8.8.8.8
curl

Hace peticiones HTTP desde la terminal. -I solo headers, -v modo detallado.

curl -I https://api.koud.mx
wget

Descarga archivos desde una URL.

wget https://ejemplo.com/archivo.zip
netstat / ss

Lista conexiones y puertos activos. ss es la versión moderna y más rápida.

ss -tulpn
nslookup / dig

Consulta registros DNS de un dominio. dig ofrece salida más detallada.

dig koud.mx MX
traceroute

Muestra la ruta de saltos de red hasta un destino, útil para diagnosticar latencia.

traceroute koud.mx
scp

Copia archivos entre servidores usando el protocolo SSH.

scp app.zip usuario@servidor:/opt/app
nmap

Escanea puertos abiertos y servicios expuestos de un host.

nmap -sV 192.168.1.10
hostname

Muestra o define el nombre del equipo en la red.

hostname -I # muestra la IP local
05

Discos y almacenamiento

Uso de espacio, montaje de volúmenes e inspección de sistemas de archivos.

df

Muestra espacio usado y disponible por partición. -h formato legible.

df -h
du

Muestra tamaño de carpetas y archivos. -sh resumen legible por directorio.

du -sh /var/log/*
lsblk

Lista dispositivos de bloque (discos y particiones) de forma jerárquica.

lsblk
mount / umount

Monta o desmonta un sistema de archivos en un punto del árbol de directorios.

sudo mount /dev/sdb1 /mnt/data
fdisk

Herramienta para crear, ver y modificar tablas de particiones. -l lista particiones existentes.

sudo fdisk -l
rsync

Sincroniza archivos entre carpetas o servidores de forma incremental. -avz comprime y preserva atributos.

rsync -avz ./build/ usuario@servidor:/var/www/app/
06

Gestión de paquetes

Instalación y actualización de software según la distribución.

apt

Gestor de paquetes de Debian/Ubuntu. update refresca índices, install instala, upgrade actualiza.

sudo apt update && sudo apt install nginx
yum / dnf

Gestor de paquetes de RHEL/CentOS/Fedora. dnf es la evolución moderna de yum.

sudo dnf install nginx
snap

Gestiona paquetes en formato snap, autocontenidos y con actualización automática.

sudo snap install code --classic
dpkg

Instala o consulta paquetes .deb de forma directa, sin resolver dependencias automáticamente.

sudo dpkg -i paquete.deb
which / whereis

Muestra la ruta del binario de un comando instalado.

which node
07

Logs y monitoreo

Observabilidad: consulta de logs, métricas y salud del sistema.

dmesg

Muestra mensajes del kernel, útil para diagnosticar hardware o errores de arranque.

dmesg | tail -50
free

Muestra uso de memoria RAM y swap. -h formato legible.

free -h
vmstat

Estadísticas de memoria, procesos, CPU e I/O en intervalos.

vmstat 2 5
iostat

Muestra estadísticas de uso de CPU y dispositivos de entrada/salida (disco).

iostat -x 2
watch

Ejecuta un comando repetidamente mostrando la salida en pantalla completa.

watch -n 2 df -h
logrotate

Gestiona la rotación, compresión y eliminación automática de logs antiguos.

sudo logrotate -f /etc/logrotate.conf
08

Seguridad y firewall

Control de acceso a nivel de red y hardening básico.

ufw

Firewall simplificado de Ubuntu. Gestiona reglas de entrada/salida por puerto o servicio.

sudo ufw allow 443/tcp && sudo ufw enable
iptables

Firewall de bajo nivel del kernel, más granular que ufw.

sudo iptables -L -n -v
fail2ban-client

Gestiona bloqueos automáticos de IPs con intentos fallidos de acceso (SSH, formularios, etc).

sudo fail2ban-client status sshd
openssl

Herramienta para generar certificados, claves y verificar conexiones TLS/SSL.

openssl s_client -connect koud.mx:443
certbot

Emite y renueva certificados SSL gratuitos de Let's Encrypt.

sudo certbot --nginx -d koud.mx
09

Docker y contenedores

Ciclo de vida de contenedores e imágenes.

docker ps

Lista contenedores en ejecución. -a incluye detenidos.

docker ps -a
docker run

Crea y arranca un contenedor a partir de una imagen.

docker run -d -p 3000:3000 --name app node:20
docker exec

Ejecuta un comando dentro de un contenedor activo.

docker exec -it app sh
docker logs

Muestra la salida de un contenedor. -f sigue en tiempo real.

docker logs -f app
docker build

Construye una imagen a partir de un Dockerfile.

docker build -t koud/app:latest .
docker compose

Orquesta múltiples contenedores definidos en docker-compose.yml.

docker compose up -d
docker system prune

Limpia imágenes, contenedores y redes no usadas para liberar espacio.

docker system prune -af
10

SSH y transferencia

Acceso remoto seguro y movimiento de archivos entre servidores.

ssh

Abre una sesión remota segura hacia otro servidor.

ssh usuario@servidor.com -p 22
ssh-keygen

Genera un par de llaves pública/privada para autenticación sin contraseña.

ssh-keygen -t ed25519 -C "cyn@koud.mx"
ssh-copy-id

Copia la llave pública local al servidor remoto para habilitar login sin contraseña.

ssh-copy-id usuario@servidor.com
scp / rsync

Transfieren archivos sobre SSH. rsync es preferible para sincronizaciones grandes o repetidas.

scp -r ./dist usuario@servidor:/var/www/app
tmux / screen

Mantienen sesiones de terminal activas aunque se cierre la conexión SSH.

tmux new -s deploy
11

Salud y disponibilidad

Comandos para confirmar que un servidor y sus servicios están funcionando correctamente.

systemctl is-active

Confirma en una sola palabra si un servicio está corriendo (active/failed/inactive). Ideal para scripts de verificación.

systemctl is-active nginx
systemctl list-units --failed

Lista todos los servicios que fallaron al iniciar, útil como chequeo general post-reinicio.

systemctl list-units --failed
systemd-analyze

Mide el tiempo de arranque del sistema. blame muestra qué servicio tardó más en iniciar.

systemd-analyze blame | head
uptime

Muestra tiempo activo y load average (1, 5, 15 min). Un load sostenido por encima del número de núcleos indica saturación.

uptime
lsof

Lista archivos y puertos abiertos por proceso. Útil para saber qué proceso usa un puerto o archivo bloqueado.

sudo lsof -i :3000
pgrep / pidof

Verifica si un proceso específico está corriendo devolviendo su PID, sin depender de ps + grep.

pgrep -f "node server.js"
curl (health check)

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/health
ab / wrk

Pruebas 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/
smartctl

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/sda
sensors

Muestra temperatura de CPU y otros componentes, relevante en servidores físicos o bare metal.

sensors
ncdu

Explorador interactivo de uso de disco, más rápido de navegar que combinar du + sort manualmente.

ncdu /var
w

Muestra quién está conectado al servidor actualmente y qué está ejecutando.

w
12

Auditoría y hardening

Herramientas para validar la postura de seguridad de un servidor: accesos, integridad, vulnerabilidades y malware.

lynis

Auditoría de seguridad completa del sistema: kernel, permisos, servicios, firewall. Genera un reporte con hardening index.

sudo lynis audit system
rkhunter

Escanea el sistema en busca de rootkits, backdoors y exploits locales conocidos.

sudo rkhunter --check
chkrootkit

Alternativa a rkhunter para detección de rootkits, útil correrlas en conjunto para doble validación.

sudo chkrootkit
clamscan / freshclam

Antivirus para Linux. freshclam actualiza las firmas, clamscan escanea archivos o directorios en busca de malware.

sudo freshclam && sudo clamscan -r /var/www
aide

Monitorea integridad de archivos del sistema comparando hashes contra una base inicial, detecta cambios no autorizados.

sudo aide --check
auditd / ausearch

Registra eventos de seguridad a nivel de kernel (acceso a archivos, cambios de permisos, ejecución de comandos).

sudo ausearch -m USER_LOGIN
last / lastb

Muestra historial de inicios de sesión exitosos (last) y fallidos (lastb), clave para detectar accesos sospechosos.

last -n 20 && sudo lastb -n 20
fail2ban-client status

Revisa cuántas IPs han sido bloqueadas por intentos fallidos de acceso en cada jail configurado.

sudo fail2ban-client status sshd
apt list --upgradable

Lista paquetes con actualizaciones pendientes, incluyendo parches de seguridad críticos.

apt list --upgradable 2>/dev/null | grep -i security
unattended-upgrades

Configura la instalación automática de parches de seguridad sin intervención manual.

sudo dpkg-reconfigure unattended-upgrades
nmap (auditoría de puertos)

Escanea el propio servidor desde afuera para confirmar que solo los puertos esperados están expuestos.

nmap -sV -p- IP_SERVIDOR
openssl (verificación TLS)

Verifica 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 -dates
13

Respaldos y recuperación

Generación, verificación y sincronización de respaldos, incluyendo bases de datos y almacenamiento en la nube.

tar (respaldo comprimido)

Empaqueta y comprime carpetas completas en un solo archivo para respaldo.

tar -czvf backup-$(date +%F).tar.gz /var/www/app
rsync (respaldo incremental)

Sincroniza 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/
pg_dump / pg_restore

Respalda y restaura bases de datos PostgreSQL (incluyendo instancias Supabase). -Fc genera formato comprimido restaurable.

pg_dump -Fc -h host -U usuario basedatos > backup.dump
mysqldump

Respalda bases de datos MySQL/MariaDB en un archivo SQL exportable.

mysqldump -u usuario -p basedatos > backup.sql
rclone

Sincroniza 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 --progress
restic / borgbackup

Herramientas 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-repo
sha256sum

Genera un hash de verificación para confirmar que un respaldo no se corrompió al copiarlo o transferirlo.

sha256sum backup.tar.gz > backup.tar.gz.sha256
tar -tzvf (verificar integridad)

Lista el contenido de un archivo comprimido sin extraerlo, confirmando que el archivo no está dañado.

tar -tzvf backup.tar.gz > /dev/null && echo OK
crontab (programar respaldo)

Automatiza la ejecución periódica de un script de respaldo.

0 3 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
14

Guí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/
$ sin resultados para ese filtro