Sobreviviendo a la Terminal de Linux
Publicado el 15 de septiembre de 2025
Sobreviviendo a la Terminal de Linux
Como desarrollador, tarde o temprano te encontrarás trabajando en un servidor Linux. Ya sea para desplegar una aplicación, debuguear un problema en producción, o configurar servicios, necesitarás saber cómo navegar y trabajar en la terminal de Linux.
La terminal de Linux puede ser intimidante al principio, pero una vez que dominas los comandos esenciales, se convierte en una de tus herramientas más poderosas.
En esta guía, compartiré los comandos esenciales que todo desarrollador debe conocer para sobrevivir (y prosperar) en la terminal de Linux.
Navegación básica
pwd - ¿Dónde estoy?
pwd
# /home/sebastian/projects
Muestra el directorio actual.
ls - Listar archivos
# Listar archivos
ls
# Listar con detalles
ls -l
# Listar todos (incluyendo ocultos)
ls -la
# Listar con tamaño humano
ls -lh
# Listar ordenado por fecha
ls -lt
# Listar solo directorios
ls -d */
cd - Cambiar de directorio
# Ir a home
cd ~
cd
# Ir a directorio anterior
cd ..
# Ir a directorio padre del padre
cd ../..
# Ir al directorio anterior
cd -
# Ir a ruta absoluta
cd /var/www/html
# Ir a ruta relativa
cd projects/my-app
find - Buscar archivos
# Buscar por nombre
find . -name "*.js"
# Buscar por tipo
find . -type f -name "*.log"
# Buscar directorios
find . -type d -name "node_modules"
# Buscar por tamaño (más de 100MB)
find . -size +100M
# Buscar y ejecutar comando
find . -name "*.tmp" -delete
Manipulación de archivos
cat - Ver contenido
# Ver archivo completo
cat file.txt
# Ver con números de línea
cat -n file.txt
# Ver múltiples archivos
cat file1.txt file2.txt
less / more - Ver archivos grandes
# Ver archivo (navegable)
less large-file.log
# Navegación en less:
# - Espacio: siguiente página
# - b: página anterior
# - /texto: buscar
# - q: salir
head / tail - Ver inicio/fin
# Primeras 10 líneas
head file.txt
# Primeras 20 líneas
head -n 20 file.txt
# Últimas 10 líneas
tail file.txt
# Últimas 20 líneas
tail -n 20 file.txt
# Seguir archivo en tiempo real (útil para logs)
tail -f /var/log/nginx/access.log
cp - Copiar
# Copiar archivo
cp source.txt destination.txt
# Copiar directorio recursivo
cp -r source/ destination/
# Copiar preservando permisos
cp -p file.txt backup/
# Copiar con confirmación
cp -i source.txt destination.txt
mv - Mover/Renombrar
# Mover archivo
mv source.txt /destination/
# Renombrar
mv old-name.txt new-name.txt
# Mover múltiples archivos
mv file1.txt file2.txt destination/
rm - Eliminar
# Eliminar archivo
rm file.txt
# Eliminar directorio
rm -r directory/
# Eliminar forzado (sin confirmación)
rm -rf directory/
# Eliminar con confirmación
rm -i file.txt
# ⚠️ CUIDADO: rm -rf / es destructivo
mkdir - Crear directorios
# Crear directorio
mkdir new-directory
# Crear directorios anidados
mkdir -p parent/child/grandchild
# Crear con permisos
mkdir -m 755 directory
Editores de texto
nano - Editor simple
# Abrir archivo
nano file.txt
# Atajos:
# Ctrl + O: Guardar
# Ctrl + X: Salir
# Ctrl + W: Buscar
# Ctrl + K: Cortar línea
vim - Editor poderoso
# Abrir archivo
vim file.txt
# Modos de vim:
# - Normal (por defecto): navegación
# - Insert: presiona 'i' para escribir
# - Command: presiona ':' para comandos
# Comandos esenciales:
# i: entrar en modo insert
# Esc: salir de modo insert
# :w: guardar
# :q: salir
# :wq: guardar y salir
# :q!: salir sin guardar
# /texto: buscar
# dd: eliminar línea
# yy: copiar línea
# p: pegar
Permisos y usuarios
chmod - Cambiar permisos
# Permisos numéricos
chmod 755 file.txt
# 7 (propietario): rwx (lectura, escritura, ejecución)
# 5 (grupo): r-x (lectura, ejecución)
# 5 (otros): r-x (lectura, ejecución)
# Permisos simbólicos
chmod u+x file.txt # Agregar ejecución al usuario
chmod g-w file.txt # Quitar escritura al grupo
chmod o+r file.txt # Agregar lectura a otros
chmod a+x script.sh # Agregar ejecución a todos
# Recursivo
chmod -R 755 directory/
chown - Cambiar propietario
# Cambiar propietario
chown user file.txt
# Cambiar propietario y grupo
chown user:group file.txt
# Recursivo
chown -R user:group directory/
whoami / id - Información de usuario
# Usuario actual
whoami
# Información detallada
id
# Cambiar a otro usuario
su username
# Cambiar a root
sudo su
Procesos y servicios
ps - Procesos
# Todos los procesos
ps aux
# Procesos del usuario actual
ps
# Procesos en árbol
ps auxf
# Buscar proceso
ps aux | grep nginx
top / htop - Monitor de procesos
# Monitor interactivo
top
# Versión mejorada (si está instalado)
htop
# Atajos en top:
# q: salir
# k: matar proceso
# M: ordenar por memoria
# P: ordenar por CPU
kill - Terminar procesos
# Terminar proceso (PID)
kill 1234
# Forzar terminación
kill -9 1234
# Terminar por nombre
pkill nginx
# Terminar todos los procesos de un usuario
killall -u username
systemctl - Servicios del sistema
# Estado de servicio
systemctl status nginx
# Iniciar servicio
sudo systemctl start nginx
# Detener servicio
sudo systemctl stop nginx
# Reiniciar servicio
sudo systemctl restart nginx
# Recargar configuración
sudo systemctl reload nginx
# Habilitar al inicio
sudo systemctl enable nginx
# Deshabilitar al inicio
sudo systemctl disable nginx
# Listar servicios
systemctl list-units --type=service
Red y conectividad
ping - Probar conectividad
# Ping a servidor
ping google.com
# Ping con límite
ping -c 4 google.com
curl - Transferencia de datos
# GET request
curl https://api.example.com/data
# POST request
curl -X POST https://api.example.com/data \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
# Guardar respuesta
curl -o output.txt https://example.com/file
# Seguir redirects
curl -L https://example.com
# Headers
curl -I https://example.com
# Verbose
curl -v https://example.com
wget - Descargar archivos
# Descargar archivo
wget https://example.com/file.zip
# Descargar recursivo
wget -r https://example.com/
# Continuar descarga interrumpida
wget -c https://example.com/large-file.zip
netstat / ss - Conexiones de red
# Conexiones activas
netstat -tulpn
# Versión moderna
ss -tulpn
# Escuchar en puerto específico
netstat -tulpn | grep :80
# Conexiones establecidas
ss -tn
Logs y debugging
journalctl - Logs del sistema
# Ver logs del sistema
sudo journalctl
# Logs de servicio específico
sudo journalctl -u nginx
# Logs recientes
sudo journalctl -n 50
# Seguir logs en tiempo real
sudo journalctl -f
# Logs desde fecha
sudo journalctl --since "2026-01-27 10:00:00"
# Logs hasta fecha
sudo journalctl --until "2026-01-27 12:00:00"
tail -f - Seguir logs
# Seguir log en tiempo real
tail -f /var/log/nginx/access.log
# Seguir múltiples archivos
tail -f /var/log/nginx/*.log
# Seguir con número de líneas iniciales
tail -n 100 -f /var/log/nginx/access.log
grep - Buscar en archivos
# Buscar texto
grep "error" file.log
# Buscar case-insensitive
grep -i "error" file.log
# Buscar recursivo
grep -r "error" /var/log/
# Mostrar número de línea
grep -n "error" file.log
# Invertir (líneas que NO contienen)
grep -v "error" file.log
# Buscar con contexto
grep -C 5 "error" file.log # 5 líneas antes y después
# Expresiones regulares
grep -E "error|warning" file.log
Archivos y compresión
tar - Archivar
# Crear tar
tar -czf archive.tar.gz directory/
# Extraer tar
tar -xzf archive.tar.gz
# Listar contenido
tar -tzf archive.tar.gz
# Opciones:
# -c: crear
# -x: extraer
# -z: gzip
# -f: archivo
# -v: verbose
zip / unzip - Comprimir
# Comprimir
zip -r archive.zip directory/
# Descomprimir
unzip archive.zip
# Listar contenido
unzip -l archive.zip
Variables de entorno y configuración
env - Variables de entorno
# Ver todas las variables
env
# Ver variable específica
echo $PATH
# Establecer variable
export MY_VAR="value"
# Variable temporal para comando
MY_VAR="value" command
which / whereis - Encontrar comandos
# Ruta del comando
which node
# Ruta y documentación
whereis node
Atajos útiles
Historial
# Ver historial
history
# Buscar en historial
history | grep "command"
# Ejecutar comando del historial
!123 # Ejecuta comando #123
# Último comando
!!
# Último argumento del comando anterior
!$
Alias
# Crear alias
alias ll='ls -lah'
alias ..='cd ..'
alias grep='grep --color=auto'
# Ver alias
alias
# Alias permanente (agregar a ~/.bashrc)
echo "alias ll='ls -lah'" >> ~/.bashrc
source ~/.bashrc
Redirección
# Redirigir salida
command > output.txt
# Agregar a archivo
command >> output.txt
# Redirigir error
command 2> error.txt
# Redirigir todo
command > output.txt 2>&1
# Pipe
command1 | command2
# Ejemplo
ps aux | grep nginx | head -5
Comandos avanzados
awk - Procesamiento de texto
# Imprimir columna
ps aux | awk '{print $2}' # PID
# Filtrar y procesar
awk '/error/ {print $1, $2}' file.log
# Sumar columna
awk '{sum+=$1} END {print sum}' file.txt
sed - Editor de stream
# Reemplazar texto
sed 's/old/new/g' file.txt
# Reemplazar en archivo
sed -i 's/old/new/g' file.txt
# Eliminar líneas
sed '/pattern/d' file.txt
# Imprimir líneas específicas
sed -n '10,20p' file.txt
xargs - Ejecutar con argumentos
# Ejecutar comando para cada línea
find . -name "*.log" | xargs rm
# Con espacios en nombres
find . -name "*.log" -print0 | xargs -0 rm
Scripts útiles para desarrollo
Verificar espacio en disco
# Espacio usado
df -h
# Espacio por directorio
du -sh /var/* | sort -h
# Directorios más grandes
du -h / | sort -rh | head -10
Monitoreo de recursos
# Uso de CPU
top
# Uso de memoria
free -h
# Uso de I/O
iostat
Backup rápido
# Backup de directorio
tar -czf backup-$(date +%Y%m%d).tar.gz /path/to/directory
# Backup de base de datos
mysqldump -u user -p database > backup-$(date +%Y%m%d).sql
Aplicaciones prácticas
Estos comandos son esenciales para:
- Despliegues: Configurar y desplegar aplicaciones en servidores
- Debugging: Analizar logs y diagnosticar problemas
- Monitoreo: Verificar estado de servicios y recursos
- Configuración: Configurar servidores web, bases de datos, y servicios
- Mantenimiento: Backups, actualizaciones, y gestión de archivos
La terminal de Linux puede ser intimidante, pero estos comandos esenciales te darán la confianza para trabajar en cualquier servidor Linux.
Mi perspectiva personal
Dominar la terminal de Linux no es opcional para desarrolladores serios. Estos comandos esenciales te permitirán:
- Navegar y manipular archivos eficientemente
- Debuguear problemas en producción
- Monitorear y gestionar servicios
- Automatizar tareas comunes
He usado estos comandos constantemente en proyectos de todos los tamaños. La terminal de Linux puede ser intimidante al principio, pero una vez que dominas los comandos esenciales, se convierte en una de tus herramientas más poderosas.
No necesitas memorizar todos los comandos de una vez. Empieza con los básicos (navegación, archivos, procesos) y gradualmente agrega más comandos a tu repertorio.
La terminal de Linux es una de las herramientas más poderosas que tienes. Domínala, y serás mucho más productivo como desarrollador.