Aller au contenu

Manipulation de fichiers et consultation de logs

Un petit serveur de monitoring tourne sur une machine Linux. Son rôle est de surveiller l’état du système (processeur, mémoire, disque) et d’écrire des fichiers de logs — des journaux texte qui enregistrent ce qui se passe sur la machine, ligne par ligne.

En tant qu’administrateur, tu dois régulièrement :

  • consulter les logs pour comprendre ce qui se passe ;
  • organiser les fichiers (les archiver, les renommer, les déplacer) ;
  • extraire de l’information utile à l’aide de redirections.

Dans cette activité, tu vas simuler ce travail. Tu vas créer toi-même les fichiers de logs, puis les manipuler comme si un vrai serveur les avait générés.

À la fin de cette activité, tu devrais être capable de :

  • copier, déplacer, renommer et supprimer des fichiers et des dossiers ;
  • consulter le contenu d’un fichier avec cat, less, head et tail ;
  • choisir la bonne commande de consultation selon la situation ;
  • utiliser les redirections > et >> pour écrire et ajouter du contenu ;
  • combiner des commandes pour extraire de l’information utile ;
  • organiser des fichiers dans une arborescence de projet.
Fenêtre de terminal
cp fichier.txt copie.txt # copier un fichier
cp fichier.txt dossier/ # copier dans un dossier
cp -r dossier/ copie-dossier/ # copier un dossier entier
mv fichier.txt nouveau-nom.txt # renommer un fichier
mv fichier.txt dossier/ # déplacer dans un dossier
CommandeUsage
cat fichierAffiche tout le contenu d’un coup
less fichierAffiche le contenu page par page (quitter avec q)
head fichierAffiche les 10 premières lignes
head -n 5 fichierAffiche les 5 premières lignes
tail fichierAffiche les 10 dernières lignes
tail -n 3 fichierAffiche les 3 dernières lignes
Fenêtre de terminal
echo "texte" > fichier.txt # écrire (écrase le contenu existant)
echo "texte" >> fichier.txt # ajouter à la fin (sans écraser)
head -5 log.txt > resume.txt # extraire les 5 premières lignes dans un fichier

Partie 1 : Mettre en place l’environnement du serveur

Section intitulée « Partie 1 : Mettre en place l’environnement du serveur »

Le serveur organise ses fichiers dans plusieurs dossiers. Crée cette structure :

Fenêtre de terminal
mkdir -p serveur-monitor/logs
mkdir serveur-monitor/rapports
mkdir serveur-monitor/archives
mkdir serveur-monitor/config
cd serveur-monitor

Vérifie avec ls -R.

Un serveur de monitoring écrit ses observations ligne par ligne dans des fichiers. Simule la création de deux fichiers de logs.

Log système du 20 mars :

Fenêtre de terminal
echo "[2026-03-20 08:00] INFO Démarrage du serveur" > logs/sys-2026-03-20.log
echo "[2026-03-20 08:01] INFO Mémoire : 2.1 Go / 8 Go" >> logs/sys-2026-03-20.log
echo "[2026-03-20 08:05] OK CPU : 12%" >> logs/sys-2026-03-20.log
echo "[2026-03-20 09:15] WARN Disque : 81% utilisé" >> logs/sys-2026-03-20.log
echo "[2026-03-20 10:30] OK CPU : 8%" >> logs/sys-2026-03-20.log
echo "[2026-03-20 11:00] INFO Mémoire : 3.4 Go / 8 Go" >> logs/sys-2026-03-20.log
echo "[2026-03-20 12:00] OK CPU : 15%" >> logs/sys-2026-03-20.log
echo "[2026-03-20 14:22] ERROR Disque : 95% utilisé - seuil critique" >> logs/sys-2026-03-20.log
echo "[2026-03-20 14:23] WARN Nettoyage automatique déclenché" >> logs/sys-2026-03-20.log
echo "[2026-03-20 14:30] INFO Disque : 72% après nettoyage" >> logs/sys-2026-03-20.log
echo "[2026-03-20 16:00] INFO Arrêt planifié du serveur" >> logs/sys-2026-03-20.log

Log système du 21 mars :

Fenêtre de terminal
echo "[2026-03-21 08:00] INFO Démarrage du serveur" > logs/sys-2026-03-21.log
echo "[2026-03-21 08:02] OK CPU : 5%" >> logs/sys-2026-03-21.log
echo "[2026-03-21 08:03] INFO Mémoire : 1.8 Go / 8 Go" >> logs/sys-2026-03-21.log
echo "[2026-03-21 09:00] OK CPU : 22%" >> logs/sys-2026-03-21.log
echo "[2026-03-21 10:15] WARN Mémoire : 6.2 Go / 8 Go" >> logs/sys-2026-03-21.log
echo "[2026-03-21 11:30] ERROR Mémoire : 7.9 Go / 8 Go - seuil critique" >> logs/sys-2026-03-21.log
echo "[2026-03-21 11:31] WARN Redémarrage du service monitoring" >> logs/sys-2026-03-21.log
echo "[2026-03-21 11:35] INFO Mémoire : 2.0 Go / 8 Go après redémarrage" >> logs/sys-2026-03-21.log
echo "[2026-03-21 14:00] OK CPU : 18%" >> logs/sys-2026-03-21.log
echo "[2026-03-21 16:00] INFO Arrêt planifié du serveur" >> logs/sys-2026-03-21.log

Fichier de configuration :

Fenêtre de terminal
echo "port=3000" > config/serveur.conf
echo "intervalle=60" >> config/serveur.conf
echo "niveau_log=INFO" >> config/serveur.conf
echo "dossier_logs=./logs" >> config/serveur.conf

Vérifie que tout est en place :

Fenêtre de terminal
ls -R

Affiche le log du 20 mars :

Fenêtre de terminal
cat logs/sys-2026-03-20.log

Le serveur vient de démarrer — vérifie les premières lignes du log du jour :

Fenêtre de terminal
head -n 3 logs/sys-2026-03-21.log

Il est 16 h — vérifie les dernières activités :

Fenêtre de terminal
tail -n 3 logs/sys-2026-03-21.log

Avec less, tu peux naviguer dans un fichier page par page :

Fenêtre de terminal
less logs/sys-2026-03-20.log

Affiche la configuration actuelle du serveur :

Fenêtre de terminal
cat config/serveur.conf

Le log du 20 mars est terminé. Copie-le dans le dossier d’archives :

Fenêtre de terminal
cp logs/sys-2026-03-20.log archives/
ls archives

Par convention, les archives portent le préfixe archive-. Renomme le fichier :

Fenêtre de terminal
mv archives/sys-2026-03-20.log archives/archive-sys-2026-03-20.log
ls archives

Génère un rapport qui combine les informations importantes :

Fenêtre de terminal
echo "=== Rapport du 20 mars 2026 ===" > rapports/rapport-2026-03-20.txt
echo "" >> rapports/rapport-2026-03-20.txt
echo "--- Début de journée ---" >> rapports/rapport-2026-03-20.txt
head -n 3 logs/sys-2026-03-20.log >> rapports/rapport-2026-03-20.txt
echo "" >> rapports/rapport-2026-03-20.txt
echo "--- Fin de journée ---" >> rapports/rapport-2026-03-20.txt
tail -n 3 logs/sys-2026-03-20.log >> rapports/rapport-2026-03-20.txt

Vérifie le résultat :

Fenêtre de terminal
cat rapports/rapport-2026-03-20.txt

Combine les deux logs dans un seul fichier pour avoir une vue d’ensemble :

Fenêtre de terminal
cat logs/sys-2026-03-20.log logs/sys-2026-03-21.log > rapports/historique-complet.txt
cat rapports/historique-complet.txt

Crée un fichier temporaire, puis supprime-le :

Fenêtre de terminal
touch logs/temp-debug.log
ls logs
rm logs/temp-debug.log
ls logs

Dans un vrai projet, le serveur génère les logs automatiquement. Voici à quoi pourrait ressembler un micro-serveur Node.js qui produit les mêmes fichiers que ceux que tu as créés manuellement :

// serveur-monitor.js — exemple illustratif, pas à exécuter
const fs = require("fs");
const http = require("http");
const aujourdhui = new Date().toISOString().split("T")[0];
const fichierLog = `./logs/sys-${aujourdhui}.log`;
function ecrireLog(niveau, message) {
const heure = new Date().toLocaleTimeString("fr-CA", { hour: "2-digit", minute: "2-digit" });
const ligne = `[${aujourdhui} ${heure}] ${niveau.padEnd(5)} ${message}\n`;
fs.appendFileSync(fichierLog, ligne);
}
const serveur = http.createServer((req, res) => {
ecrireLog("INFO", `Requête reçue : ${req.url}`);
res.end("OK");
});
serveur.listen(3000, () => {
ecrireLog("INFO", "Démarrage du serveur sur le port 3000");
});

Quelques observations :

  • fs.appendFileSync fait exactement ce que echo "texte" >> fichier fait dans le terminal : il ajoute une ligne à la fin du fichier.
  • Le nom du fichier contient la date du jour, ce qui correspond à la convention sys-2026-03-20.log que tu as utilisée.
  • Chaque requête HTTP génère une nouvelle ligne dans le log — en production, un tel fichier peut atteindre des milliers de lignes, d’où l’utilité de less, head et tail.