Práctica 6 — Software y Tareas Automáticas
Ejercicio 6.1 — Gestión de paquetes con apt
Sección titulada “Ejercicio 6.1 — Gestión de paquetes con apt"Contexto
Sección titulada “Contexto"apt es el gestor de paquetes de Ubuntu/Debian. Cualquier software del sistema operativo —desde servidores web hasta herramientas de terminal— se instala, actualiza y elimina con apt.
Tarea 1 — Buscar, instalar y eliminar paquetes
Sección titulada “Tarea 1 — Buscar, instalar y eliminar paquetes"# Actualiza la lista de paquetes disponibles (no instala nada)sudo apt update
# Busca información sobre un paquete antes de instalarloapt show htop
# Instala htop (monitor de recursos mejorado)sudo apt install -y htop
# Pruébalohtop# Pulsa Q para salir# Instala varias herramientas de una vezsudo apt install -y tree curl wget
# Prueba tree (muestra árbol de directorios)tree /etc/apt/
# Elimina curl pero conserva su configuraciónsudo apt remove curl
# Elimina curl y su configuración (purge)sudo apt purge curl
# Elimina paquetes huérfanos (instalados como dependencias y ya no necesarios)sudo apt autoremove -yTarea 2 — Instalar un paquete .deb manualmente
Sección titulada “Tarea 2 — Instalar un paquete .deb manualmente"A veces un paquete no está en los repositorios y debes descargarlo como .deb:
# Descarga el paquete .deb de bat (un cat mejorado con sintaxis coloreada)wget "https://github.com/sharkdp/bat/releases/download/v0.24.0/bat_0.24.0_amd64.deb" \ -O /tmp/bat.deb
# Instálalo con dpkgsudo dpkg -i /tmp/bat.deb
# Pruébalobat /etc/hostsSi dpkg falla por dependencias: sudo apt install -f -y y vuelve a intentarlo.
Ejercicio 6.2 — Script de informe del sistema
Sección titulada “Ejercicio 6.2 — Script de informe del sistema"Contexto
Sección titulada “Contexto"Los sysadmins programan informes automáticos para detectar problemas antes de que los usuarios los reporten. Crearás un script que recopila el estado del servidor.
Setup — una sola vez
Sección titulada “Setup — una sola vez"# Crea el directorio donde iran los informesmkdir -p ~/informesTarea 1 — Crear el script paso a paso
Sección titulada “Tarea 1 — Crear el script paso a paso"Primero entiende cada pieza antes de montarlas juntas:
# Prueba en la terminal cada uno de estos comandos:
# 1. Fecha y hora actualdate '+%Y-%m-%d %H:%M:%S'
# 2. Hostname del servidorhostname
# 3. Uso de disco del raízdf -h / | tail -1
# 4. Memoria disponiblefree -h | grep "Mem:"
# 5. Carga del sistema (últimos 1, 5 y 15 minutos)uptime | awk -F'load average:' '{print $2}'
# 6. Servicios caídos (si no hay ninguno, no muestra nada)systemctl list-units --failed --no-legend 2>/dev/null | head -5Ahora crea el script:
sudo nano /usr/local/bin/informe_sistema.shEscribe:
#!/bin/bash# informe_sistema.sh — Informe diario del estado del servidor
LOGFILE="/var/log/informes/informe_$(date '+%Y-%m-%d').log"SEPARADOR="========================================"
# Crea el directorio si no existemkdir -p /var/log/informes
{ echo "$SEPARADOR" echo "INFORME DEL SERVIDOR — $(date '+%Y-%m-%d %H:%M:%S')" echo "$SEPARADOR" echo ""
echo "## Servidor" echo "Hostname: $(hostname)" echo "Kernel: $(uname -r)" echo ""
echo "## Disco" df -h | grep -v tmpfs echo ""
echo "## Memoria" free -h echo ""
echo "## Carga del sistema" uptime echo ""
echo "## Servicios caídos" FALLIDOS=$(systemctl list-units --failed --no-legend 2>/dev/null) if [ -z "$FALLIDOS" ]; then echo "Todos los servicios funcionan correctamente." else echo "$FALLIDOS" fi echo ""
echo "## Últimos errores del sistema" journalctl -p err -n 5 --no-pager 2>/dev/null || echo "(sin errores recientes)" echo ""
echo "$SEPARADOR" echo "Fin del informe"} >> "$LOGFILE"
echo "Informe guardado en: $LOGFILE"Dale permisos de ejecución y pruébalo:
sudo chmod +x /usr/local/bin/informe_sistema.sh
# Prueba manualsudo /usr/local/bin/informe_sistema.sh
# Lee el informe generadocat /var/log/informes/informe_$(date '+%Y-%m-%d').logEl informe debe tener todas las secciones rellenas. Si alguna está vacía, revisa el comando correspondiente.
Ejercicio 6.3 — Programar con systemd timer
Sección titulada “Ejercicio 6.3 — Programar con systemd timer"Tarea 1 — Crear el servicio
Sección titulada “Tarea 1 — Crear el servicio"sudo nano /etc/systemd/system/informe-sistema.service[Unit]Description=Informe diario del estado del servidorAfter=network.target
[Service]Type=oneshotExecStart=/usr/local/bin/informe_sistema.sh
[Install]WantedBy=multi-user.targetTarea 2 — Crear el timer
Sección titulada “Tarea 2 — Crear el timer"sudo nano /etc/systemd/system/informe-sistema.timer[Unit]Description=Timer para informe diario a las 7:00
[Timer]OnCalendar=*-*-* 07:00:00Persistent=true
[Install]WantedBy=timers.targetTarea 3 — Activar y probar
Sección titulada “Tarea 3 — Activar y probar"sudo systemctl daemon-reload
# Habilita el timersudo systemctl enable informe-sistema.timer
# Arranca el timersudo systemctl start informe-sistema.timer
# Verifica el estadosystemctl status informe-sistema.timer
# Verifica cuándo es la próxima ejecuciónsystemctl list-timers | grep informe
# Fuerza una ejecución inmediata para probarsudo systemctl start informe-sistema.service
# Verifica en los logs de systemdjournalctl -u informe-sistema.service -n 5 --no-pager
# Verifica que se generó el informels -la /var/log/informes/cat /var/log/informes/informe_$(date '+%Y-%m-%d').log📤 Bloque de entrega
Sección titulada “📤 Bloque de entrega"echo "=== ENTREGA PRÁCTICA 6 ===" && \echo "" && \echo "--- Script de informe ---" && \cat /usr/local/bin/informe_sistema.sh && \echo "" && \echo "--- Estado del timer ---" && \systemctl status informe-sistema.timer && \echo "" && \echo "--- Próxima ejecución ---" && \systemctl list-timers | grep informe && \echo "" && \echo "--- Último informe generado ---" && \ls -la /var/log/informes/ && \echo "" && \sudo tail -30 /var/log/informes/informe_$(date '+%Y-%m-%d').log