Programación y automatización (RSA-11)
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 editadocreate
→ archivo nuevodelete
→ 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
Herramienta | Tipo de monitoreo | Reacciona a… | Ideal para… |
---|---|---|---|
inotifywait | Eventos de sistema de archivos | Modificación, creación… | Vigilancia de directorios |
entr | Cambios de archivo | Reescritura del contenido | Compilación, scripts reactivos |
watch | Salida de comandos | Cada intervalo fijo | Visualización periódica |