Fichiers, logs et flux en Bash (Audit & Maintenance)
Fichiers, logs et flux en Bash (Audit & Maintenance)

Introduction & Objectifs

Quand on parle d’administration système, les fichiers et les logs sont la mémoire de la machine.
Savoir les lire, les transformer, les filtrer ou les créer proprement fait toute la différence entre un script “qui marche” et un script “de production”.

Ici, tu vas apprendre à :

  • manipuler les flux (STDIN, STDOUT, STDERR) ;
  • lire et écrire dans des fichiers texte, XML, JSON ;
  • créer des logs structurés et rediriger intelligemment la sortie ;
  • automatiser la recherche, l’analyse et la transformation de fichiers.

Tout ce qu’il faut pour automatiser un audit système ou une tâche de maintenance.


⚙️ Anatomie des flux : STDIN, STDOUT, STDERR

Concept

Tout programme Linux échange des données via trois flux standards :

FluxNuméroDescription
STDIN0Entrée standard (ce qu’on “envoie” au programme)
STDOUT1Sortie standard (résultat normal)
STDERR2Sortie d’erreur

C’est grâce à eux qu’on peut “chaîner” des commandes, rediriger des résultats, ou séparer les erreurs.

Exemple / Code

ls /etc /dossier_inexistant >resultats.txt 2>erreurs.txt

Ici :

  • > redirige la sortie normale vers resultats.txt
  • 2> redirige la sortie d’erreur vers erreurs.txt

Pour combiner les deux :

ls /etc /dossier_inexistant &> tout.log

Et pour afficher tout à la fois à l’écran et dans un fichier :

ls /etc | tee sortie.txt

👉 Pourquoi faire ça ?
En production, cela permet de surveiller l’exécution tout en archivant les résultats et erreurs pour analyse post-mortem.


📁 Lecture et écriture de fichiers

Concept

Lire un fichier, ce n’est pas juste faire cat.
En Bash, on peut écrire, ajouter, ou créer des fichiers sans détruire les anciens.

  • > : écrase le fichier
  • >> : ajoute à la fin
  • <<EOF ... EOF : crée un bloc de texte (here-doc)
  • <<< "texte" : injecte une chaîne unique

Exemple / Code

echo "Sauvegarde terminée le $(date)" >> /var/log/backup.log

Ou encore :

cat <<EOF >rapport.txt
Rapport de sauvegarde
Date : $(date)
Fichiers copiés : $(ls /backup | wc -l)
EOF

👉 Pourquoi ?
Les here-doc (<<EOF) permettent de créer des fichiers structurés (rapports, configurations, logs) directement dans le script, sans redirections multiples.


🌲 Parcourir et gérer les fichiers / dossiers

Concept

Pour auditer, il faut parcourir l’arborescence et filtrer ce qu’on veut.
Les outils maîtres : find, xargs, et les boucles while read.

Exemple / Code

Lister tous les fichiers modifiés il y a plus de 7 jours :

find /var/log -type f -mtime +7

Supprimer les logs trop vieux (⚠️ prudence !) :

find /var/log -type f -mtime +30 -print0 | xargs -0 rm -f

Lire un fichier ligne par ligne proprement :

while IFS= read -r line; do
  echo "Traitement : $line"
done < liste.txt

👉 Pourquoi ?
Les boucles while read sont plus sûres que for f in $(cat fichier) car elles respectent les espaces, les caractères spéciaux et les retours à la ligne.


🔎 Recherche et filtrage de contenu

Concept

grep, sed, et awk sont les trois mousquetaires du traitement de texte Linux.
Ils servent à extraire, filtrer, transformer.

Exemple / Code

Rechercher toutes les erreurs dans un log :

grep -i "error" /var/log/syslog

Compter combien de lignes contiennent “failed” :

grep -c "failed" /var/log/auth.log

Afficher uniquement la 3ᵉ colonne d’un CSV :

awk -F, '{print $3}' data.csv

👉 Pourquoi ?
Ces outils évitent de réécrire des boucles Bash : on peut traiter des millions de lignes en une seule commande.


🧰 Transformation & édition en ligne

Concept

sed et awk permettent de modifier des fichiers sans ouvrir d’éditeur.

  • sed = Stream Editor → remplace, supprime, insère.
  • awk = Analyseur de champs → travaille sur les colonnes.

Exemple / Code

Supprimer les lignes vides :

sed -i '/^$/d' fichier.txt

Remplacer “erreur” par “ERROR” :

sed -i 's/erreur/ERROR/g' app.log

Calculer la moyenne d’un fichier CSV (colonne 3) :

awk -F, '{sum+=$3} END {print "Moyenne:", sum/NR}' data.csv

👉 Pourquoi ?
sed et awk rendent ton script auto-réparateur : il peut corriger et reformater des fichiers sans intervention humaine.


🧾 Création & gestion de logs

Concept

Un bon script doit tracer ce qu’il fait.
Deux outils : tee (dupliquer la sortie) et logger (envoyer au système de logs).

Exemple / Code

#!/bin/bash
LOGFILE="/var/log/maintenance.log"

{
  echo "=== Début maintenance $(date) ==="
  apt update && apt upgrade -y
  df -h
  echo "=== Fin maintenance ==="
} 2>&1 | tee -a "$LOGFILE" | logger -t maintenance

👉 Pourquoi ?
On garde une trace locale (LOGFILE) et une trace centralisée (syslog).
C’est une preuve d’exécution pour les audits.


🧮 Analyse de fichiers XML / JSON

Concept

Bash peut lire du XML et du JSON grâce à des outils spécialisés :

  • xmllint pour le XML
  • jq pour le JSON

Exemple / Code

Valider un XML :

xmllint --noout --schema schema.xsd config.xml

Lire une valeur JSON :

jq '.server.ip' config.json

Lister les utilisateurs actifs :

jq '.users[] | select(.active==true) | .name' users.json

👉 Pourquoi ?
Les fichiers de configuration modernes (Ansible, API, logs Cloud) sont souvent en JSON : jq devient donc indispensable pour tout script moderne.


🧠 Robustesse et bonnes pratiques

Concept

Un bon script ne s’arrête pas silencieusement et nettoie après lui.

Active les protections :

set -Eeuo pipefail
trap 'echo "Erreur ligne $LINENO"; exit 1' ERR

Exemple / Code

#!/bin/bash
set -Eeuo pipefail
trap 'echo "Erreur à la ligne $LINENO" >&2' ERR

mkdir -p /tmp/backup
cp /var/log/syslog /tmp/backup/syslog.$(date +%F)

👉 Pourquoi ?
Ces options (set -euo pipefail) empêchent les erreurs silencieuses et rendent les scripts prévisibles.
C’est la frontière entre “script de test” et “outil pro”.


🧩 Cas réels : audit & maintenance

ConceptExemple concret
Audit disquedu -sh /home/* >rapport_disque.txt
Vérification servicessystemctl --failed
Analyse rapide des logs`journalctl -p 3 -xb
Rapport combinéScript qui fait tout ci-dessus + envoi mail

💬 Retour d’expérience du lecteur

Avez-vous déjà automatisé vos audits ?
Quel outil préférez-vous : awk, jq, ou un script Python ?
Partagez vos astuces dans les commentaires ci-dessous !


🧠 Exercices pratiques

1️⃣ Lire un fichier et compter les erreurs2️⃣ Supprimer les lignes vides d’un fichier texte
Utiliser grep et wc -lUtiliser sed avec une regex
3️⃣ Extraire un champ JSON spécifique4️⃣ Créer un log “maintenance” avec tee
Utiliser jq '.nom_du_champ'Rediriger sortie et erreur vers un log

🔗 Recommandations / Autres solutions

🧭 Pour aller plus loin avant ou après ce projet :

Avant de plonger dans les tableaux et structures, jette un œil à ces articles complémentaires :


Tu peux explorer également :

  • ripgrep (rg) : 10× plus rapide que grep
  • fd : alternative moderne à find
  • yq : parseur YAML/JSON combiné
  • xmlstarlet : plus complet que xmllint

Et pour centraliser les logs : logrotate, systemd-journal, ou ELK Stack (Elasticsearch, Logstash, Kibana).


🧩 Conclusion

Les fichiers et logs sont les capteurs de ton système.
Les maîtriser, c’est savoir ce qui se passe avant même qu’un incident ne survienne.
Bash, bien utilisé, devient ton outil d’audit permanent.

Et vous, comment gérez-vous vos flux et logs Bash ?
Partagez vos pratiques en commentaire !


✅ Solutions des exercices

Fichiers, logs et flux en Bash (Audit & Maintenance)

1️⃣

grep -i "error" monfichier.log | wc -l

2️⃣

sed -i '/^$/d' fichier.txt

3️⃣

jq '.nom_du_champ' data.json

4️⃣

commande | tee maintenance.log

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

    Alors tu en pense quoi de cette article ? Dis-moi tous..