Acabas de entrar como junior Linux, soporte TI, DevOps trainee o "el que sabe de Linux". Te sientas, enciendes el portátil y… ¿ahora qué? Aquí tienes el mapa exacto según la situación más común que te vas a encontrar, basado en cientos de juniors que ya pasaron por ahí.
📋 Resumen rápido por situación
| Situación | Prioridad Día 1 | Herramienta clave | Objetivo semana 1 | Frecuencia |
|---|---|---|---|---|
| Sin documentación | Inventario | Ansible ping | Runbook emergencia | 80% |
| Todo monitorizado | Acceso read-only | Grafana/Zabbix | Dashboard personal | 15% |
| Sin monitorización | Netdata | Netdata | Visibilidad inmediata | 40% |
| CentOS 7 EOL | Inventario detallado | VM pruebas | Plan migración | 25% |
| Scripts antiguos | Logging básico | Git | Versionar 1 script crítico | 60% |
| Eres "el de sistemas" | Backup funcionando | Rsnapshot/Borg | Wiki interna | 35% |
Situación 1 – "Aquí no hay documentación y todo está en producción"
La más común - 80% de juniors empiezan aquí
- Día 1–3: Solo lee y pregunta. No toques nada en producción.
- Crea tu propio inventario: Este archivo te salvará la vida:
# ~/inventario.txt - Ejemplo real que yo usé en mi primer curro
# =============================================================
# IP Hostname SO Rol Responsable
10.10.1.10 web01 Ubuntu 20.04 Apache+PHP Pedro
10.10.1.11 web02 Ubuntu 20.04 Apache+PHP Pedro
10.10.2.20 db01 Debian 11 MariaDB Ana
10.10.3.30 backup01 Rocky 9 BackupPC tú :)
10.10.4.40 monitor01 Ubuntu 22.04 Zabbix (sin asignar)
# =============================================================
# Notas:
# - web01 y web02 están en balanceador round-robin
# - db01 replica a db02 (10.10.2.21) que está en mantenimiento
# - backup01 tiene 2TB libre, hace backup diario a las 02:00
- Instala Ansible en tu portátil y empieza con lo básico:
# Primero, con permiso, haz un inventario automático
sudo apt install ansible -y # o dnf install ansible-core
echo "[webservers]" > ~/ansible_hosts
echo "10.10.1.10" >> ~/ansible_hosts
echo "10.10.1.11" >> ~/ansible_hosts
# Prueba conectividad (¡con permiso de tu mentor!)
ansible -i ~/ansible_hosts all -m ping
# Si funciona, obtén info básica
ansible -i ~/ansible_hosts all -m setup -a "filter=ansible_distribution*"
Situación 2 – "Todo está monitorizado con Zabbix/Nagios/Prometheus"
¡Lotería! Aprendes rápido y te ven como héroe
- Día 1: Pide acceso de solo lectura a:
- Dashboard de Grafana/Prometheus
- Consola de Zabbix o Nagios
- Log centralizado (ELK, Loki, Graylog)
- Día 2-3: Descarga 3-4 alertas reales de los últimos 30 días y reprodúcelas en tu laboratorio local.
- Día 4-5: Crea un dashboard personal "Junior – Aprendiendo" con:
- Uso de CPU por servicio
- Espacio en disco de particiones críticas (/ /var /home)
- MySQL/PostgreSQL slow queries
- HTTP response times
Situación 3 – "No hay monitorización o está rota"
Oportunidad de oro para brillar
Opción rápida (30 minutos) → Netdata
# En cada servidor (con aprobación)
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --stable --disable-telemetry
# O con apt/dnf
sudo apt install netdata -y
sudo systemctl enable --now netdata
# Accede desde: http://IP_SERVIDOR:19999
Opción media (1 semana) → Prometheus + Grafana
# 1. Instala Node Exporter en cada servidor
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
cd node_exporter-*/
sudo cp node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
sudo systemctl enable --now node_exporter
# 2. Instala Prometheus en un servidor central
# 3. Instala Grafana
# 4. Importa dashboard 1860 (Node Exporter Full)
Frase mágica: "He puesto monitorización en tiempo real para ver mejor los problemas antes de que afecten a usuarios". Nadie te dirá que no.
Situación 4 – Te dan 50 servidores CentOS 7 que van a EOL en 6 meses
Planificación estratégica vs. pánico
- Semana 1: Inventario detallado de cada servidor:
#!/bin/bash # inventory_centos.sh echo "=== $(hostname) ===" echo "Kernel: $(uname -r)" echo "IP: $(hostname -I)" echo "Services: $(systemctl list-units --type=service --state=running | wc -l)" echo "Disk usage: $(df -h / | awk 'NR==2 {print $5}')" echo "Packages installed: $(rpm -qa | wc -l)" echo "Last reboot: $(who -b | awk '{print $3, $4}')" - Semana 2: Crea servidor de pruebas idéntico (VM o cloud barata).
- Semana 3: Presenta plan de migración:
Plan de Migración CentOS 7 → AlmaLinux/Rocky 9
==============================================
Fase 0 (YA) → Inventario completo + Netdata en todos
Fase 1 (M1) → 2 servidores no críticos en lab
Fase 2 (M2) → 10 servidores pre-producción
Fase 3 (M3) → Servicios críticos (ventana nocturna)
Fase 4 (M4) → Documentación y runbook por servicio
Rollback plan → Snapshots LVM + backup completo pre-migración
Situación 5 – "Usamos 200 scripts Bash de 2012 escritos por un ex-empleado"
Tranquilo, es normal en empresas con historia
- Día 1: Entiende la magnitud:
# Cuenta scripts con usuario root hardcodeado find / -type f -name "*.sh" -exec grep -l "root" {} \; | wc -l # Encuentra los más ejecutados (cron) grep -r "\.sh" /etc/cron* /var/spool/cron 2>/dev/null | head -20 - Día 2-3: Elige el script que más se ejecuta y añádele logging:
#!/bin/bash
# === ENCABEZADO ESTÁNDAR QUE DEBES AÑADIR ===
set -euo pipefail # Fail on error, undefined vars, pipefail
exec 1>>/var/log/$(basename "$0").log 2>&1 # Log todo
set -x # Debug mode
# === METADATOS ===
SCRIPT_NAME="$(basename "$0")"
START_TIME=$(date +%s)
echo "=== $SCRIPT_NAME started at $(date) ==="
echo "User: $(whoami)"
echo "PID: $$"
# Tu script original aquí...
# === FOOTER ===
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo "=== $SCRIPT_NAME finished at $(date) (${DURATION}s) ==="
- Semana 2: Versiona todo en Git (aunque sea un repo privado local).
- Mes 2: Crea README.md para cada script crítico.
Resultado: En 3 meses nadie podrá vivir sin tu Git documentado.
Situación 6 – Empresa pequeña, tú eres "el de sistemas"
De junior a responsable en 4 semanas
Semana 1 → Backup funcionando YA
# Opción simple: rsnapshot (incremental)
sudo apt install rsnapshot -y
sudo cp /etc/rsnapshot.conf /etc/rsnapshot.conf.backup
# Configuración mínima:
# backup /home/ localhost/
# backup /etc/ localhost/
# backup /var/www/ localhost/
# Prueba inmediata
sudo rsnapshot hourly
Semana 2 → Monitorización básica
# Netdata en todos + Telegram alerts
# En Netdata config:
[health_alarm_notify]
# Telegram bot
TELEGRAM_BOT_TOKEN="your_token"
TELEGRAM_CHAT_ID="your_chat"
Semana 3 → Wiki interna
# BookStack (más fácil) o Wiki.js
# Docker compose para Wiki.js:
version: '3'
services:
wiki:
image: ghcr.io/requarks/wiki:2
ports:
- "3000:3000"
environment:
DB_TYPE: sqlite
DB_FILEPATH: ./data/db.sqlite
Semana 4 → Tu primera automatización
# Automatiza algo que haces a mano cada día
# Ejemplo: limpieza de logs viejos
find /var/log -name "*.log" -mtime +30 -delete
# Cron: 0 2 * * * /usr/local/bin/clean-old-logs.sh
🔧 Kit según tu título formal
👨💻 Junior Linux Admin
# Diagnóstico rápido
htop # Procesos interactivo
journalctl -f # Sigue logs systemd
ss -tulpn # Puertos escuchando
df -h # Espacio disco
systemctl status --all # Todos los servicios
lsof -i :80 # Qué usa puerto 80
dmesg | tail -20 # Errores kernel recientes
🔄 DevOps Trainee
# Contenedores y CI/CD
docker ps -a # Todos los contenedores
kubectl get pods -A # Pods Kubernetes
terraform plan # Cambios previstos
git log --oneline -10 # Últimos 10 commits
jenkins-cli console # Estado Jenkins
ansible-playbook --check # Dry-run Ansible
🛠️ Soporte TI
# Redes y conectividad
tcpdump -nn port 80 # Captura HTTP
nmap -sV 10.0.0.1 # Servicios y versiones
telnet google.com 443 # Test puerto
dig +short google.com # DNS rápido
ping -c 4 8.8.8.8 # Conectividad básica
traceroute google.com # Ruta red
netstat -rn # Tabla rutas
🎯 5 preguntas que harán que te tomen en serio
- "¿Cuál es el procedimiento de cambio (change management)?" → Muestra que respetas procesos.
- "¿Dónde están los backups y cuándo fue la última restauración de prueba?" → Prioriza lo crítico.
- "¿Tenemos staging/QA o todo va directo a producción?" → Entiende el riesgo.
- "¿Quién es el on-call esta semana y cómo le contacto?" → Preparado para emergencias.
- "¿Hay algún sistema crítico que no se pueda reiniciar nunca?" → Conoce los puntos de dolor.
💀 Lo que NUNCA debes hacer (aunque te lo pidan)
- rm -rf / o variantes → Usa
trash-clio mueve a /tmp primero - chmod 777 → Mejor
chmod 755o investiga por qué necesita 777 - kill -9 PID → Primero
kill -15, espera 30s, luego SIGKILL - Actualizar paquetes en prod → Sin probar en staging primero
- Compartir credenciales por chat → Pide acceso individual siempre
- Cambios en viernes después de las 15:00 → Tu fin de semana te lo agradecerá
📅 Timeline realista de tu primer mes
Semana 1: Observar y aprender
Objetivo: Cero cambios. 100% aprendizaje.
- Acceso a sistemas (SSH, dashboards)
- Conocer al equipo y responsabilidades
- Leer documentación existente (si hay)
- Crear inventario personal
Semana 2: Acceso y exploración
Objetivo: Acceso read-only a herramientas.
- Monitorización, logs, tickets
- Laboratorio personal (VMs locales)
- Primer script de diagnóstico
- Mapa mental de dependencias
Semana 3: Primer cambio controlado
Objetivo: Cambio pequeño + documentado.
- Ticket formal con aprobación
- Runbook con pasos exactos
- Plan de rollback definido
- Ventana de mantenimiento
Semana 4: Automatizar y destacar
Objetivo: Tu primer "éxito visible".
- Automatizar tarea repetitiva
- Documentar en wiki interna
- Compartir con equipo
- Pedir feedback constructivo
🔍 Comando que te da el 80% de la información en 5 minutos
#!/bin/bash
# diag.sh - Guarda como ~/bin/diag.sh y ejecuta en cada servidor (con permisos)
# ============================================================================
echo "========================================"
echo "DIAGNÓSTICO RÁPIDO - $(date)"
echo "Hostname: $(hostname -f)"
echo "========================================"
# 1. SISTEMA BÁSICO
echo -e "\n[1] SISTEMA BÁSICO"
echo "Uptime: $(uptime -p)"
echo "Kernel: $(uname -r)"
echo "OS: $(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '\"')"
# 2. RECURSOS
echo -e "\n[2] RECURSOS"
echo "Load average: $(uptime | awk -F'load average:' '{print $2}')"
echo "Memoria libre: $(free -h | awk '/^Mem:/ {print $4 " de " $2}')"
echo "Swap usado: $(free -h | awk '/^Swap:/ {print $3 " de " $2}')"
echo "Disco / uso: $(df -h / | awk 'NR==2 {print $5 " (" $3 "/" $2 ")"}')"
# 3. SERVICIOS CRÍTICOS
echo -e "\n[3] SERVICIOS FALLANDO"
failed=$(systemctl list-units --state=failed --no-legend | wc -l)
if [ "$failed" -gt 0 ]; then
systemctl list-units --state=failed
else
echo "✓ Ningún servicio fallando"
fi
# 4. CONECTIVIDAD
echo -e "\n[4] RED"
echo "IPs: $(hostname -I)"
echo "Gateway: $(ip route | grep default | awk '{print $3}')"
echo "DNS: $(grep nameserver /etc/resolv.conf | head -2 | awk '{print $2}' | tr '\n' ' ')"
# 5. SEGURIDAD
echo -e "\n[5] SEGURIDAD BÁSICA"
echo "Último login root: $(last root | head -1 | awk '{print $4" "$5" "$6" "$7}')"
echo "Usuarios conectados: $(who | wc -l)"
# 6. RECOMENDACIONES
echo -e "\n[6] RECOMENDACIONES INMEDIATAS"
if [ $(df / --output=pcent | tail -1 | tr -d '% ') -gt 80 ]; then
echo "⚠️ Disco / >80% - Considera limpieza"
fi
if [ $(free | awk '/^Mem:/ {print int($3/$2*100)}') -gt 90 ]; then
echo "⚠️ Memoria >90% - Revisa procesos"
fi
echo -e "\n========================================"
echo "Diagnóstico completo - $(date)"
echo "========================================"
Uso: chmod +x ~/bin/diag.sh y luego ./diag.sh > diagnostico_$(hostname).txt
🎁 Bonus: Checklist descargable para tu primer día
Guarda esto en ~/checklist_dia1.txt y márcalo conforme avances:
CHECKLIST - PRIMER DÍA COMO JUNIOR LINUX/DEVOPS
===============================================
[ ] 1. ACCESOS BÁSICOS
[ ] Tengo usuario/contraseña corporativa
[ ] Acceso a correo corporativo
[ ] Acceso a chat interno (Slack/Teams)
[ ] Acceso a gestor de tickets
[ ] 2. ACCESOS TÉCNICOS
[ ] SSH a servidores (usuario limitado)
[ ] Acceso read-only a dashboards
[ ] Acceso a logs centralizados
[ ] VPN corporativa (si aplica)
[ ] 3. PERSONAS CLAVE
[ ] Conozco a mi manager/directo
[ ] Conozco a mi buddy/mentor asignado
[ ] Sé quién es el on-call esta semana
[ ] Tengo teléfono de contacto para emergencias
[ ] 4. PROCESOS
[ ] Entiendo el flujo de cambios (tickets)
[ ] Sé cómo reportar un incidente
[ ] Conozco las ventanas de mantenimiento
[ ] Entiendo el organigrama del equipo
[ ] 5. SISTEMAS CRÍTICOS
[ ] Sé qué sistemas NO se pueden reiniciar
[ ] Conozco el plan de backup/DR
[ ] Sé dónde está la documentación (si existe)
[ ] Identifiqué al menos 2 "puntos de dolor"
[ ] 6. MI ENTORNO
[ ] Portátil/estación funcionando
[ ] IDE/editor configurado
[ ] Claves SSH generadas
[ ] Acceso a repositorios de código
FECHA: _________________
FIRMA: _________________
¿Preparado para tu primer día?
Recuerda: todos los seniors fueron juniors alguna vez. La diferencia está en cómo abordas el aprendizaje y la humildad para preguntar.
¿Te faltó algo en tu primer día? ¿O te tocó una situación peor?
¡Comenta y lo añadimos para ayudar al siguiente junior!
🏆 Reglas de oro que nadie te cuenta el primer día
- Documenta TODO: Si no está documentado, no existe. Tu futuro yo te lo agradecerá.
- El héroe de las 3 AM suele ser el mismo que no documentó ni probó el rollback.
- Pregunta "¿por qué?" antes de "¿cómo lo arreglamos?".
- Todo cambio = ticket + runbook + rollback plan.
- Nunca hagas cambios un viernes después de las 15:00. Tu fin de semana vale más.
- Respeta el horario de tus compañeros. Si es urgente, llama. Si no, espera.
- Aprende a decir "no sé" seguido de "pero averiguo".
🗣️ Frases mágicas que te hacen quedar como senior desde el día 1
- "¿Podemos probarlo primero en staging/QA?"
- "Lo documento en la wiki para que no dependamos de memoria"
- "He puesto Netdata/Grafana, mirad aquí el gráfico del problema"
- "¿Tenéis plan de backup? ¿Lo hemos probado este mes?"
- "Antes de reiniciar, ¿podemos ver los logs de los últimos 5 minutos?"
- "¿Este cambio tiene ticket aprobado y ventana de mantenimiento?"
- "He creado un runbook para esto por si me pasa a mí o a otro"