Introducción

Hola Fronters 👋

Si eres administrador de sistemas, ya sabes usar ls, cd, cp, mv y rm. Eso es el ABC. Pero un sysadmin de verdad vive en la terminal con comandos que van mucho más allá. Hoy vamos a repasar los 20 comandos más importantes de Linux que todo sysadmin debe conocer y dominar.

Cada comando viene con ejemplos prácticos para que puedas aplicarlos desde hoy mismo. 🚀

1. systemctl — El corazón de systemd

Gestiona servicios, targets y el estado del sistema.

# Ver estado de un servicio
systemctl status nginx

# Iniciar/detener/reiniciar
systemctl start nginx
systemctl stop nginx
systemctl restart nginx

# Habilitar/deshabilitar en inicio
systemctl enable nginx
systemctl disable nginx

# Listar servicios fallidos
systemctl --failed

# Ver todos los servicios en ejecución
systemctl list-units --type=service --state=running

# Recargar systemd después de agregar un nuevo servicio
systemctl daemon-reload

2. journalctl — El visor de logs definitivo

Mucho más potente que el antiguo tail -f /var/log/syslog.

# Logs desde el último arranque
journalctl -b

# Logs de un servicio específico
journalctl -u sshd.service

# Últimos 50 mensajes
journalctl -n 50

# Logs en tiempo real (como tail -f)
journalctl -f

# Solo errores y críticos
journalctl -p err -b --no-pager

# Desde una fecha específica
journalctl --since "2025-05-01" --until "2025-05-10"

# Espacio que ocupa el journal
journalctl --disk-usage

3. ss — Socket statistics (reemplazo de netstat)

Muestra conexiones de red, puertos en escucha y estadísticas de sockets. Más rápido que netstat.

# Todos los puertos en escucha (TCP y UDP)
ss -tuln

# Conexiones establecidas
ss -tun

# Mostrar proceso asociado a cada socket
ss -tulnp

# Conexiones en estado TIME_WAIT
ss -tan state time-wait

# Estadísticas de red
ss -s

4. lsof — Lista de archivos abiertos

En Linux, todo es un archivo. lsof te muestra qué procesos tienen qué archivos abiertos.

# Archivos abiertos por un usuario
lsof -u www-data

# Qué proceso está usando un puerto
lsof -i :80

# Archivos abiertos de un proceso específico
lsof -p 1234

# Archivos borrados pero aún en uso (ocupan disco)
lsof +L1

# Conexiones de red por proceso
lsof -i -P -n

5. df, du, iostat — Almacenamiento

Tres comandos esenciales para entender el uso de disco.

# Espacio en sistemas de archivos (legible)
df -h

# Inodos (cuando no hay espacio pero df muestra libre)
df -i

# Tamaño de un directorio
du -sh /var/log/

# Top 10 directorios más pesados
du -x / | sort -rn | head -10

# I/O stats (instalar con apt install sysstat)
iostat -x 2 5     # Cada 2 segundos, 5 reportes
iostat -d -h      # Por dispositivo, en formato legible

6. rsync — Sincronización remota eficiente

Copia diferencial, ideal para backups y migraciones.

# Copiar directorio local a remoto
rsync -avz /datos/ user@servidor:/backup/

# Sincronizar remoto a local
rsync -avz user@servidor:/remoto/ /local/

# Resumir transferencia interrumpida
rsync -avz --partial /origen/ /destino/

# Excluir archivos
rsync -avz --exclude='*.tmp' /origen/ /destino/

# Modo seco (mostrar qué haría sin ejecutar)
rsync -avz --dry-run /origen/ /destino/

7. scp — Copia segura por SSH

Sencillo y directo para transferencias puntuales.

# Copiar archivo local a remoto
scp archivo.txt user@servidor:/home/user/

# Copiar directorio completo
scp -r /carpeta/ user@servidor:/destino/

# Copiar de remoto a local
scp user@servidor:/remoto/archivo.txt ./

# Especificar puerto SSH no estándar
scp -P 2222 archivo.txt user@servidor:/home/

8. cron / crontab — Automatización de tareas

El planificador de tareas por excelencia.

# Editar crontab del usuario actual
crontab -e

# Listar tareas programadas
crontab -l

# Formato: minuto hora día_mes mes día_sem comando
# Ejecutar cada día a las 2am
0 2 * * * /usr/local/bin/backup.sh

# Cada 15 minutos
*/15 * * * * /usr/local/bin/monitor.sh

# Todos los lunes a las 6am
0 6 * * 1 /usr/local/bin/semanal.sh

# Primer día de cada mes
0 0 1 * * /usr/local/bin/mensual.sh

9. useradd / usermod / passwd — Gestión de usuarios

# Crear usuario con home y shell
useradd -m -s /bin/bash jperez

# Crear usuario sin login (servicios)
useradd -r -s /usr/sbin/nologin miservicio

# Modificar usuario (cambiar grupo, shell, expiración)
usermod -aG sudo jperez        # Agregar a grupo sudo
usermod -s /bin/zsh jperez     # Cambiar shell
usermod -e 2025-12-31 jperez   # Expirar cuenta

# Establecer/cambiar contraseña
passwd jperez

# Bloquear/desbloquear cuenta
passwd -l jperez               # Lock
passwd -u jperez               # Unlock

10. groupadd — Gestión de grupos

# Crear grupo
groupadd developers

# Agregar usuario a grupo (sin sacarlo de otros)
usermod -aG developers jperez

# Ver grupos de un usuario
groups jperez

# Listar todos los grupos
cat /etc/group

11. chown / chmod avanzado

# Cambiar propietario recursivamente
chown -R www-data:www-data /var/www/

# chmod con notación octal
chmod 755 script.sh      # rwxr-xr-x
chmod 600 clave.pem      # rw-------
chmod 644 index.html     # rw-r--r--

# chmod recursivo con find
find /var/www/ -type f -exec chmod 644 {} \;
find /var/www/ -type d -exec chmod 755 {} \;

# Permisos especiales (SUID, SGID, Sticky)
chmod 4755 programa      # SUID (ejecuta con permisos del dueño)
chmod 2775 directorio    # SGID (hereda grupo)
chmod 1777 /tmp          # Sticky (solo dueño borra)

12. umask — Máscara de permisos por defecto

# Ver umask actual
umask

# La umask se resta de 666 (archivos) o 777 (directorios)
# umask 022 → archivos: 644, directorios: 755
# umask 077 → archivos: 600, directorios: 700

# Cambiar para la sesión actual
umask 027

# Permanente: agregar a ~/.bashrc o /etc/profile
echo "umask 027" >> ~/.bashrc

13. setfacl / getfacl — Listas de control de acceso

Cuando los permisos tradicionales (dueño/grupo/otros) se quedan cortos.

# Ver ACLs de un archivo
getfacl archivo.txt

# Dar permiso de lectura a un usuario específico
setfacl -m u:jperez:r archivo.txt

# Dar permisos rwx a un grupo específico
setfacl -m g:developers:rwx /proyecto/

# Heredar ACLs a subdirectorios
setfacl -m d:g:developers:rx /proyecto/

# Remover ACL
setfacl -x u:jperez archivo.txt

14. ulimit — Límites de recursos por usuario

# Ver límites actuales
ulimit -a

# Límite de archivos abiertos
ulimit -n 65536

# Límite de procesos
ulimit -u 4096

# Límite de memoria
ulimit -m unlimited

# Configuración permanente en /etc/security/limits.conf
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf

15. nice / renice — Prioridad de procesos

# Ejecutar con baja prioridad (nice más alto = menos prioridad)
nice -n 19 ./proceso_pesado.sh

# Ejecutar con alta prioridad (solo root)
nice -n -20 ./proceso_critico.sh

# Cambiar prioridad de un proceso en ejecución
renice -n 10 -p 1234

# Cambiar prioridad de todos los procesos de un usuario
renice -n 15 -u jperez

# El rango va de -20 (máxima prioridad) a 19 (mínima)

16. nohup / disown — Procesos persistentes

Mantén procesos ejecutándose incluso después de cerrar la sesión SSH.

# Ejecutar ignorando SIGHUP (cierre de terminal)
nohup ./script_largo.sh &

# La salida va a nohup.out por defecto
nohup ./script.sh > output.log 2>&1 &

# Desvincular un proceso de la shell actual
./proceso.sh
Ctrl+Z
bg
disown

# Verificar que sigue vivo después de cerrar sesión
ps aux | grep script

# Alternativa moderna: systemd-run
systemd-run --user --unit=mi-servicio ./script.sh

17. screen / tmux — Multiplexores de terminal

Esenciales para sesiones SSH largas y trabajo remoto.

screen

# Iniciar sesión screen
screen -S monitoreo

# Desconectar (Ctrl+A, d) y luego reconectar
screen -r monitoreo

# Listar sesiones
screen -ls

# Log de la sesión
Ctrl+A, H

tmux (más moderno y popular)

# Iniciar sesión
tmux new -s monitoreo

# Dividir paneles horizontal/vertical
Ctrl+B, "       # horizontal
Ctrl+B, %       # vertical

# Crear nueva ventana
Ctrl+B, c

# Navegar entre ventanas
Ctrl+B, 0-9

# Desconectar y reconectar
Ctrl+B, d
tmux attach -t monitoreo

# Scroll (copy mode)
Ctrl+B, [

18. alias — Tu propia navaja suiza

# Crear alias temporales (sesión actual)
alias ll='ls -lah'
alias la='ls -A'
alias ..='cd ..'
alias ports='ss -tulnp'

# Permanentes: agregar a ~/.bashrc o ~/.bash_aliases
echo "alias gs='git status'" >> ~/.bashrc

# Eliminar alias
unalias ll

# Ver todos los alias
alias

# Ejemplo de alias útiles para sysadmin
alias dfh='df -h | grep -v tmpfs'
alias meminfo='free -h -l'
alias cpuinfo='lscpu | grep -E "Model name|^CPU\(s\)|Thread|Core"'
alias logs='journalctl -p err -b --no-pager | tail -30'

19. history — El historial es tu aliado

# Ver historial
history

# Ejecutar comando por número
!1234

# Buscar en historial (Ctrl+R)
# Presiona Ctrl+R y escribe parte del comando

# Eliminar entrada del historial
history -d 1234

# Limpiar historial
history -c

# Buscar comandos más usados
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10

# Ejecutar el último comando que empiece con "system"
!system

# Configuración útil en ~/.bashrc
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%F %T "

20. watch / xargs — Ejecución periódica y paralela

watch — Ejecutar un comando periódicamente

# Ver procesos cada 2 segundos
watch -n 2 'ps aux --sort=-%cpu | head -10'

# Ver uso de disco actualizado
watch -d 'df -h'

# Ver logs en vivo
watch -n 60 'journalctl -p err --since "5 min ago" --no-pager'

# Resaltar diferencias entre ejecuciones
watch -d 'free -h'

# Sin título (modo compacto)
watch -t 'ss -s'

xargs — Construir y ejecutar comandos desde stdin

# Buscar y borrar archivos .tmp
find /tmp -name "*.tmp" -type f | xargs rm -f

# Ejecutar paralelamente (4 procesos)
find /var/log -name "*.log" | xargs -P 4 gzip

# Confirmar antes de ejecutar
find . -name "*.bak" | xargs -p rm

# Reemplazar posición del argumento
cat hosts.txt | xargs -I {} ssh {} 'uptime'

# Delimitar por null (seguro con nombres con espacios)
find . -name "*.pdf" -print0 | xargs -0 rm

Conclusión

Domina estos 20 comandos y habrás dado un salto enorme en tu carrera como sysadmin. No se trata de memorizarlos todos de golpe, sino de integrarlos en tu día a día hasta que sean naturales.

Consejo final: crea un ~/.bash_aliases con los que más uses, practica con screen o tmux para sesiones largas, y automatiza todo lo repetitivo con cron y scripts. Esa es la verdadera diferencia entre un usuario avanzado y un sysadmin profesional.

¿Te perdiste el artículo de comandos básicos? Acá lo tienes. Este es su complemento natural para llegar al siguiente nivel.

¡Nos vemos en el próximo artículo, Fronters! 🚀