Programación y automatización (RSA-11)

La ruta del SysAdmin 15 de jul. de 2025

Este apartado se enfoca en cómo usar lenguajes como Bash o Python para automatizar procesos del sistema, gestionar tareas repetitivas, y construir utilidades prácticas.

Verás ejemplos con scripts, tareas programadas y construcción de herramientas ligeras.


Automatización con scripts Bash

Estructura básica

#!/bin/bash
echo "Hola, Luis. Hoy es: $(date)"
  • La primera línea (#!/bin/bash) define el intérprete

Puedes guardar esto como script.sh y ejecutar con:

$ chmod +x script.sh
$ ./script.sh

Acceso a argumentos

#!/bin/bash
echo "Hola $1, bienvenido a $2"

Llamado así:

$ ./script.sh Luis Madrid

Condicionales y bucles

if [ -f archivo.txt ]; then
  echo "Existe el archivo"
else
  echo "No existe"
fi

for i in {1..5}; do
  echo "Número: $i"
done

Uso de cron para ejecutar tareas programadas

Consultar y editar cron del usuario

$ crontab -l
$ crontab -e

Ejemplo para ejecutar cada día a las 20:00

0 20 * * * /home/luisgulo/scripts/respaldar.sh

Uso de at para tareas únicas programadas

$ echo "echo 'Backup finalizado' >> ~/registro.log" | at 23:30
  • Ejecuta el comando una vez a las 23:30 del día actual

Programación con Python

Script básico

#!/usr/bin/env python3
import datetime
print("Hoy es:", datetime.datetime.now())

Guarda como fechahoy.py y ejecuta con:

$ python3 fechahoy.py

Automatizar copia de archivos modificados recientemente

#!/bin/bash
find /home/luisgulo/Documentos -type f -mtime -1 -exec cp {} /home/luisgulo/BackupDiario/ \;
  • Copia todos los archivos modificados en las últimas 24 horas

Crear alias y funciones para comandos personalizados

Alias

alias actualizar="sudo apt update && sudo apt upgrade"

Agrega en ~/.bashrc o ~/.zshrc

Función personalizada

buscar() {
  grep -rin "$1" ~/Documentos
}

Monitorización en tiempo real con inotify, entr y watch

Estas herramientas permiten ejecutar acciones automáticamente al detectar cambios en archivos, directorios, procesos o salidas.

1. inotifywait (parte del paquete inotify-tools)

Monitoriza eventos del sistema de archivos: modificación, creación, eliminación, etc.

Instalación:

# apt install inotify-tools     # Debian/Ubuntu
# pacman -S inotify-tools       # Arch

Ejemplo básico:

$ inotifywait -m ~/Documentos
  • -m: modo monitor continuo

Ejecutar acción al detectar cambios:

$ while inotifywait -e modify ~/Documentos/nota.txt; do
    echo "La nota ha sido modificada"
  done

Eventos comunes:

  • modify → archivo editado
  • create → archivo nuevo
  • delete → archivo eliminado

2. entr

Permite ejecutar comandos cada vez que un archivo se modifica. Es muy útil para scripts cortos, compilación automática o edición reactiva.

Instalación:

# apt install entr
# pacman -S entr

Ejemplo práctico:

$ ls *.tex | entr pdflatex documento.tex

→ Compila el PDF automáticamente cada vez que modificas documento.tex.

Ejemplo con script:

$ echo archivo.txt | entr ./procesar.sh

3. watch

Ejecuta un comando repetidamente a intervalos regulares y muestra la salida actualizada.

Ejemplo básico:

$ watch -n 5 df -h

→ Muestra cada 5 segundos el espacio libre en disco.

Filtrar cambios destacados:

$ watch -d ls -l /var/log
  • -d: resalta diferencias en la salida

Aplicaciones típicas:

  • Ver procesos activos: watch -n 2 ps aux | grep nginx
  • Monitorizar uso de red: watch -n 1 ss -tuln

Comparativa rápida

HerramientaTipo de monitoreoReacciona a…Ideal para…
inotifywaitEventos de sistema de archivosModificación, creación…Vigilancia de directorios
entrCambios de archivoReescritura del contenidoCompilación, scripts reactivos
watchSalida de comandosCada intervalo fijoVisualización periódica

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux