🐧 Comandos Básicos de Servidor Linux: Tu Guía de Supervivencia SSH
¿Acabas de montar tu primer servidor y te encuentras delante de una pantalla negra que solo muestra texto? ¡Tranquilo! No hace falta ser un hacker de película para manejar un servidor Linux. Con estos comandos básicos podrás navegar, editar archivos, gestionar procesos y no morir en el intento.
Esta guía está pensada para gente que nunca ha tocado la terminal y quiere aprender lo esencial sin dramas técnicos. Vamos allá.
🔑 SSH: Tu puerta de entrada al servidor
SSH (Secure Shell) es el protocolo que te permite conectarte de forma segura a tu servidor desde cualquier sitio. Todo el tráfico va encriptado, así que nadie puede espiar lo que haces.
Conectarte por primera vez
Desde tu ordenador (Linux, Mac, o Windows 10+), abre la terminal y ejecuta:
ssh usuario@IP_DEL_SERVIDOR
Ejemplo real:
ssh pi@192.168.1.100
Te pedirá la contraseña del usuario. Escríbela (no se verá en pantalla, es normal) y pulsa Enter. Si es la primera vez, te preguntará si confías en el servidor. Escribe yes y Enter.
🎉 ¡Ya estás dentro! Verás algo como:
pi@raspberrypi:~ $
Conectar con puerto personalizado
Si cambiaste el puerto SSH del 22 predeterminado al 2222 (buena práctica para seguridad):
ssh -p 2222 usuario@IP_DEL_SERVIDOR
Salir de la sesión SSH
exit
O pulsa Ctrl + D.
📂 Navegación: Moverse entre directorios
pwd – ¿Dónde estoy?
Muestra la ruta completa del directorio actual:
pwd
Salida ejemplo:
/home/usuario
ls – Listar archivos y carpetas
Ver qué hay en el directorio actual:
ls
Opciones útiles:
ls -l # Formato lista (permisos, tamaño, fecha)
ls -lh # Tamaños en formato humano (KB, MB, GB)
ls -la # Mostrar archivos ocultos (empiezan con .)
ls -lt # Ordenar por fecha de modificación (más reciente primero)
Ejemplo salida de ls -lh:
drwxr-xr-x 2 usuario usuario 4.0K Nov 1 10:30 Documentos
-rw-r--r-- 1 usuario usuario 1.2M Oct 28 15:45 video.mp4
-rwxr-xr-x 1 usuario usuario 512 Oct 25 09:10 script.sh
La primera letra indica el tipo: d = directorio, - = archivo.
cd – Cambiar de directorio
Moverte a otra carpeta:
cd /var/www/html # Ruta absoluta
cd Documentos # Ruta relativa (desde donde estés)
cd .. # Subir un nivel (carpeta padre)
cd ~ # Ir a tu home (/home/usuario)
cd - # Volver al directorio anterior
Truco: Usa Tab para autocompletar nombres de carpetas. Si escribes cd Doc y pulsas Tab, completará Documentos si existe.
📄 Ver y editar archivos
cat – Mostrar contenido de un archivo
cat archivo.txt
Muestra todo el contenido de golpe. Útil para archivos pequeños.
less – Ver archivos largos con scroll
less archivo.log
Te permite navegar con flechas, AvPág/RePág. Salir: Pulsa q.
head / tail – Ver principio o final
head -n 20 archivo.txt # Primeras 20 líneas
tail -n 50 error.log # Últimas 50 líneas
tail -f /var/log/syslog # Ver logs en tiempo real (seguir creciendo)
tail -f es imprescindible para monitorizar logs de servicios. Salir: Ctrl + C.
nano – Editor de texto simple
El editor más fácil para novatos:
nano archivo.txt
Edita el texto con el teclado. Comandos:
Ctrl + O: Guardar (luego Enter para confirmar)Ctrl + X: SalirCtrl + K: Cortar líneaCtrl + U: Pegar
vim – Editor avanzado (opcional)
Más potente pero con curva de aprendizaje. Si te atreves:
vim archivo.txt
Básico de vim:
- Pulsa
ipara entrar en modo INSERT (editar) - Escribe tu texto
- Pulsa
Escpara salir del modo INSERT - Escribe
:wqy Enter para guardar y salir - Escribe
:q!y Enter para salir sin guardar
🗂️ Gestión de archivos y carpetas
mkdir – Crear carpetas
mkdir mi_carpeta
mkdir -p /ruta/completa/nueva # Crear carpetas anidadas de golpe
touch – Crear archivos vacíos
touch nuevo_archivo.txt
cp – Copiar archivos o carpetas
cp archivo.txt copia.txt
cp -r carpeta/ copia_carpeta/ # -r para copiar carpetas con todo su contenido
mv – Mover o renombrar
mv archivo.txt /ruta/destino/
mv nombre_viejo.txt nombre_nuevo.txt # Renombrar
rm – Borrar archivos o carpetas
⚠️ CUIDADO: No hay papelera de reciclaje. Lo borrado es irrecuperable.
rm archivo.txt
rm -r carpeta/ # Borrar carpeta con su contenido
rm -rf carpeta/ # Forzar borrado sin preguntar (¡peligroso!)
rm -i archivo.txt # Pedir confirmación antes de borrar
Nunca ejecutes rm -rf / o rm -rf /* (borra TODO el sistema).
🔍 Buscar archivos y contenido
find – Buscar archivos por nombre
find /ruta -name "archivo.txt"
find ~ -name "*.log" # Todos los .log en tu home
find /var/www -type d -name "images" # Buscar carpetas llamadas "images"
grep – Buscar texto dentro de archivos
grep "error" archivo.log
grep -i "warning" *.log # -i ignora mayúsculas/minúsculas
grep -r "TODO" /proyecto # -r busca recursivamente en carpetas
grep -n "función" script.py # -n muestra número de línea
Combinar grep con otros comandos:
cat error.log | grep "CRITICAL"
ps aux | grep "nginx"
🔐 Permisos de archivos
En Linux, cada archivo tiene permisos para 3 grupos: propietario (u), grupo (g), y otros (o).
Leer permisos con ls -l
-rwxr-xr-- 1 usuario grupo 2048 Nov 1 10:00 script.sh
Desglose:
-: Tipo (- = archivo, d = directorio)rwx: Propietario puede Read, Write, eXecuter-x: Grupo puede Read y eXecute (no Write)r--: Otros solo Read
chmod – Cambiar permisos
Método numérico (más usado):
r= 4 (read)w= 2 (write)x= 1 (execute)
Suma los valores:
chmod 755 script.sh
# 7 (4+2+1) = rwx para propietario
# 5 (4+1) = r-x para grupo
# 5 (4+1) = r-x para otros
Ejemplos comunes:
chmod 644 archivo.txt # rw-r--r-- (archivo normal)
chmod 755 script.sh # rwxr-xr-x (script ejecutable)
chmod 700 secreto.key # rwx------ (solo propietario accede)
chmod +x script.sh # Añadir permiso de ejecución (método simbólico)
Método simbólico:
chmod u+x script.sh # Añadir eXecute al User (propietario)
chmod g-w archivo.txt # Quitar Write al Grupo
chmod o=r archivo.txt # Establecer permisos de Others solo a Read
chmod a+r archivo.txt # Añadir Read a All (u+g+o)
chown – Cambiar propietario
sudo chown usuario archivo.txt
sudo chown usuario:grupo archivo.txt
sudo chown -R www-data:www-data /var/www/html # -R recursivo para todo el contenido
Ejemplo típico: Dar permisos al servidor web Apache/Nginx
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
📊 Información del sistema
df – Espacio en disco
df -h # Espacio usado/libre en particiones (-h = formato humano)
Salida ejemplo:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 35G 13G 73% /
/dev/sdb1 500G 120G 380G 24% /datos
du – Tamaño de carpetas
du -sh carpeta/ # Tamaño total de carpeta
du -h --max-depth=1 . # Tamaño de cada subcarpeta (1 nivel)
free – Memoria RAM
free -h
Muestra RAM total, usada, libre y swap.
top – Monitor de procesos en tiempo real
top
Muestra procesos ordenados por uso de CPU/RAM. Salir: q.
Alternativa moderna: htop (más visual, requiere instalación con sudo apt install htop)
uname – Info del sistema
uname -a # Kernel, arquitectura, hostname
⚙️ Gestión de procesos
ps – Ver procesos en ejecución
ps aux # Todos los procesos con detalles
ps aux | grep nginx # Filtrar procesos de nginx
kill – Detener un proceso
Primero obtén el PID (Process ID) con ps o top:
kill 1234 # Detener proceso con PID 1234
kill -9 1234 # Forzar cierre (SIGKILL)
systemctl – Gestionar servicios
En sistemas con systemd (Ubuntu 16.04+, Debian 8+, etc.):
sudo systemctl status nginx # Ver estado del servicio
sudo systemctl start nginx # Iniciar
sudo systemctl stop nginx # Detener
sudo systemctl restart nginx # Reiniciar
sudo systemctl enable nginx # Activar al arrancar el sistema
sudo systemctl disable nginx # Desactivar al arrancar
📦 Gestión de paquetes (apt)
En Debian/Ubuntu/Raspberry Pi OS:
Actualizar lista de paquetes
sudo apt update
Actualizar paquetes instalados
sudo apt upgrade
Instalar un paquete
sudo apt install nginx
Desinstalar un paquete
sudo apt remove nginx
sudo apt purge nginx # También borra archivos de configuración
Buscar paquetes
apt search nombre_paquete
Limpiar caché de paquetes descargados
sudo apt clean
sudo apt autoremove # Borrar dependencias huérfanas
🌐 Red y conectividad
ping – Comprobar conectividad
ping google.com
ping 192.168.1.1 # Ping al router
ping -c 5 8.8.8.8 # Solo 5 intentos (-c = count)
Salir: Ctrl + C.
ip – Ver interfaces de red
ip a # Mostrar todas las interfaces y sus IPs
ip route # Ver tabla de rutas (gateway)
curl – Descargar archivos o hacer peticiones HTTP
curl https://ejemplo.com # Ver contenido HTML
curl -O https://ejemplo.com/archivo.zip # Descargar archivo
curl -I https://ejemplo.com # Solo ver headers HTTP
wget – Descargar archivos
wget https://ejemplo.com/archivo.zip
wget -c URL # Continuar descarga interrumpida
🔄 Transferir archivos (SCP / SFTP)
scp – Copiar archivos vía SSH
Desde tu PC al servidor:
scp archivo.txt usuario@IP_SERVIDOR:/ruta/destino/
Desde el servidor a tu PC:
scp usuario@IP_SERVIDOR:/ruta/archivo.txt ./
Copiar carpetas completas:
scp -r carpeta/ usuario@IP_SERVIDOR:/ruta/destino/
rsync – Sincronización avanzada
Más eficiente que scp (solo copia diferencias):
rsync -avz carpeta/ usuario@IP_SERVIDOR:/backup/
# -a = archive mode (permisos, timestamps)
# -v = verbose
# -z = compresión
🛡️ Seguridad básica
sudo – Ejecutar comandos como administrador
Comandos que afectan al sistema requieren sudo:
sudo apt install paquete
sudo nano /etc/nginx/nginx.conf
Te pedirá tu contraseña la primera vez en la sesión.
passwd – Cambiar contraseña
passwd # Cambiar tu propia contraseña
sudo passwd root # Cambiar la contraseña de root
ufw – Firewall simple
sudo ufw status # Ver estado
sudo ufw enable # Activar firewall
sudo ufw allow 22/tcp # Permitir SSH
sudo ufw allow 80/tcp # Permitir HTTP
sudo ufw allow 443/tcp # Permitir HTTPS
sudo ufw deny 8080/tcp # Bloquear puerto
sudo ufw delete allow 80/tcp # Borrar regla
⚠️ No bloquees el puerto 22 (SSH) si estás conectado remotamente o te quedarás fuera.
📊 Tabla resumen comandos esenciales
| Categoría | Comando | Descripción |
|---|---|---|
| Conexión | ssh user@IP |
Conectar al servidor |
| Navegación | pwd |
Directorio actual |
ls -lh |
Listar archivos con detalles | |
cd carpeta |
Cambiar directorio | |
| Archivos | cat archivo |
Ver contenido |
nano archivo |
Editar archivo | |
cp origen destino |
Copiar | |
mv origen destino |
Mover/renombrar | |
rm archivo |
Borrar | |
| Permisos | chmod 755 archivo |
Cambiar permisos |
chown user:group archivo |
Cambiar propietario | |
| Sistema | df -h |
Espacio en disco |
free -h |
Memoria RAM | |
top |
Monitor procesos | |
| Servicios | systemctl status nginx |
Estado servicio |
systemctl restart nginx |
Reiniciar servicio | |
| Paquetes | apt update |
Actualizar lista |
apt install paquete |
Instalar paquete | |
| Red | ping IP |
Comprobar conectividad |
curl URL |
Petición HTTP | |
| Transferir | scp archivo user@IP:/ruta |
Copiar por SSH |
❓ FAQs sobre comandos Linux
¿Qué diferencia hay entre SSH y Telnet?
SSH encripta toda la comunicación (contraseñas, comandos, datos), mientras que Telnet envía todo en texto plano. Nunca uses Telnet para conectarte a servidores, es completamente inseguro. SSH es el estándar desde hace décadas.
¿Puedo recuperar archivos borrados con rm?
No hay papelera de reciclaje en la terminal. Una vez ejecutas rm, el archivo se borra del sistema de archivos. Recuperarlo requiere herramientas forenses complejas (extundelete, photorec) y no siempre funciona. Prevención: Haz backups regulares o usa rm -i para pedir confirmación antes de borrar.
¿Cómo sé si un comando necesita sudo?
Si intentas ejecutar un comando y recibes Permission denied o Operation not permitted, prueba de nuevo con sudo delante. Comandos que modifican archivos del sistema (en /etc, /var, /usr) o gestionan servicios requieren sudo.
¿Puedo usar SSH desde Windows?
Sí. Windows 10+ incluye un cliente SSH nativo en PowerShell/CMD. Ejecuta ssh user@IP igual que en Linux/Mac. Alternativas: PuTTY (cliente gráfico clásico), Windows Terminal (moderna y recomendada), o MobaXterm (completa con SFTP integrado).
¿Qué permisos debo poner a los scripts?
Para que un script sea ejecutable: chmod +x script.sh (equivale a 755). Si solo tú debes ejecutarlo: chmod 700 script.sh. Para archivos de configuración sensibles (claves privadas SSH): chmod 600 archivo.key (solo propietario lee/escribe, nadie más accede).
¿Cómo veo qué proceso está usando un puerto?
sudo lsof -i :80 # Ver qué usa el puerto 80
sudo netstat -tulpn | grep :3000 # Alternativa con netstat
Útil cuando intentas iniciar un servicio y dice que el puerto ya está ocupado.
¿Puedo ejecutar comandos sin esperar a que terminen?
Sí, añade & al final del comando para ejecutarlo en segundo plano:
./script_largo.sh &
O usa nohup si quieres que siga corriendo aunque cierres la sesión SSH:
nohup ./script_largo.sh &
Ver procesos en background: jobs. Traer al frente: fg.
¿Cómo busco un archivo cuando no recuerdo dónde está?
sudo find / -name "nombre_archivo" 2>/dev/null
El 2>/dev/null oculta errores de permisos denegados. Si buscas por contenido, usa grep:
grep -r "texto_buscado" /ruta/inicial
¿Qué es la diferencia entre apt y apt-get?
apt es la versión moderna (desde Ubuntu 16.04 / Debian 8) con mejor UX (barra de progreso, colores). apt-get es la herramienta clásica, sigue funcionando perfectamente. Para uso diario, usa apt. Para scripts automatizados, usa apt-get (sintaxis más estable).
¿Cómo redirijo la salida de un comando a un archivo?
comando > archivo.txt # Sobrescribe el archivo
comando >> archivo.txt # Añade al final del archivo (append)
comando 2>&1 | tee log.txt # Mostrar en pantalla Y guardar en archivo
Ejemplo: Guardar logs de instalación:
sudo apt install nginx 2>&1 | tee instalacion_nginx.log
¿Cómo me conecto con clave SSH en lugar de contraseña?
Genera un par de claves en tu PC:
ssh-keygen -t ed25519 -C "tu_email@ejemplo.com"
Copia la clave pública al servidor:
ssh-copy-id usuario@IP_SERVIDOR
A partir de ahora, SSH no pedirá contraseña. Más seguro y cómodo. Protege tu clave privada (~/.ssh/id_ed25519) con una passphrase.
¿Puedo cancelar un comando que está tardando mucho?
Sí, pulsa Ctrl + C para interrumpir el comando actual. Si un proceso se ha bloqueado y no responde a Ctrl+C, pulsa Ctrl + Z para pausarlo, luego mátalo con kill -9 %1 (si era el job 1).
¿Cómo automatizo comandos para que se ejecuten periódicamente?
Usa cron. Edita tu crontab:
crontab -e
Añade líneas con el formato minuto hora día mes día_semana comando:
0 2 * * * /home/usuario/backup.sh # Ejecutar backup.sh cada día a las 2:00 AM
*/15 * * * * /usr/bin/check_service.sh # Cada 15 minutos
🎸 Resumen punk
Con estos comandos básicos puedes sobrevivir (y prosperar) en cualquier servidor Linux. No necesitas memorizarlos todos de golpe: usa esta guía como referencia y, con la práctica, los más comunes se quedarán en tu memoria muscular.
La terminal puede parecer intimidante al principio, pero es increíblemente potente. Un par de comandos bien ejecutados pueden hacer el trabajo de horas de clics en interfaces gráficas.
Consejo final: Experimenta en una máquina virtual o servidor de pruebas antes de ejecutar comandos destructivos (rm -rf, chmod -R, etc.) en producción. Y recuerda: los backups salvan vidas.
¡A trastear en la terminal! 🚀🐧
