Administrar un servidor Linux se reduce, en la mayor parte del tiempo, a una treintena de comandos: moverse por el sistema de archivos, revisar permisos, encontrar qué ocupa el disco, ver qué proceso consume CPU, reiniciar un servicio y leer sus logs. Esta guía reúne esos comandos agrupados por tarea, con las opciones que realmente se usan y ejemplos que puedes ejecutar en tu servidor. Los ejemplos se han escrito para Ubuntu 24.04, pero funcionan igual en Debian y en Rocky Linux o AlmaLinux salvo donde se indica.
Requisitos previos
- Un servidor Linux, por ejemplo un VPS de CubePath con Ubuntu 24.04.
- Acceso por SSH con un usuario no root que tenga privilegios
sudo.
Para cualquier comando de esta guía, man comando muestra el manual completo y comando --help un resumen de sus opciones.
Moverse por el sistema de archivos
pwd muestra el directorio actual, cd cambia de directorio y ls lista su contenido:
pwd
cd /var/log
cd - # vuelve al directorio anterior
cd # vuelve a tu directorio personal
La combinación más útil de ls es -lah: formato largo, archivos ocultos y tamaños legibles:
ls -lah /etc/nginx
total 72K
drwxr-xr-x 8 root root 4.0K Sep 10 09:12 .
drwxr-xr-x 98 root root 4.0K Sep 12 11:30 ..
-rw-r--r-- 1 root root 1.5K Sep 10 09:12 nginx.conf
drwxr-xr-x 2 root root 4.0K Sep 10 09:12 sites-available
drwxr-xr-x 2 root root 4.0K Sep 10 09:12 sites-enabled
...
Añade -t para ordenar por fecha de modificación (lo más reciente primero) o -S para ordenar por tamaño.
Crear, copiar, mover y borrar
mkdir -p ~/backups/2026/09 # crea también los directorios intermedios
cp -a /etc/nginx ~/backups/nginx # copia recursiva conservando permisos y fechas
mv informe.txt ~/backups/ # mueve o renombra
rm archivo.txt # borra un archivo
rm -r directorio/ # borra un directorio y su contenido
Antes de editar un archivo de configuración, haz una copia al lado. Es la forma más rápida de volver atrás:
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Advertencia
rmno tiene papelera. Antes de ejecutarrm -rcon comodines o variables, lista primero lo que vas a borrar conlsusando el mismo patrón.
Ver el contenido de archivos
cat /etc/hostname # archivos cortos
less /var/log/syslog # archivos largos: / busca, q sale
head -n 20 archivo.log # primeras 20 líneas
tail -n 50 archivo.log # últimas 50 líneas
sudo tail -f /var/log/nginx/access.log # sigue el archivo en tiempo real
En Rocky Linux y AlmaLinux no existe /var/log/syslog; el equivalente es /var/log/messages, aunque en todas las distribuciones es preferible usar journalctl, como verás más abajo.
Permisos y propietarios
Cada archivo tiene un propietario, un grupo y permisos de lectura (r), escritura (w) y ejecución (x) para el propietario, el grupo y el resto. En notación numérica, r=4, w=2 y x=1:
chmod 640 /etc/miapp/config.ini # rw- r-- ---
chmod 755 /usr/local/bin/backup.sh # rwx r-x r-x
chmod u+x script.sh # añade ejecución al propietario
sudo chown www-data:www-data -R /var/www/midominio
Para ver los permisos y el propietario de un archivo concreto:
stat -c '%A %U:%G %n' /etc/shadow
-rw-r----- root:shadow /etc/shadow
Importante
chmod 777nunca es la solución a un error de permisos. Averigua con qué usuario se ejecuta el servicio (por ejemplo,www-dataen Nginx sobre Ubuntu) y dale acceso solo a ese usuario o a su grupo.
Buscar archivos y texto
find busca archivos por nombre, tamaño, fecha o tipo:
find /etc -name '*.conf' # por nombre
sudo find /var -type f -size +500M # archivos de más de 500 MB
find /var/www -type f -mtime -1 # modificados en las últimas 24 horas
grep busca texto dentro de archivos:
grep -rn 'server_name' /etc/nginx/ # recursivo, con número de línea
grep -i 'error' /var/log/nginx/error.log # sin distinguir mayúsculas
grep -v '^#' /etc/ssh/sshd_config | grep -v '^$' # quita comentarios y líneas vacías
Espacio en disco
df muestra el espacio libre de cada sistema de archivos y du lo que ocupa cada directorio:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 49G 18G 29G 39% /
tmpfs 982M 0 982M 0% /dev/shm
/dev/vda15 105M 6.1M 99M 6% /boot/efi
Para encontrar qué directorio llena el disco, ordena los resultados de du por tamaño:
sudo du -h --max-depth=1 /var | sort -h
4.0K /var/opt
...
1.2G /var/cache
3.8G /var/log
7.9G /var/lib
14G /var
lsblk muestra los discos y particiones, montados o no, útil después de añadir un volumen:
lsblk
Si el disco está lleno por los logs del sistema, limita el tamaño del journal en lugar de borrar archivos a mano:
sudo journalctl --vacuum-size=500M
Procesos y consumo de recursos
top muestra en tiempo real los procesos que más CPU consumen (pulsa M para ordenar por memoria y q para salir). Si prefieres una interfaz más cómoda, instala htop con sudo apt install htop.
Para una foto fija de los procesos que más memoria usan:
ps aux --sort=-%mem | head -n 10
Para comprobar la carga y la memoria del sistema:
uptime
free -h
10:42:13 up 12 days, 3:04, 1 user, load average: 0.35, 0.28, 0.22
total used free shared buff/cache available
Mem: 1.9Gi 812Mi 214Mi 12Mi 1.1Gi 1.1Gi
Swap: 1.0Gi 0B 1.0Gi
Fíjate en la columna available y no en free: Linux usa la memoria libre como caché y la libera cuando un proceso la necesita.
Para terminar un proceso, busca su PID y envíale una señal. kill envía SIGTERM, que permite al proceso cerrarse ordenadamente; usa -9 (SIGKILL) solo si no responde:
pgrep -a python3
kill 12345
kill -9 12345
Si el proceso pertenece a un servicio, no uses kill: gestiónalo con systemctl.
Servicios con systemd
Todos los servicios de las distribuciones actuales se gestionan con systemctl:
sudo systemctl status nginx # estado y últimas líneas de log
sudo systemctl restart nginx # reinicia
sudo systemctl reload nginx # recarga la configuración sin cortar conexiones
sudo systemctl enable --now nginx # arranca ahora y en cada inicio
sudo systemctl disable --now nginx # para y desactiva el arranque automático
systemctl --failed # servicios que han fallado
La salida de status indica si el servicio está activo y desde cuándo:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-09-24 09:15:02 UTC; 1 day ago
...
Logs con journalctl
journalctl lee los logs de todos los servicios gestionados por systemd:
sudo journalctl -u nginx -n 50 # últimas 50 líneas de un servicio
sudo journalctl -u nginx -f # en tiempo real
sudo journalctl -u ssh --since "1 hour ago" # por intervalo de tiempo
sudo journalctl -p err -b # errores desde el último arranque
En Rocky Linux y AlmaLinux la unidad del servidor SSH se llama sshd en lugar de ssh.
Red
ip muestra direcciones y rutas (sustituye a los antiguos ifconfig y route):
ip -br addr
ip route
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 203.0.113.10/24 2001:db8::10/64
default via 203.0.113.1 dev eth0 proto static
203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.10
ss muestra qué puertos están escuchando y qué proceso los usa (sustituye a netstat):
sudo ss -tulpn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=812,fd=6))
tcp LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=701,fd=3))
Para diagnosticar conectividad, DNS y respuestas HTTP:
ping -c 4 1.1.1.1
dig +short cubepath.com
curl -I https://tu_dominio
dig forma parte del paquete dnsutils en Ubuntu y Debian (bind-utils en Rocky Linux y AlmaLinux).
Usuarios y grupos
Crea un usuario con directorio personal y shell interactiva, y dale permisos de administración añadiéndolo al grupo sudo (en Rocky Linux y AlmaLinux el grupo es wheel):
sudo adduser deploy
sudo usermod -aG sudo deploy
En Rocky Linux y AlmaLinux, adduser no pide la contraseña: crea el usuario con sudo useradd -m deploy, asígnale contraseña con sudo passwd deploy y añádelo al grupo con sudo usermod -aG wheel deploy.
Comprueba a qué grupos pertenece y quién ha iniciado sesión:
id deploy
who
last -n 10
Nota que usermod -aG necesita la -a: sin ella, el usuario pierde todos sus grupos secundarios salvo el indicado.
Comprimir y transferir archivos
tar empaqueta y comprime directorios:
tar -czf nginx-conf.tar.gz /etc/nginx # crea
tar -tzf nginx-conf.tar.gz # lista el contenido
tar -xzf nginx-conf.tar.gz -C /tmp # extrae en /tmp
rsync copia archivos entre servidores y solo transfiere lo que ha cambiado, lo que lo hace ideal para copias de seguridad:
rsync -avz --progress /var/www/ usuario@tu_servidor_ip:/srv/backup/www/
La barra final de /var/www/ importa: copia el contenido del directorio, no el directorio en sí.
Información del sistema
cat /etc/os-release # distribución y versión
uname -r # versión del kernel
hostnamectl # nombre de host, sistema y virtualización
timedatectl # fecha, hora y zona horaria
nproc # número de CPUs
Conclusión
Con estos comandos puedes cubrir la mayor parte del trabajo diario en un servidor: navegar y editar archivos, corregir permisos, localizar qué llena el disco, revisar procesos, gestionar servicios con systemctl, leer logs con journalctl y diagnosticar la red con ip, ss, dig y curl.
Como siguientes pasos, puedes aprender a gestionar paquetes con APT y DNF, configurar un firewall con UFW y automatizar tareas periódicas con temporizadores de systemd o cron.
