darwin@linux-mastery: ~/terminal-guide
bash

darwin@linux-mastery:~$

Domina la Terminal Linux

Los 10 comandos que separan a un usuario común de un Ingeniero en Informática profesional.

10Comandos
1Distro
Posibilidades
Explorar Comandos
scroll

Mi Distribución Recomendada

Ubuntu 24.04 LTS Recomendado

Después de años trabajando con servidores en producción, te puedo decir con certeza: Ubuntu LTS es el estándar de la industria.

🛡️

Soporte Largo Plazo

5 años de actualizaciones de seguridad

📚

Documentación Extensa

La comunidad más grande del mundo

🏢

Enterprise Ready

AWS, Azure, Google Cloud por defecto

⚙️

Systemd Nativo

Gestión de servicios estandarizada

bash
# Verificar versión de Ubuntu darwin@server:~$ lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 24.04.1 LTS Release: 24.04 Codename: noble

Los 10 Comandos que Cambiarán tu Vida

No son los más "impresionantes", son los que uso todos los días en producción.

01

ls -la

Navegación

Listar archivos con permisos y archivos ocultos. El primer comando que ejecuto al entrar a cualquier servidor.

💻 Terminal
darwin@server:/var/www$ ls -la
total 32
drwxr-xr-x  4 root root 4096 Jan 15 09:23 .
-rw-r--r--  1 root root  220 Jan 15 09:20 .env
-rw-r--r--  1 root root  12K Jan 15 09:10 index.html
drwxr-xr-x  2 root root 4096 Jan 15 09:15 assets

🔑 Pro Tips:

  • ls -lah → tamaños human-readable (KB, MB, GB)
  • ls -lt → ordenado por fecha de modificación
  • ls -la | grep "^-" → solo archivos (no directorios)
02

cd / pwd

Navegación

Navegación entre directorios y conocer tu ubicación absoluta. Dominar rutas relativas vs absolutas te ahorra horas.

💻 Terminal
darwin@server:/home/darwin/web$ pwd
/home/darwin/web

darwin@server:/home/darwin/web$ cd ../../var/log

darwin@server:/var/log$ pwd
/var/log

darwin@server:/var/log$ cd -
/home/darwin/web

🔑 Pro Tips:

  • cd - → vuelve al directorio anterior (¡mi favorito!)
  • cd ~ → siempre a tu home, desde cualquier lugar
  • pwd -P → ruta física real (resuelve symlinks)
04

grep -r

Búsqueda

Búsqueda de patrones en archivos. Mi herramienta #1 para debuggear logs y encontrar configuraciones en servidores desconocidos.

💻 Terminal
# Buscar "ERROR" en todos los logs
darwin@server:~$ grep -r "ERROR" /var/log/ --include="*.log" -n
/var/log/nginx/error.log:42: [ERROR] upstream timeout
/var/log/app/server.log:127: [ERROR] Database connection failed

# Buscar ignorando mayúsculas/minúsculas
darwin@server:~$ grep -ri "failed" /var/log/ -n | head -5

# Buscar con contexto
darwin@server:~$ grep -C 2 "CRITICAL" /var/log/syslog

🔑 Pro Tips:

  • grep -v "pattern" → invertir (líneas que NO coinciden)
  • grep -E "patrón1|patrón2" → expresiones regulares extendidas
  • zgrep "pattern" archivo.gz → buscar en archivos comprimidos
05

find / locate

Localización

Localización avanzada de archivos por nombre, tamaño, fecha, permisos... Imprescindible cuando heredas un servidor.

💻 Terminal
# Archivos de configuración grandes
darwin@server:~$ find /etc -name "*.conf" -type f -size +10k
/etc/nginx/nginx.conf
/etc/mysql/my.cnf

# Archivos modificados en las últimas 24h
darwin@server:~$ find /var/www -mtime -1 -type f
/var/www/index.html

# locate (más rápido, usa base de datos)
darwin@server:~$ locate nginx.conf
/etc/nginx/nginx.conf

🔑 Pro Tips:

  • find . -empty -type d → directorios vacíos
  • find . -perm 777 → archivos con permisos peligrosos
  • sudo updatedb → actualizar base de datos de locate
06

ps aux / htop

Monitoreo

Monitoreo de procesos. Cuando un servidor se pone lento a las 3 AM, estos comandos son tu primer diagnóstico.

💻 Terminal
# Top 10 procesos por uso de memoria
darwin@server:~$ ps aux --sort=-%mem | head -10
USER       PID %CPU %MEM    VSZ   RSS COMMAND
mysql     1523  5.2 45.3 4.2G  1.8G mysqld
nodejs    2847  2.1 12.1 890M  512M node app.js
nginx     1024  0.5  2.3  120M  48M nginx: worker

# Buscar procesos específicos
darwin@server:~$ ps aux | grep "node" | grep -v grep

# htop (interactivo, más visual)
darwin@server:~$ htop

🔑 Pro Tips:

  • ps -ef | grep "[p]roceso" → truco para excluir el grep mismo
  • kill -9 PID → último recurso para matar procesos zombie
  • watch -n 1 'ps aux --sort=-%cpu | head' → actualización en tiempo real
07

tar / gzip

Compresión

Compresión y empaquetado. Backup de proyectos, transferencia de archivos, despliegue de aplicaciones... Lo uso semanalmente.

💻 Terminal
# Crear backup comprimido con fecha
darwin@server:~$ tar -czvf backup-$(date +%Y%m%d).tar.gz /var/www/
var/www/
var/www/index.html
var/www/css/styles.css

# Extraer un .tar.gz
darwin@server:~$ tar -xzvf backup-20240115.tar.gz -C /restaurar/aqui/

# Ver contenido sin extraer
darwin@server:~$ tar -tzvf backup-20240115.tar.gz | less

🔑 Pro Tips:

  • tar -czvf → c(reate) z(gzip) v(erbose) f(ile)
  • tar -xzvf → e(x)tract z(gzip) v(erbose) f(ile)
  • tar -czvf - directorio/ | ssh server "cat > backup.tar.gz" → backup remoto
09

systemctl

Servicios

Gestión de servicios con systemd. Reiniciar nginx, habilitar MySQL al inicio, ver el estado de Docker... Todo pasa por aquí.

💻 Terminal
# Ver estado de un servicio
darwin@server:~$ systemctl status nginx
● nginx.service - A high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
     Active: active (running) since Mon 2024-01-15 08:00:00 UTC
   Main PID: 1024 (nginx)
     Memory: 12.3M

# Reiniciar un servicio
darwin@server:~$ sudo systemctl restart nginx

# Habilitar al inicio del sistema
darwin@server:~$ sudo systemctl enable mysql

# Listar servicios activos
darwin@server:~$ systemctl list-units --type=service --state=running

🔑 Pro Tips:

  • systemctl is-active nginx → solo devuelve "active" o "inactive"
  • systemctl daemon-reload → recargar configuración systemd
  • systemctl list-dependencies nginx → ver dependencias
10

journalctl / dmesg

Logs

Análisis de logs del sistema. Cuando todo falla y no sabes por qué, journalctl tiene la respuesta.

💻 Terminal
# Logs de nginx en tiempo real
darwin@server:~$ journalctl -u nginx -f --since "1 hour ago"
Jan 15 10:23:45 server nginx[1024]: 192.168.1.50 - GET /api/users 200
Jan 15 10:23:46 server nginx[1024]: 192.168.1.51 - POST /api/login 401

# Logs de boot (último arranque)
darwin@server:~$ journalctl -b

# Errores del kernel
darwin@server:~$ journalctl -p err --since "24 hours ago"

# dmesg: mensajes del kernel
darwin@server:~$ dmesg | grep -i error | tail -20

🔑 Pro Tips:

  • journalctl -f → modo "follow" (como tail -f pero mejor)
  • journalctl --disk-usage → espacio que ocupan los logs
  • journalctl --vacuum-time=7d → limpiar logs mayores a 7 días

Consejos del Experto

🎯

Alias Personalizados

Crea alias en tu ~/.bashrc:

alias ll='ls -la'
alias ..='cd ..'
alias update='sudo apt update && sudo apt upgrade'
📜

Historial Inteligente

Busca en tu historial con Ctrl+R. Presiona repetidamente para ir atrás.

🔗

Pipes y Redirección

Domina |, >, >>. Son la base del scripting:

comando | grep "error" > errores.log 2>&1
🛡️

Tab Completion

Presiona Tab para autocompletar. Doble Tab muestra opciones.

Atajos de Teclado

Ctrl+A inicio, Ctrl+E final, Ctrl+U borra línea, Ctrl+L limpia.

📚

man pages

man comando es tu mejor amigo. También comando --help para resumen rápido.