🐧 Linux — 50 comandos esenciales
El kit de comandos del administrador de sistemas, explicado uno a uno con ejemplos: navegación, procesos, permisos, red y sistemas de archivos.
Linux — 50 comandos esenciales
Estos son los comandos que un ingeniero senior ejecuta todos los días. No los memorices de memoria: entiende qué hace cada uno a nivel de sistema (kernel, procesos, permisos, red). Esta lista es el núcleo; el resto se consulta con man o tldr.
Navegación y archivos
| Comando | Qué hace |
|---|---|
pwd |
Muestra el directorio actual |
ls -la |
Lista archivos con detalles y ocultos |
cd ~ |
Ir al home; cd - vuelve al directorio anterior |
mkdir -p a/b/c |
Crea directorios anidados |
touch f.txt |
Crea un archivo vacío (o actualiza su mtime) |
cp -r src dst |
Copia recursiva |
mv a b |
Mueve/renombra |
rm -rf dir |
Borra recursivamente (⚠️ sin papelera) |
find . -name "*.go" |
Busca archivos por nombre |
locate nginx.conf |
Búsqueda por índice (rápida) |
# Encadenar: listar, filtrar, contar
ls -la /var/log | grep "error" | wc -l
Lectura de archivos
cat archivo.txt # volcado completo
less archivo.log # paginador (q para salir, / para buscar)
head -20 archivo # primeras líneas
tail -f archivo.log # sigue el log en tiempo real (¡imprescindible!)
grep -i "error" log # busca sin distinguir mayúsculas
grep -rn "patron" . # búsqueda recursiva
sed -n '5,10p' f # imprime líneas 5-10
awk '{print $1}' f # imprime la primera columna
cut -d: -f1 /etc/passwd # corta por delimitador
💡 Redirección:
>escribe (sobrescribe),>>añade,2>captura stderr,|encadena.
Procesos y recursos
ps aux # todos los procesos
ps aux | grep nginx # ¿nginx está corriendo?
top # monitor en tiempo real (htop es mejor)
htop # top con esteroides
kill -9 PID # mata a la fuerza (SIGKILL)
kill PID # pide terminar (SIGTERM, elegante)
pgrep -f "python" # encuentra PIDs por patrón
pkill -f "worker.py" # mata por patrón
nice -n 10 comando # baja la prioridad
renice 10 -p PID # cambia prioridad de un proceso en marcha
df -h # espacio en disco
du -sh /var/log # tamaño de un directorio
free -h # memoria (RAM + swap)
Permisos y usuarios
ls -l # los permisos: -rwxr-xr--
chmod 755 archivo # rwx r-x r-x (numérico)
chmod u+x archivo # añade ejecución al dueño
chown usuario:grupo f # cambia dueño y grupo
chgrp grupo f # cambia grupo
sudo -i # shell de root
su - usuario # cambia de usuario
useradd -m nuevo # crea usuario con home
usermod -aG sudo nuevo # añade al grupo sudo
passwd usuario # cambia contraseña
id usuario # muestra uid/gid/grupos
groups usuario # grupos del usuario
💡 Números de permisos:
r=4,w=2,x=1.chmod 755= dueñorwx(7), grupor-x(5), otrosr-x(5). El bitxen un directorio = poder entrar.
Red
ip a # interfaces y direcciones (reemplaza ifconfig)
ip route # tabla de rutas
ss -tulpn # puertos escuchando (reemplaza netstat) — ¡imprescindible!
ping -c 4 google.com # comprueba conectividad
curl -I https://x.com # cabeceras HTTP de un sitio
wget url # descarga
dig dominio.com # consulta DNS
nslookup dominio.com # consulta DNS simple
traceroute dominio.com # ruta hasta el destino
nc -zv host 80 # comprueba si un puerto está abierto (netcat)
nmap -sV host # escaneo de servicios
tcpdump -i eth0 port 80 # captura tráfico
# ¿Qué está escuchando en el puerto 8080?
ss -tulpn | grep 8080
# ¿Funciona mi servidor?
curl -I https://localhost
Sistema y logs
uname -a # versión del kernel
cat /etc/os-release # distribución
uptime # tiempo encendido y carga
dmesg | tail # mensajes del kernel
journalctl -u nginx # logs de systemd del servicio
journalctl -f # logs en tiempo real
systemctl status nginx # estado del servicio
systemctl restart nginx # reinicia un servicio
systemctl enable nginx # arranca con el sistema
systemctl list-units # todos los servicios
crontab -e # tareas programadas del usuario
history | grep ssh # búsqueda en el historial
shutdown -h now # apaga
reboot # reinicia
💡 Convención:
systemctlcontrola servicios bajo systemd (el estándar moderno). Los logs de todos los servicios viven enjournalctl; los logs tradicionales en/var/log/.
Procesamiento de texto (el poder real)
# Top 5 IPs que más peticiones hicieron
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5
# Buscar errores en los últimos 30 min y contarlos
find /var/log -name "*.log" -mmin -30 -exec grep -l error {} \;
# Extraer campos de un CSV
cut -d, -f1,3 datos.csv
# Reemplazar en un archivo (in-place)
sed -i 's/old/new/g' archivo.conf
La receta de diagnóstico (delegada a un script)
# ¿Mi servidor responde?
systemctl status nginx && curl -I localhost
# ¿Hay disco lleno?
df -h
# ¿Hay memoria?
free -h
# ¿Hay procesos zombies?
ps aux | awk '$8 ~ /Z/'
Cheatsheet rápido
| Necesito… | Comando |
|---|---|
| Ver logs en vivo | tail -f / journalctl -f |
| ¿Qué puertos escuchan? | ss -tulpn |
| ¿Quién llenó el disco? | du -sh /* |
| Matar un proceso | pkill -f patron |
| Cambiar permisos | chmod 755 |
| Reiniciar un servicio | systemctl restart X |
| Buscar en logs | grep -i error |
| ¿Hay conexión? | ping / curl -I |
| Programar tarea | crontab -e |
Para profundizar
- The Linux Command Line (Shotts): el libro gratuito completo.
- The Art of Command Line: fluidez avanzada.
- OverTheWire Bandit: practica jugando.
- Ruta completa: Linux y terminal.