Contenido
La automatización en Bash suele implicar mover, copiar, buscar, procesar y vigilar archivos, además de ejecutar tareas periódicas. En este módulo aprenderás a manipular archivos desde scripts y a automatizar acciones sobre el sistema, entrando ya en terreno de administrador serio.
1. Comandos esenciales para gestionar archivos
Bash no inventa nada aquí: usa comandos del sistema. Estos son tus martillos y destornilladores:
| Comando | Uso |
|---|---|
cp | Copiar archivos o directorios |
mv | Mover o renombrar |
rm | Borrar archivos |
mkdir | Crear directorios |
rmdir | Borrar directorios vacíos |
touch | Crear archivos vacíos o actualizar fecha |
chmod | Cambiar permisos |
chown | Cambiar propietario |
find | Buscar archivos |
file | Detectar tipo de archivo |
Ejemplos rápidos:
cp origen.txt destino.txt
mv archivo.txt /tmp/
rm viejo.txt
mkdir respaldos
touch notas.log
2. Copias de seguridad (Backups) simples
Un backup básico es copiar archivos o carpetas a otro lugar. Ejemplo:
#!/bin/bash
cp -r /home/usuario/documentos /home/usuario/respaldo/
Añadir fecha para evitar sobreescritura:
fecha=$(date +%Y-%m-%d)
cp -r /home/usuario/documentos "/home/usuario/respaldo/doc_$fecha"
Así tendrás:
doc_2026-01-12/
doc_2026-01-13/
doc_2026-01-14/
...
Automatización empieza aquí.
3. Comprimir y descomprimir desde scripts
Común en backups, logs y despliegue de software.
| Herramienta | Uso |
|---|---|
tar | Empaquetar/comprimir |
gz | Compresión gzip |
zip/unzip | Compresión zip |
Ejemplo:
tar -czf respaldo.tar.gz /etc
Explicación:
c→ crearz→ comprimir con gzipf→ indicar nombre del archivo
Descomprimir:
tar -xzf respaldo.tar.gz
4. Buscar archivos con find
find es un radar. Busca por nombre, tamaño, fecha, permisos…
Ejemplos útiles:
Encontrar archivos por nombre:
find /var/log -name "*.log"
Por tamaño:
find / -size +100M
Por fecha (modificados hace menos de 1 día):
find /tmp -mtime -1
Por permisos inseguros:
find /home -perm 777
Puedes además ejecutar acciones:
find /var/log -name "*.log" -exec gzip {} \;
Esto comprime todos los .log.
5. Analizar y procesar logs
Los logs cuentan la historia del sistema. Para analizarlos usamos:
grep(buscar patrones)cut(extraer columnas)awk(procesar datos)sed(modificar texto)
Ejemplos básicos:
Buscar errores:
grep -i "error" /var/log/syslog
Buscar IPs:
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" acceso.log
Contar líneas:
wc -l /var/log/auth.log
6. Automatización con cron
cron ejecuta tareas programadas automáticamente.
Editar tareas del usuario:
crontab -e
Formato:
MIN HORA DIA MES DIASEM EJECUTABLE
Ejemplos:
Ejecutar un script cada día a las 23:00:
0 23 * * * /home/user/scripts/backup.sh
Cada 5 minutos:
*/5 * * * * /home/user/scripts/monitor.sh
Ver tareas activas:
crontab -l
7. Automatización con systemd (modo pro)
systemd permite ejecutar servicios y temporizadores.
Estructura:
.service→ define una acción.timer→ define cuándo se ejecuta
Ejemplo de servicio:
/etc/systemd/system/backup.service
[Unit]
Description=Backup Diario
[Service]
ExecStart=/usr/local/bin/backup.sh
Ejemplo de timer:
/etc/systemd/system/backup.timer
[Unit]
Description=Programa el backup diario
[Timer]
OnCalendar=daily
[Install]
WantedBy=timers.target
Activar timer:
systemctl enable --now backup.timer
Ver logs:
journalctl -u backup.service
Los alumnos pueden ver cómo se automatiza un servidor real.
8. Ejemplos
Ejemplo 1: Backup con timestamp
#!/bin/bash
fecha=$(date +%Y-%m-%d_%H-%M)
tar -czf backup_$fecha.tar.gz /home/alumno
Ejemplo 2: Buscar archivos grandes
#!/bin/bash
find / -size +500M > grandes.txt
Ejemplo 3: Comprimir logs viejos
#!/bin/bash
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
Ejemplo 4: Filtrar errores de syslog
#!/bin/bash
grep -i "error" /var/log/syslog > errores.log
Ejercicios Propuestos
Ejercicio 1:
Crear un script backup.sh que comprima /etc en un archivo etc.tar.gz.
Ejercicio 2:
Crear un script buscar.sh que busque archivos .conf en /etc y guarde la lista en conf.txt.
Ejercicio 3:
Crear un script errores.sh que filtre la palabra “error” del archivo /var/log/syslog y lo guarde en errores.log.
Ejercicio 4:
Crear una entrada cron que ejecute backup.sh todos los días a las 23:00.
Ejercicio 5 (opcional pro):
Crear un .service + .timer para ejecutar buscar.sh cada hora.
Soluciones
✅ Ejercicio 1 — backup.sh
Enunciado:
Crear un script backup.sh que comprima /etc en un archivo etc.tar.gz.
💡 Solución básica:
#!/bin/bash
# Script: backup.sh
# Crea un backup comprimido del directorio /etc
tar -czf etc.tar.gz /etc
echo "Backup creado: etc.tar.gz"
💡 Solución un poco mejor (con fecha):
#!/bin/bash
# Script: backup.sh
# Crea un backup comprimido del directorio /etc con fecha
fecha=$(date +%Y-%m-%d_%H-%M)
archivo="etc_$fecha.tar.gz"
tar -czf "$archivo" /etc
echo "Backup creado: $archivo"
✅ Ejercicio 2 — buscar.sh
Enunciado:
Crear un script buscar.sh que busque archivos .conf en /etc y guarde la lista en conf.txt.
💡 Solución:
#!/bin/bash
# Script: buscar.sh
# Busca archivos .conf en /etc y los guarda en conf.txt
find /etc -type f -name "*.conf" > conf.txt
echo "Listado de archivos .conf guardado en conf.txt"
Si quieres que añada en lugar de sobrescribir:
find /etc -type f -name "*.conf" >> conf.txt
✅ Ejercicio 3 — errores.sh
Enunciado:
Crear un script errores.sh que filtre la palabra “error” del archivo /var/log/syslog y lo guarde en errores.log.
💡 Solución:
#!/bin/bash
# Script: errores.sh
# Filtra líneas con 'error' en /var/log/syslog y las guarda en errores.log
grep -i "error" /var/log/syslog > errores.log
echo "Líneas con 'error' guardadas en errores.log"
-i→ ignora mayúsculas/minúsculas (ERROR, Error, error…).
✅ Ejercicio 4 — Entrada de cron
Enunciado:
Crear una entrada cron que ejecute backup.sh todos los días a las 23:00.
💡 Suposiciones:
- El script está en:
/home/usuario/scripts/backup.sh - Tiene permisos de ejecución:
chmod +x backup.sh
💡 Línea de crontab:
Se edita con:
crontab -e
Y se añade:
0 23 * * * /home/usuario/scripts/backup.sh >> /home/usuario/scripts/backup.log 2>&1
Explicación rápida:
0 23 * * *→ a las 23:00 todos los días>> backup.log 2>&1→ guarda salida y errores en un log (estilo “vida real”)
✅ Ejercicio 5 (opcional) — systemd service + timer
Enunciado:
Crear un .service + .timer para ejecutar buscar.sh cada hora.
1️⃣ Script buscar.sh (por si acaso):
#!/bin/bash
# /usr/local/bin/buscar.sh
find /etc -type f -name "*.conf" > /var/log/conf.txt
Dar permisos:
sudo chmod +x /usr/local/bin/buscar.sh
2️⃣ Unidad de servicio: /etc/systemd/system/buscar.service
[Unit]
Description=Buscar archivos .conf en /etc
[Service]
Type=oneshot
ExecStart=/usr/local/bin/buscar.sh
3️⃣ Unidad de temporizador: /etc/systemd/system/buscar.timer
[Unit]
Description=Ejecutar buscar.sh cada hora
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
4️⃣ Activar y comprobar
Recargar unidades:
sudo systemctl daemon-reload
Activar y arrancar el timer:
sudo systemctl enable --now buscar.timer
Ver estado:
systemctl status buscar.timer
Ver ejecuciones del servicio:
journalctl -u buscar.service






![11. [Reto] Bash Incremental: Aprender Shell a Golpes de Ejemplos 021c8028-9a76-4b0a-90e1-d0617edc9d94](https://laaventuradeaprender.com/wp-content/uploads/2026/01/021c8028-9a76-4b0a-90e1-d0617edc9d94.webp)

