En aquest projecte, crearem un script en Bash que analitzi fitxers de registre (logs) per extreure informació útil. Els fitxers de registre són essencials per monitoritzar el comportament del sistema, detectar errors i analitzar l'ús de recursos. Aquest projecte ens permetrà aplicar molts dels conceptes apresos en els mòduls anteriors.
Objectius del Projecte
- Llegir i processar fitxers de registre.
- Filtrar i cercar informació específica.
- Generar informes resum.
- Automatitzar l'anàlisi de registres.
Requisits Previs
Abans de començar, assegura't de tenir coneixements bàsics sobre:
- Comandes bàsiques de Bash.
- Manipulació de cadenes.
- Redirecció i piping.
- Expressions regulars.
Estructura del Projecte
- Lectura del Fitxer de Registre
- Filtratge de Dades
- Generació d'Informes
- Automatització
- Lectura del Fitxer de Registre
Exemple de Fitxer de Registre
Suposem que tenim un fitxer de registre anomenat system.log
amb el següent contingut:
Jan 10 10:00:01 server1 CRON[12345]: (root) CMD (run-parts /etc/cron.daily) Jan 10 10:05:43 server1 sshd[12346]: Failed password for invalid user admin from 192.168.1.100 port 22 ssh2 Jan 10 10:10:22 server1 sshd[12347]: Accepted password for user1 from 192.168.1.101 port 22 ssh2 Jan 10 10:15:01 server1 CRON[12348]: (root) CMD (run-parts /etc/cron.hourly)
Script per Llegir el Fitxer
#!/bin/bash # Comprova si el fitxer de registre existeix LOG_FILE="system.log" if [[ ! -f "$LOG_FILE" ]]; then echo "El fitxer de registre $LOG_FILE no existeix." exit 1 fi # Llegeix el fitxer de registre while IFS= read -r line; do echo "$line" done < "$LOG_FILE"
Explicació del Codi
LOG_FILE="system.log"
: Defineix el nom del fitxer de registre.if [[ ! -f "$LOG_FILE" ]]; then ... fi
: Comprova si el fitxer de registre existeix.while IFS= read -r line; do ... done < "$LOG_FILE"
: Llegeix cada línia del fitxer de registre i la mostra per pantalla.
- Filtratge de Dades
Filtrar per Paraula Clau
Suposem que volem filtrar les línies que contenen la paraula "sshd".
#!/bin/bash LOG_FILE="system.log" if [[ ! -f "$LOG_FILE" ]]; then echo "El fitxer de registre $LOG_FILE no existeix." exit 1 fi # Filtra les línies que contenen "sshd" grep "sshd" "$LOG_FILE"
Explicació del Codi
grep "sshd" "$LOG_FILE"
: Utilitzagrep
per cercar i mostrar les línies que contenen la paraula "sshd".
- Generació d'Informes
Comptar Incidències de SSH
Podem comptar quantes vegades s'ha intentat accedir al sistema via SSH.
#!/bin/bash LOG_FILE="system.log" if [[ ! -f "$LOG_FILE" ]]; then echo "El fitxer de registre $LOG_FILE no existeix." exit 1 fi # Comptar incidències de SSH ssh_attempts=$(grep -c "sshd" "$LOG_FILE") echo "Nombre d'intents d'accés via SSH: $ssh_attempts"
Explicació del Codi
ssh_attempts=$(grep -c "sshd" "$LOG_FILE")
: Utilitzagrep -c
per comptar les línies que contenen "sshd" i emmagatzema el resultat a la variablessh_attempts
.echo "Nombre d'intents d'accés via SSH: $ssh_attempts"
: Mostra el nombre d'intents d'accés via SSH.
- Automatització
Executar l'Anàlisi Automàticament
Podem programar l'execució de l'script per analitzar els registres de manera automàtica utilitzant cron
.
Exemple de Crontab
# Edita el crontab amb la comanda `crontab -e` i afegeix la següent línia: 0 * * * * /path/to/your/script.sh >> /path/to/your/log_analysis_output.log 2>&1
Explicació del Crontab
0 * * * *
: Executa l'script cada hora./path/to/your/script.sh
: Ruta completa a l'script.>> /path/to/your/log_analysis_output.log 2>&1
: Redirigeix la sortida de l'script a un fitxer de registre.
Exercici Pràctic
Descripció
Crea un script que:
- Llegeixi un fitxer de registre.
- Filtri les línies que contenen errors (paraula clau "error").
- Compti el nombre d'errors.
- Generi un informe amb el nombre d'errors i les línies que contenen errors.
Solució
#!/bin/bash LOG_FILE="system.log" if [[ ! -f "$LOG_FILE" ]]; then echo "El fitxer de registre $LOG_FILE no existeix." exit 1 fi # Filtra les línies que contenen "error" error_lines=$(grep -i "error" "$LOG_FILE") # Comptar el nombre d'errors error_count=$(echo "$error_lines" | wc -l) # Generar l'informe echo "Nombre d'errors: $error_count" echo "Línies amb errors:" echo "$error_lines"
Explicació del Codi
error_lines=$(grep -i "error" "$LOG_FILE")
: Filtra les línies que contenen "error" (ignorant majúscules/minúscules) i les emmagatzema a la variableerror_lines
.error_count=$(echo "$error_lines" | wc -l)
: Compta el nombre de línies que contenen errors.echo "Nombre d'errors: $error_count"
: Mostra el nombre d'errors.echo "Línies amb errors:"
: Mostra un missatge indicant que es llistaran les línies amb errors.echo "$error_lines"
: Mostra les línies que contenen errors.
Conclusió
En aquest projecte, hem creat un analitzador de fitxers de registre en Bash que ens permet llegir, filtrar i generar informes sobre els registres del sistema. Hem après a utilitzar comandes bàsiques de Bash, expressions regulars i tècniques d'automatització per analitzar fitxers de registre de manera eficient. Aquest projecte ens prepara per a tasques més avançades d'automatització i monitorització del sistema.
Curs de Programació en Bash
Mòdul 1: Introducció a Bash
- Què és Bash?
- Configuració del teu Entorn
- Navegació Bàsica per la Línia de Comandes
- Entenent la Shell
Mòdul 2: Comandes Bàsiques de Bash
- Operacions amb Fitxers i Directoris
- Comandes de Processament de Text
- Permisos i Propietat de Fitxers
- Redirecció i Piping
Mòdul 3: Conceptes Bàsics de Scripting
Mòdul 4: Scripting Intermedi
Mòdul 5: Tècniques Avançades de Scripting
- Operacions Avançades amb Fitxers
- Gestió de Processos
- Gestió d'Errors i Depuració
- Expressions Regulars
Mòdul 6: Treballant amb Eines Externes
Mòdul 7: Automatització i Programació
- Treballs Cron
- Automatització de Tasques
- Scripts de Còpia de Seguretat i Restauració
- Monitorització i Registre
Mòdul 8: Millors Pràctiques i Optimització
- Escriure Codi Llegible
- Optimització de Scripts en Bash
- Consideracions de Seguretat
- Control de Versions amb Git