Mejores prácticas de la CLI de Linux
Un resumen condensado de las 25 prácticas más importantes de la CLI de Linux para equipos de backend de Python: flujos de trabajo de terminal rápidos y seguros en servidores y portátiles.
-
Prefiere SIGTERM sobre SIGKILL: Permite que uvicorn/Gunicorn drene las conexiones antes de
kill -9(Gestión de Procesos y Recursos). -
Ejecuta APIs bajo systemd o Kubernetes: No
nohupdesnudo en sesiones SSH: sobrevive a desconexiones y reinicios. -
Persiste operaciones con tmux: Migraciones largas y colas de logs sobreviven a la suspensión del portátil (SSH y Trabajo Remoto).
-
Permite SSH antes de habilitar el firewall: Abre el puerto 22 (o la ruta del bastion) antes de
ufw enable: evita el bloqueo. -
Usuario de servicio no root: Ejecuta Python en puertos altos detrás de nginx/caddy; nunca como root para el puerto 80.
-
Diagnostica con journalctl:
systemctl statusy luegojournalctl -u <unidad> -n 200en VMs (Esenciales de Sysadmin). -
Bloquea archivos secretos:
chmod 600en archivos.envy de credenciales. -
Prefiere ripgrep en repositorios:
rgrespeta.gitignorey omite.venv/(Búsqueda y Expresiones Regulares). -
Ámbito de find y grep: Nunca busques desde
/sin filtrar: empieza en/var/log/appo la raíz del proyecto. -
Usa jq en logs JSON: Filtra
level,request_id,duration_ms; nogrep Erroren líneas estructuradas (Pipes y Procesamiento de Texto). -
curl -sf para humo de salud: Los scripts fallan en 5xx; añade
-w time_totalpara comprobaciones puntuales de latencia. -
ss reemplaza a netstat:
ss -tlnppara puertos en escucha y backlog. -
lsof para conflictos de puertos:
lsof -i :8000antes de matar PIDs aleatorios de Python. -
Inicia scripts bash con
set -euo pipefail: Falla rápido; captura errores de pipeline. -
Usa
$()en lugar de backticks: Sustitución de comandos anidada y comillas más claras. -
Redirige stderr en logs:
cmd > out.log 2>&1para paquetes de post-mortem. -
Usa
uv sync --frozenen despliegues: Entorno reproducible desde el archivo de bloqueo; nopip install -rsin hash. -
pipx para CLIs globales: ruff, httpie, copier aislados del venv del proyecto (Python en la Shell).
-
Nunca uses sudo pip: Rompe el Python de la distribución; solo venv/uv.
-
ProxyJump en la configuración SSH: Documenta la ruta del bastion para staging/prod; no escribas IPs ad hoc.
-
LocalForward bind 127.0.0.1: Túneles de base de datos no expuestos en todas las interfaces.
-
df y du antes del despliegue: Disco lleno rompe escrituras de logs y subidas.
-
Confía scripts de humo en
bin/: Mismas comprobaciones de salud curl localmente, en CI y post-despliegue SSH. -
Promociona alias repetidos a scripts:
bin/versionado con revisión supera al shell personal únicamente. -
LC_ALL=C para logs ASCII: Ordenación/awk predecible al buscar en logs de acceso.
Preguntas frecuentes
¿htop o top?
htop por defecto interactivo; top cuando la imagen mínima carece del paquete htop.
¿Scripts bash vs operaciones de Python?
Shell para pegamento en el servidor; Python cuando la lógica excede ~20 líneas o necesita tests en el repositorio.
¿Desarrolladores de Windows?
WSL2 para la misma documentación de CLI; el triaje de producción sigue siendo SSH en Linux.
¿Cola de logs en K8s?
kubectl logs -f deploy/billing-api - mismos filtros jq en la salida estándar del contenedor.
Relacionado
- Scripts robustos - patrones de bash
- Despliegue de FastAPI - comandos de producción
- Pipelines de CI/CD - paridad con local
- Depuración en producción - herramientas de incidentes
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.