--- title: "Comandos esenciales de Linux para administrar un servidor" description: "Los comandos de Linux que usarás a diario en un servidor: archivos, permisos, búsquedas, disco, procesos, systemd, red, usuarios y logs, con ejemplos." category: "Sistemas Operativos" language: es source: https://cubepath.com/es/docs/sistemas-operativos/comandos-esenciales-de-linux-para-administradores-de-sistemas updated: 2026-09-25 --- # Comandos esenciales de Linux para administrar un servidor 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: ```bash 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: ```bash ls -lah /etc/nginx ``` ```output 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 ```bash 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: ```bash sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak ``` > Advertencia: `rm` no tiene papelera. Antes de ejecutar `rm -r` con comodines o variables, lista primero lo que vas a borrar con `ls` usando el mismo patrón. ## Ver el contenido de archivos ```bash 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`: ```bash 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: ```bash stat -c '%A %U:%G %n' /etc/shadow ``` ```output -rw-r----- root:shadow /etc/shadow ``` > Importante: `chmod 777` nunca es la solución a un error de permisos. Averigua con qué usuario se ejecuta el servicio (por ejemplo, `www-data` en 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: ```bash 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: ```bash 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: ```bash df -h ``` ```output 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: ```bash sudo du -h --max-depth=1 /var | sort -h ``` ```output 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: ```bash lsblk ``` Si el disco está lleno por los logs del sistema, limita el tamaño del journal en lugar de borrar archivos a mano: ```bash 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: ```bash ps aux --sort=-%mem | head -n 10 ``` Para comprobar la carga y la memoria del sistema: ```bash uptime free -h ``` ```output 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: ```bash 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`: ```bash 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: ```output ● 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: ```bash 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`): ```bash ip -br addr ip route ``` ```output 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`): ```bash sudo ss -tulpn ``` ```output 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: ```bash 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`): ```bash 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: ```bash 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: ```bash 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: ```bash 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 ```bash 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.