DevOps 10 min de lectura

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.

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.