Servidor y SSH para principiantes
Esta ruta es distinta a HTML, CSS o JavaScript: no vas a escribir código, vas a aprender a moverte por el sitio donde ese código vive de verdad. Empieza aquí si nunca has usado una terminal.
Lección 1 — Qué es un servidor y cómo conectarte por SSH
Un servidor es, por dentro, un ordenador como el tuyo: tiene disco, memoria y un sistema operativo. La diferencia es que está encendido las 24 horas en un centro de datos, no tiene pantalla ni ratón conectados, y tú no estás delante — te conectas a él a través de internet cuando necesitas hacer algo ahí.
Para hablar con un servidor no usas clics: usas una terminal, una ventana de texto donde escribes órdenes (comandos) y el sistema te responde también en texto. Da respeto al principio, pero es solo una conversación con reglas fijas — nada que no puedas aprender.
SSH (Secure Shell) es el protocolo que usas para abrir una terminal en un ordenador que no es el tuyo, de forma cifrada. Es como llamar por un teléfono en el que nadie puede escuchar la conversación, en vez de gritar la contraseña en mitad de la calle. Cuando "te conectas por SSH a un servidor", lo que haces es abrir una terminal remota: escribes ahí y el servidor ejecuta lo que le pides, como si estuvieras sentado delante de él.
ssh usuario@direccion-del-servidor
La primera vez que te conectas a un servidor nuevo, la terminal te va a preguntar si confías en su "huella" (fingerprint) — es una comprobación de seguridad normal, se acepta escribiendo yes. Después te pedirá una contraseña o usará una clave guardada en tu ordenador, y en cuanto entre verás cambiar el texto de la terminal: eso significa que ya estás dentro, con una sesión abierta en el servidor.
Una vez dentro, estos cuatro comandos son totalmente seguros — no pueden romper nada, solo te informan de dónde estás:
pwd— te dice en qué carpeta estás ahora mismo.whoami— te dice con qué usuario has entrado.ls— lista lo que hay dentro de la carpeta actual.exit— cierra la sesión y te devuelve a tu propio ordenador.
pwd
whoami
ls
exit
Lección 2 — Moverte por el sistema de archivos
Un servidor Linux organiza sus archivos igual que el tuyo: carpetas dentro de carpetas. La diferencia es que aquí no hay iconos ni doble clic — te mueves escribiendo la ruta de donde quieres ir. Hay dos formas de escribir una ruta:
- Ruta absoluta — empieza siempre desde la raíz del sistema, con
/: por ejemplo/var/www/httpsdocs. Funciona igual sin importar en qué carpeta estés ahora. - Ruta relativa — parte de donde estás ahora mismo: por ejemplo
css/estilos.csssi esa carpeta está dentro de la actual. Más corta, pero depende de dónde te encuentres.
Para moverte y mirar dentro de las carpetas, estos comandos son tan seguros como los de la lección 1 — solo consultan o cambian dónde estás, no tocan ningún archivo:
cd nombre-carpeta— entra en esa carpeta (change directory).cd ..— sube un nivel, a la carpeta que contiene la actual.cd(sin nada detrás) — te lleva directo a tu carpeta personal, sea cual sea tu ubicación.ls -la— comolsde la lección 1, pero mostrando también archivos ocultos (los que empiezan por.) y detalles como el tamaño y los permisos.
pwd
# /home/eugeni
cd /var/www/httpsdocs
pwd
# /var/www/httpsdocs
ls -la
cd ..
pwd
# /var/www
cd
Dos atajos que vas a usar constantemente: el punto . significa "la carpeta actual" y los dos puntos .. significan "la carpeta de arriba". Se combinan con otros comandos, no solo con cd — por ejemplo, para copiar un archivo a la carpeta donde estás ahora mismo se usa . como destino.
cp /var/www/httpsdocs/index.html .
# copia index.html a la carpeta donde estás ahora
cd a dos o tres carpetas seguidas comprobando con pwd dónde estás en cada paso, luego vuelve atrás con cd .. las veces que haga falta hasta llegar de nuevo a tu carpeta personal. Es la mejor forma de perder el miedo a "perderte" dentro del servidor.
Lección 3 — Ver, editar y dar permisos a archivos
En las lecciones 1 y 2 solo mirabas dónde estabas. Ahora tocan los primeros comandos que sí interactúan con archivos — siguen siendo seguros si los usas como se explica aquí, pero ya conviene ir con algo más de atención.
Para ver el contenido de un archivo de texto sin abrir ningún editor, dos comandos de solo lectura:
cat nombre-archivo— vuelca todo el archivo en pantalla de golpe. Bien para archivos cortos.less nombre-archivo— lo abre página a página, con las flechas para moverte. Sales con la teclaq. Mejor para archivos largos, como los logs.
cat index.html
less error.log
# flechas para moverte, "q" para salir
Para editar un archivo directamente en el servidor (sin FTP ni VS Code de por medio), el editor más sencillo para empezar es nano — no el más potente, pero el que menos sorpresas da a quien nunca ha usado un editor de terminal.
nano index.html
Dentro de nano, los atajos van con Ctrl y se muestran abajo del todo en pantalla. Los dos que necesitas para empezar:
Ctrl+O— guarda el archivo (Write Out); pulsaEnterpara confirmar el nombre.Ctrl+X— sale de nano. Si hay cambios sin guardar, te pregunta antes de cerrar.
Cada archivo en un servidor Linux tiene también unos permisos: quién puede leerlo, escribirlo o ejecutarlo. Se ven al final de cada línea con ls -la (la de la lección 2), como una cadena de diez caracteres:
-rw-r--r-- 1 egv egv 1240 ago 17 10:02 index.html
Ese bloque -rw-r--r-- se lee en tres grupos de tres: propietario, grupo y "todos los demás", cada uno con read, write y execute (un guion significa que ese permiso no está). Para cambiarlos se usa chmod, casi siempre con un número de tres cifras — cada cifra suma 4 (leer) + 2 (escribir) + 1 (ejecutar):
chmod 644 index.html
# 6 = rw- (propietario puede leer y escribir)
# 4 = r-- (grupo solo puede leer)
# 4 = r-- (resto solo puede leer)
chmod 755 script.sh
# el propietario además puede ejecutarlo
nano prueba.txt, escribe una línea, guarda con Ctrl + O y sal con Ctrl + X. Luego haz ls -la para ver sus permisos por defecto, y compáralos con los de otro archivo de la misma carpeta.
Lección 4 — Procesos, logs y servicios en marcha
Un servidor no solo guarda archivos: tiene programas en ejecución ahora mismo — el servidor web, la base de datos, tu propia sesión SSH. Cada uno de esos programas en marcha es un proceso. Para ver todos los que hay activos, se usa ps aux:
ps aux
# USER PID %CPU %MEM COMMAND
# www 412 0.3 1.2 nginx
# mysql 588 1.1 4.5 mariadbd
# egv 901 0.0 0.1 -bash
La columna PID (process ID) es el número que identifica a cada proceso — lo necesitarás más adelante si algún día tienes que actuar sobre uno en concreto. Como esa lista suele ser larga, se combina con grep, un comando que filtra un listado y deja solo las líneas que contienen lo que le pidas:
ps aux | grep nginx
# el símbolo | ("pipe") pasa el resultado de un comando
# como entrada del siguiente — aquí, filtra ps aux por "nginx"
Para ver esa misma información pero en vivo, actualizándose sola, se usa top — muestra los procesos que más CPU o memoria están usando en cada momento, ordenados de mayor a menor. Se sale con la tecla q, igual que con less en la lección 3.
top
# se actualiza solo cada pocos segundos
# "q" para salir
Cuando algo no funciona como esperas, la primera pregunta suele ser "¿qué ha pasado?" — y la respuesta casi siempre está en un log, un archivo de texto donde un programa va apuntando lo que hace. Ya sabes leerlos con cat y less (lección 3), pero para vigilar un log mientras se van añadiendo líneas nuevas en tiempo real, se usa tail -f (follow):
tail -f /var/log/nginx/error.log
# se queda "enganchado" mostrando cada línea nueva
# Ctrl + C para salir (no "q" esta vez)
Es el comando que se usa para, por ejemplo, recargar una página en el navegador y ver al momento en la terminal si el servidor ha registrado algún error. Por último, para saber si un servicio concreto (el servidor web, la base de datos...) está activo o caído, systemctl status — de solo lectura si no le añades nada más:
systemctl status nginx
# ● nginx.service - A high performance web server
# Active: active (running) since...
systemctl también permite start, stop y restart para arrancar o parar un servicio, pero eso puede tumbar una web o una base de datos en producción si no sabes exactamente qué haces y quién depende de ese servicio ahora mismo. Queda para una lección futura, con más contexto.
ps aux | grep nginx (o el nombre del servicio que sepas que corre ahí) y luego systemctl status sobre ese mismo servicio. Compara la información de los dos comandos — verás que se complementan.