Si trabajas como programador, tarde o temprano vas a necesitar moverte con soltura en un servidor Linux. Ya sea para deployar una aplicación, depurar un problema en producción o simplemente gestionar archivos, conocer los comandos fundamentales de Linux te ahorra tiempo y dolores de cabeza. Esta guía cubre las categorías esenciales que todo desarrollador debería dominar.
1. Navegar el sistema de archivos
El primer paso es poder moverte con confianza por el sistema de directorios.
pwd # Muestra el directorio actual
ls # Lista archivos y directorios
ls -la # Lista con detalles y archivos ocultos
cd /ruta/al/directorio # Cambia de directorio
cd .. # Sube un nivel
cd ~ # Va al directorio home
find / -name "archivo" # Busca un archivo en todo el sistema
locate archivo.txt # Búsqueda rápida usando índice
2. Crear, copiar, mover y eliminar archivos
La gestión básica de archivos y directorios es el pan de cada día en Linux.
touch archivo.txt # Crea un archivo vacío
mkdir nueva-carpeta # Crea un directorio
mkdir -p ruta/a/carpeta # Crea directorios anidados
cp origen.txt destino.txt # Copia un archivo
cp -r carpeta/ destino/ # Copia un directorio recursivamente
mv origen.txt destino.txt # Mueve o renombra un archivo
mv carpeta/ /nueva/ruta/ # Mueve un directorio
rm archivo.txt # Elimina un archivo
rm -rf carpeta/ # Elimina directorio y contenido (¡cuidado!)
rmdir carpeta-vacia/ # Elimina un directorio vacío
3. Ver y buscar contenido de archivos
Herramientas como cat, grep y less son indispensables para inspeccionar logs, configuraciones y código.
cat archivo.txt # Muestra el contenido completo
less archivo.txt # Navega el contenido páginado (q para salir)
head -n 20 archivo.txt # Muestra las primeras 20 líneas
tail -n 50 archivo.txt # Muestra las últimas 50 líneas
tail -f app.log # Sigue el archivo en tiempo real (ideal para logs)
grep "error" archivo.log # Busca texto en un archivo
grep -r "función" ./src/ # Búsqueda recursiva en directorios
grep -i "ERROR" archivo.log # Búsqueda sin distinción de mayúsculas
grep -n "texto" archivo.txt # Muestra número de línea
wc -l archivo.txt # Cuenta líneas de un archivo
sort archivo.txt # Ordena líneas
uniq archivo.txt # Elimina líneas duplicadas consecutivas
diff archivo1.txt archivo2.txt # Compara dos archivos
4. Monitorear procesos y recursos del sistema
Cuando una aplicación va lenta o el servidor está saturado, estos comandos son tus mejores aliados.
top # Monitor de procesos en tiempo real
htop # Versión mejorada de top (requiere instalación)
ps aux # Lista todos los procesos activos
ps aux | grep nginx # Filtra procesos por nombre
kill PID # Termina un proceso por ID
kill -9 PID # Fuerza la terminación del proceso
killall nombre-proceso # Termina todos los procesos con ese nombre
pkill nginx # Termina procesos por nombre
free -h # Muestra uso de memoria RAM
df -h # Muestra espacio en disco
du -sh carpeta/ # Muestra tamaño de una carpeta
iostat # Estadísticas de I/O del sistema
uptime # Tiempo de actividad del servidor
5. Gestionar usuarios, permisos y propietarios
La seguridad en Linux se basa en un sistema de permisos robusto. Entenderlo es clave para evitar vulnerabilidades.
# Permisos
chmod 755 script.sh # rwxr-xr-x (propietario: todo, resto: lectura/ejecución)
chmod 644 archivo.txt # rw-r--r-- (propietario: leer/escribir, resto: leer)
chmod +x script.sh # Agrega permiso de ejecución
chmod -R 755 carpeta/ # Aplica permisos recursivamente
# Propietarios
chown usuario archivo.txt # Cambia el propietario
chown usuario:grupo archivo # Cambia propietario y grupo
chown -R usuario:grupo dir/ # Cambio recursivo
# Usuarios
whoami # Muestra el usuario actual
id # Muestra UID, GID y grupos
sudo comando # Ejecuta con privilegios de root
su - usuario # Cambia al usuario indicado
useradd nuevo_usuario # Crea un usuario
passwd usuario # Cambia la contraseña
usermod -aG grupo usuario # Agrega usuario a un grupo
6. Comprimir y descomprimir archivos con tar y gzip
El manejo de archivos comprimidos es cotidiano, especialmente al desplegar aplicaciones o hacer backups.
# tar (Tape Archive)
tar -cvf backup.tar carpeta/ # Crea un archivo tar
tar -xvf backup.tar # Extrae un archivo tar
tar -tvf backup.tar # Lista el contenido sin extraer
# tar + gzip (compresión)
tar -czvf backup.tar.gz carpeta/ # Crea tar comprimido con gzip
tar -xzvf backup.tar.gz # Extrae tar.gz
# tar + bzip2 (mayor compresión)
tar -cjvf backup.tar.bz2 carpeta/ # Crea tar.bz2
tar -xjvf backup.tar.bz2 # Extrae tar.bz2
# gzip / gunzip directamente
gzip archivo.txt # Comprime a archivo.txt.gz
gunzip archivo.txt.gz # Descomprime
zcat archivo.txt.gz # Ver contenido sin descomprimir
# zip / unzip
zip -r archivo.zip carpeta/ # Crea zip
unzip archivo.zip -d destino/ # Extrae zip
7. Transferir archivos entre servidores con scp y rsync
Copiar archivos de forma segura entre máquinas es una tarea frecuente en cualquier flujo de trabajo de desarrollo.
# scp (Secure Copy)
scp archivo.txt usuario@servidor:/ruta/ # Sube archivo al servidor
scp usuario@servidor:/ruta/archivo.txt . # Descarga archivo del servidor
scp -r carpeta/ usuario@servidor:/ruta/ # Copia directorio completo
scp -P 2222 archivo.txt user@server:/ruta # Especifica puerto SSH
# rsync (sincronización eficiente)
rsync -avz carpeta/ usuario@servidor:/ruta/ # Sincroniza local → remoto
rsync -avz usuario@servidor:/ruta/ carpeta/ # Sincroniza remoto → local
rsync -avz --delete carpeta/ usuario@server:/ruta # Elimina archivos que ya no existen
rsync -avz --progress archivo.tar.gz user@server:/ruta # Muestra progreso
# rsync es preferido sobre scp para sincronización porque:
# - Solo transfiere los archivos modificados
# - Puede continuar transferencias interrumpidas
# - Soporta --exclude para ignorar archivos
8. Gestionar paquetes de software
Instalar, actualizar y eliminar software varía según la distribución Linux que uses.
# Debian / Ubuntu (apt)
sudo apt update # Actualiza la lista de paquetes
sudo apt upgrade # Actualiza todos los paquetes
sudo apt install nombre-paquete # Instala un paquete
sudo apt remove nombre-paquete # Elimina un paquete
sudo apt autoremove # Elimina dependencias no usadas
apt search nombre # Busca un paquete
apt show nombre-paquete # Muestra info del paquete
# RHEL / CentOS / Fedora (dnf / yum)
sudo dnf update # Actualiza paquetes
sudo dnf install nombre-paquete # Instala un paquete
sudo dnf remove nombre-paquete # Elimina un paquete
sudo dnf search nombre # Busca paquetes
sudo yum install nombre-paquete # Alternativa más antigua (CentOS 7)
9. Programar tareas y gestionar red
La automatización y la configuración de red son habilidades críticas para cualquier desarrollador backend o DevOps.
# Cron (programación de tareas)
crontab -e # Editar tareas programadas del usuario
crontab -l # Listar tareas actuales
# Formato: minuto hora dia mes diasemana comando
# Ejemplos:
# 0 2 * * * /scripts/backup.sh → Todos los días a las 2:00 AM
# */15 * * * * /scripts/check.sh → Cada 15 minutos
# 0 9 * * 1 /scripts/report.sh → Lunes a las 9:00 AM
# Networking
ip addr show # Muestra interfaces de red y IPs
ip route show # Muestra la tabla de rutas
ping google.com # Verifica conectividad
traceroute google.com # Traza la ruta de paquetes
netstat -tuln # Puertos en escucha
ss -tuln # Alternativa moderna a netstat
curl -I https://ejemplo.com # Muestra cabeceras HTTP
wget https://url/archivo # Descarga un archivo
nslookup dominio.com # Consulta DNS
dig dominio.com # Información DNS detallada
10. Comandos esenciales que todo programador usa a diario
Además de los anteriores, hay un conjunto de comandos que aparecen constantemente en el trabajo cotidiano.
# Variables de entorno
export VAR="valor" # Define una variable de entorno
echo # Imprime su valor
env # Lista todas las variables de entorno
printenv PATH # Muestra una variable específica
# Redirección y pipes
comando > archivo.txt # Redirige salida a un archivo (sobreescribe)
comando >> archivo.txt # Agrega salida al archivo
comando 2> errores.log # Redirige errores
comando1 | comando2 # Pasa la salida de uno como entrada del otro
ls -la | grep ".txt" # Ejemplo: filtrar listado
# Historial y shortcuts
history # Lista comandos anteriores
!! # Repite el último comando
!200 # Ejecuta el comando #200 del historial
Ctrl + R # Búsqueda en el historial
Ctrl + C # Cancela el comando actual
Ctrl + Z # Suspende el proceso (retomar con fg/bg)
# Texto y manipulación
echo "Hola Mundo" # Imprime texto
sed 's/viejo/nuevo/g' arch # Reemplaza texto en un archivo
awk '{print }' archivo # Procesa columnas de texto
cut -d',' -f1 archivo.csv # Extrae columnas de CSV
tr 'a-z' 'A-Z' < archivo # Transforma texto (minúsculas a mayúsculas)
# SSH
ssh usuario@servidor # Conecta por SSH
ssh -p 2222 user@servidor # Especifica puerto
ssh-keygen -t rsa # Genera par de claves SSH
ssh-copy-id user@servidor # Copia clave pública al servidor
Conclusión
Dominar estos comandos Linux no ocurre de un día para otro, pero con práctica constante se vuelven parte de tu flujo natural de trabajo. La clave está en no memorizar todos de golpe, sino ir incorporándolos a medida que los necesitas. Una buena estrategia es tener esta referencia a mano y revisitarla cada vez que enfrentes una tarea nueva en el terminal.
¿Cuáles son los comandos que más usas en tu día a día? Dejá tu comentario abajo.