Chuleta de Linux
Comandos terminal, bash, pipes y one-liners
Navegación
Lista el contenido de un directorio con permisos, tamaño y fecha.
ls -la /var/log
Cambia el directorio actual. Sin argumento va al home.
cd /etc/nginx cd ~ cd - cd ..
Muestra la ruta completa del directorio actual.
pwd
Muestra el árbol de directorios en formato visual.
tree -L 2 ~/projects
Identifica el tipo de un archivo (texto, binario, imagen, script, etc).
file image.png file -i script.sh
Muestra metadatos detallados de un archivo (tamaño, inode, fechas, permisos).
stat file.txt stat -c "%n %s %y" file.txt
Archivos
Crea un archivo vacío o actualiza la fecha de modificación.
touch newfile.txt touch -t 202601011200 file.txt
Crea un directorio. Con -p crea toda la estructura de padres faltantes.
mkdir -p projects/app/src mkdir -m 700 secret
Borra un directorio que esté vacío.
rmdir empty_dir rmdir -p a/b/c
Borra archivos o directorios. Con -rf borra recursivo y sin confirmar (peligroso).
rm file.txt rm -rf node_modules
Copia archivos o directorios.
cp file.txt backup.txt cp -r src/ dest/
Mueve o renombra archivos y directorios.
mv old.txt new.txt mv *.log archive/
Crea enlaces: -s para symlink, sin flag para hard link.
ln -s /usr/local/bin/node ~/node ln file hardlink
Imprime el contenido de uno o más archivos a stdout.
cat file.txt cat -n script.sh
Visualiza archivos página a página con navegación. Buscar con /. +F sigue como tail -f.
less /var/log/syslog less +F app.log
Muestra las primeras N líneas de un archivo (default: 10).
head -n 20 file.txt head -c 1024 binary
Muestra las últimas N líneas. -f sigue el archivo mientras crece.
tail -n 50 access.log tail -f /var/log/syslog
Cuenta líneas (-l), palabras (-w), bytes (-c) o caracteres (-m).
wc -l file.txt wc *.md
Permisos
Cambia los permisos (rwx) de archivos y directorios.
chmod 755 script.sh chmod +x deploy.sh chmod -R 644 docs/
Cambia el dueño y/o grupo de archivos.
chown user file.txt chown -R www-data:www-data /var/www
Ejecuta un comando como otro usuario (root por defecto).
sudo apt update sudo -u postgres psql sudo -i
Cambia a otro usuario. - carga el entorno de ese usuario.
su - postgres su -c 'whoami' root
Crea (useradd) o elimina (userdel) cuentas de usuario.
sudo useradd -m -s /bin/bash john sudo userdel -r john
Establece o cambia la contraseña de un usuario.
passwd sudo passwd john
Muestra el usuario actual (whoami) o todos los usuarios conectados (who).
whoami who who -a
Muestra el UID, GID y grupos del usuario actual.
id id -nG groups
Procesos
Lista procesos. aux muestra todos los procesos con detalle.
ps aux ps -ef
Muestra procesos en tiempo real, ordenados por uso de CPU/memoria.
top top -u www-data top -p 1234
Envía una señal a un proceso por PID. -9 fuerza la terminación (SIGKILL).
kill 1234 kill -9 1234 kill -HUP $(pidof nginx)
Mata procesos por nombre (killall) o patrón (pkill).
killall firefox pkill -9 -f node pkill -u john
Gestiona jobs del shell: jobs lista, fg trae al frente, bg reanuda en background.
jobs fg %1 bg %2 # Ctrl+Z to suspend the foreground job
Ejecuta un comando que sigue corriendo aun después de cerrar el terminal.
nohup ./long-task.sh > out.log 2>&1 & nohup python script.py &
Inicia un proceso con prioridad ajustada (nice) o cambia la prioridad (renice).
nice -n 19 ./heavy.sh renice -n 5 -p 1234
Añadir & al final del comando lo ejecuta en background, liberando el terminal.
./server.sh & long-task & disown %1
Red
Prueba la conectividad enviando paquetes ICMP. -c limita el número.
ping google.com ping -c 4 8.8.8.8
Hace peticiones HTTP/HTTPS y descarga archivos. Soporta GET, POST, headers, autenticación.
curl https://api.github.com
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' url
curl -O https://example.com/file.zipDescarga archivos vía HTTP/FTP. Soporta reanudación con -c y mirror recursivo.
wget https://example.com/file.zip wget -c <url> wget -r -np https://site/docs/
Conecta a un servidor remoto vía Secure Shell. -L crea túneles para puertos locales.
ssh user@host ssh -p 2222 -i ~/.ssh/id_ed25519 user@host ssh -L 8080:localhost:80 user@host
Copia archivos entre máquinas vía SSH.
scp file.txt user@host:/tmp/ scp -r dir/ user@host:/var/www/ scp user@host:/etc/conf .
Sincroniza archivos y directorios eficientemente. -avz es la combinación más usada.
rsync -avz src/ user@host:/dest/ rsync -av --delete --exclude='.git' a/ b/
Muestra puertos a la escucha y conexiones activas. -tulpn es el uso típico.
ss -tulpn ss -t state established
Consulta DNS. dig es más detallado, nslookup más simple, host más conciso.
dig google.com dig +short MX gmail.com nslookup example.com 8.8.8.8
Compresión
Empaqueta y comprime directorios. -czf crea con gzip, -xzf extrae.
tar -czvf archive.tar.gz folder/ tar -xzvf archive.tar.gz tar -tf archive.tar.gz
Compresión zip. unzip -l lista el contenido sin extraer.
zip -r out.zip folder/ unzip archive.zip unzip -l archive.zip
Comprime/descomprime archivos individuales con gzip. -k mantiene el original.
gzip file.txt gzip -d file.txt.gz gzip -k file.txt
Compresión bzip2, más lenta pero con mejor ratio que gzip.
bzip2 file.txt bunzip2 file.txt.bz2
Compresión xz, mejor ratio aún. -T0 usa todos los cores.
xz file.txt unxz file.txt.xz xz -T0 file
Formato 7z, alto ratio de compresión. Soporta password y split de archives.
7z a out.7z folder/ 7z x archive.7z 7z a -p out.7z secret.txt
Búsqueda
Busca archivos por nombre, tipo, tamaño, edad y ejecuta acciones con -exec.
find . -name "*.log" find / -type f -size +100M find . -mtime -7 find . -name "*.tmp" -delete
Busca patrones en archivos. -r recursivo, -i ignora mayúsculas, -E activa regex.
grep -rn "TODO" src/ grep -i error log grep -E "warn|error" file
Procesa texto columna a columna. Lenguaje completo para parsear archivos estructurados.
awk '{print $1}' file.txt
awk -F',' '{print $2}' csv
awk '/error/ {count++} END {print count}' logEdita streams de texto. -i altera el archivo en sitio, más usado para sustituciones.
sed 's/old/new/g' file sed -i 's/old/new/g' file sed -n '10,20p' file
Encuentra binarios y archivos: locate (cache), which (en PATH), whereis (binario, source, manual).
locate nginx.conf which python3 whereis bash
Redirección
Redirige stdout a un archivo, sobrescribiendo el contenido existente.
echo hello > out.txt ls -la > files.txt
Redirige stdout a un archivo añadiendo al contenido existente.
echo "line" >> log.txt date >> events.log
Conecta el stdout de un comando al stdin del siguiente, encadenando procesos.
ls -la | grep .conf cat file | sort | uniq
Redirige stderr (fd 2). 2>&1 junta stderr con stdout. &> hace ambos en bash.
cmd 2> errors.log cmd > out.log 2>&1 cmd &> all.log
Lee de stdin y escribe a archivo Y a stdout. -a añade en lugar de sobrescribir.
ls | tee files.txt echo 'data' | sudo tee /etc/conf make | tee -a build.log
Construye comandos a partir del stdin. Indispensable para combinar find o grep con otros comandos.
find . -name "*.log" | xargs rm
echo "a b c" | xargs -n 1
ls *.txt | xargs -I {} cp {} backup/Entorno
Define variables de entorno que son heredadas por procesos hijos.
export PATH="$PATH:/opt/bin" export API_KEY="abc123" export -p
Lista todas las variables de entorno activas. printenv puede mostrar una específica.
env printenv PATH env VAR=value command
Crea atajos para comandos. Define en ~/.bashrc o ~/.zshrc para que sean permanentes.
alias ll='ls -la' alias gs='git status' unalias ll
Imprime texto o variables a stdout. -e activa escapes como \n y \t.
echo "Hello $USER" echo -e "line1\nline2" echo $PATH
Carga un script en el shell actual (no en un subshell). Útil para .bashrc y venv.
source ~/.bashrc . ~/.zshrc source venv/bin/activate
Muestra el historial de comandos. !! repite el último, !N ejecuta el comando N.
history history | grep ssh !! !42
Paquetes
Gestor de paquetes Debian/Ubuntu. apt es más moderno y amigable que apt-get.
sudo apt update && sudo apt upgrade sudo apt install nginx sudo apt remove --purge package apt search keyword
Gestor de paquetes Red Hat/Fedora/CentOS. dnf es el sucesor moderno de yum.
sudo dnf install nginx sudo yum update dnf search keyword
Gestor de paquetes para macOS y Linux con fórmulas mantenidas por la comunidad.
brew install wget brew update && brew upgrade brew list brew search node
Gestor de paquetes Arch Linux. -Syu actualiza todo, -S instala, -R elimina.
sudo pacman -S nginx sudo pacman -Syu pacman -Ss keyword
Paquetes universales con sandboxing. Se instalan en cualquier distribución moderna.
sudo snap install code flatpak install flathub org.gimp.GIMP snap list
SSH
Genera pares de claves SSH. ed25519 es la recomendación actual (más rápido y seguro que RSA).
ssh-keygen -t ed25519 -C "john.doe@example.com" ssh-keygen -t rsa -b 4096
Copia la clave pública al ~/.ssh/authorized_keys del servidor remoto.
ssh-copy-id user@host ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
El agente SSH guarda claves desencriptadas en memoria para no pedir passphrase en cada conexión.
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l
Cliente SFTP interactivo para transferir archivos vía SSH.
sftp user@host put file.txt get remote.zip ls bye
Archivo de configuración SSH por host. Permite alias, identidad, puerto, jump host.
Host myserver HostName 1.2.3.4 User john Port 2222 IdentityFile ~/.ssh/id_ed25519
Disco
Muestra espacio usado y disponible por sistema de archivos. -h en formato legible.
df -h df -h / df -i
Muestra el espacio ocupado por archivos y directorios. -sh resumen en formato legible.
du -sh * du -h --max-depth=1 du -ah . | sort -rh | head -20
Monta un sistema de archivos en un punto de montaje. umount desmonta.
mount sudo mount /dev/sdb1 /mnt/data sudo umount /mnt/data
Lista discos y particiones en formato árbol (lsblk) o tabla (fdisk).
lsblk lsblk -f sudo fdisk -l
Muestra memoria RAM total, usada, libre y caché. -h en formato legible.
free -h free -m free -h -s 2
Monitorización
Versión mejorada de top con colores, scroll y mata procesos con F9.
htop htop -u www-data htop -p 1234,5678
Estadísticas de memoria virtual, CPU, IO. Útil para diagnosticar bottlenecks.
vmstat vmstat 2 5
Estadísticas de IO de discos. Identifica discos saturados.
iostat iostat -xz 2
Muestra mensajes del kernel. Útil para diagnosticar problemas de hardware o drivers.
sudo dmesg | tail sudo dmesg -T sudo dmesg -w
Controla servicios systemd: arrancar, parar, ver estado, activar al boot.
sudo systemctl start nginx sudo systemctl status sshd sudo systemctl enable docker
Logs de systemd. -f sigue en vivo, -u filtra por servicio, --since por tiempo.
journalctl -u nginx journalctl -f journalctl --since "1 hour ago" journalctl -p err
uptime muestra cuánto lleva el sistema encendido y la load average. w lista usuarios y qué hacen.
uptime w
Avanzado
Repite un comando periódicamente. -d destaca cambios entre ejecuciones.
watch -n 2 "df -h" watch -d "ls -l" watch "ps aux | grep node"
Crea sesiones de terminal persistentes que sobreviven a logouts. Versión clásica.
screen -S work screen -r work screen -ls # Ctrl+A D to detach
Multiplexor de terminal moderno: múltiples ventanas, paneles y sesiones persistentes.
tmux new -s work tmux attach -t work tmux ls # Ctrl+B D to detach
Programador de tareas periódicas. crontab -e edita los jobs del usuario actual.
crontab -e crontab -l 0 3 * * * /script.sh # daily at 3am */15 * * * * /poll.sh # every 15 minutes
Programa un comando para ejecutarse una sola vez en el futuro.
echo "/script.sh" | at now + 1 hour at 14:30 tomorrow atq at -r 5
Referencia
Cada proceso tiene tres streams por defecto identificadas por file descriptors. Entender estas streams es la clave para combinar comandos con pipes y redirecciones.
stdinfd 0Entrada estándar. Por defecto viene del teclado, pero se puede sustituir por un archivo con < o por el stdout de otro comando vía pipe.
stdoutfd 1Salida estándar. Por defecto va al terminal. Se redirige con > (sobrescribir) o >> (añadir).
stderrfd 2Errores y avisos. Es una stream separada para que los errores no se mezclen con la salida normal. Se redirige con 2>.
cmd > out.txt # stdout → file cmd 2> err.txt # stderr → file cmd > out 2>&1 # stdout + stderr → file cmd &> all.txt # bash shorthand cmd < input.txt # stdin ← file cmd1 | cmd2 # stdout cmd1 → stdin cmd2
Cada archivo tiene tres grupos de permisos (usuario, grupo, otros) con tres bits cada uno (read, write, execute). En formato numérico cada grupo es la suma de sus bits.
u— dueño del archivog— grupo del archivoo— todos los demása— todos (u+g+o)
r= 4 — leerw= 2 — escribirx= 1 — ejecutar (o entrar en directorio)
chmod 755 file # rwx r-x r-x (typical script) chmod 644 file # rw- r-- r-- (regular file) chmod 600 file # rw- --- --- (private, e.g. SSH key) chmod 700 dir # rwx --- --- (private dir) chmod +x script.sh # add execute for everyone chmod u+w,g-w file # add write to owner, remove from group chmod -R 755 dir/ # recursive
El shell puede tener varios jobs a la vez. Solo el job en foreground ocupa el terminal; los jobs en background siguen corriendo mientras escribes otros comandos.
Job que está usando el terminal. Recibe input del teclado y muestra output. Bloquea el prompt hasta terminar.
Job corriendo en paralelo, sin ocupar el terminal. Libera el prompt para otros comandos. Se termina con kill o trayéndolo a fg.
./long-task.sh & # start in background Ctrl+Z # suspend the foreground job jobs # list jobs of the current shell fg %1 # bring job 1 to foreground bg %1 # resume job 1 in background disown %1 # detach from shell (survives logout) nohup ./task.sh & # ignore HUP, redirect to nohup.out ps -ef # list all system processes
Combinaciones de comandos frecuentes en el día a día. Cada una resuelve una tarea específica en un único pipeline.
- 01.Encuentra archivos mayores que 100MB en todo el sistema.
find / -type f -size +100M 2>/dev/null - 02.Lista los 10 archivos más grandes en el directorio actual.
du -ah . | sort -rh | head -10 - 03.Busca y reemplaza texto en todos los archivos que lo contienen.
grep -rl 'old' . | xargs sed -i 's/old/new/g' - 04.Cuenta el número total de archivos recursivamente.
find . -type f | wc -l - 05.Muestra todos los usuarios actualmente conectados al sistema.
who - 06.Hace todos los scripts .sh ejecutables recursivamente.
find . -name '*.sh' -exec chmod +x {} + - 07.Repite un comando cada 2 segundos para ver cambios en tiempo real.
watch -n 2 "df -h" - 08.Obtiene la IP pública externa de la máquina actual.
curl -s ifconfig.me - 09.Lista todos los puertos abiertos y los procesos que los usan.
ss -tulpn - 10.Muestra los 10 procesos que más memoria consumen.
ps aux --sort=-%mem | head -10 - 11.Muestra los 10 procesos que más CPU consumen.
ps aux --sort=-%cpu | head -10 - 12.Encuentra symlinks rotos (apuntan a archivos inexistentes).
find . -xtype l - 13.Borra todos los archivos .DS_Store generados por macOS.
find . -name '.DS_Store' -delete - 14.Crea un backup tar.gz con la fecha en el nombre del archivo.
tar czf backup-$(date +%F).tar.gz folder/ - 15.Inicia un servidor HTTP simple en el puerto 8000 para compartir archivos.
python3 -m http.server 8000 - 16.Formatea e imprime JSON de forma legible.
cat data.json | python3 -m json.tool - 17.Sigue un log en tiempo real comenzando por las últimas 100 líneas.
tail -f -n 100 logfile - 18.Encuentra todos los archivos y directorios vacíos.
find . -empty - 19.Cuenta líneas de código sumando todos los archivos .py del proyecto.
find . -name '*.py' | xargs wc -l - 20.Muestra el tamaño de cada subdirectorio ordenado del menor al mayor.
du -h --max-depth=1 | sort -h