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

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

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.