Manipulation de fichiers et consultation de logs
Contexte
Section intitulée « Contexte »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.
Objectifs d’apprentissage
Section intitulée « Objectifs d’apprentissage »À 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,headettail; - 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.
Commandes shell
Section intitulée « Commandes shell »Copier et déplacer
Section intitulée « Copier et déplacer »cp fichier.txt copie.txt # copier un fichiercp fichier.txt dossier/ # copier dans un dossiercp -r dossier/ copie-dossier/ # copier un dossier entiermv fichier.txt nouveau-nom.txt # renommer un fichiermv fichier.txt dossier/ # déplacer dans un dossierConsulter le contenu d’un fichier
Section intitulée « Consulter le contenu d’un fichier »| Commande | Usage |
|---|---|
cat fichier | Affiche tout le contenu d’un coup |
less fichier | Affiche le contenu page par page (quitter avec q) |
head fichier | Affiche les 10 premières lignes |
head -n 5 fichier | Affiche les 5 premières lignes |
tail fichier | Affiche les 10 dernières lignes |
tail -n 3 fichier | Affiche les 3 dernières lignes |
Redirections
Section intitulée « Redirections »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 fichierPartie 1 : Mettre en place l’environnement du serveur
Section intitulée « Partie 1 : Mettre en place l’environnement du serveur »1. Créer la structure de dossiers
Section intitulée « 1. Créer la structure de dossiers »Le serveur organise ses fichiers dans plusieurs dossiers. Crée cette structure :
mkdir -p serveur-monitor/logsmkdir serveur-monitor/rapportsmkdir serveur-monitor/archivesmkdir serveur-monitor/configcd serveur-monitorVérifie avec ls -R.
2. Générer les fichiers de logs
Section intitulée « 2. Générer les fichiers de logs »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 :
echo "[2026-03-20 08:00] INFO Démarrage du serveur" > logs/sys-2026-03-20.logecho "[2026-03-20 08:01] INFO Mémoire : 2.1 Go / 8 Go" >> logs/sys-2026-03-20.logecho "[2026-03-20 08:05] OK CPU : 12%" >> logs/sys-2026-03-20.logecho "[2026-03-20 09:15] WARN Disque : 81% utilisé" >> logs/sys-2026-03-20.logecho "[2026-03-20 10:30] OK CPU : 8%" >> logs/sys-2026-03-20.logecho "[2026-03-20 11:00] INFO Mémoire : 3.4 Go / 8 Go" >> logs/sys-2026-03-20.logecho "[2026-03-20 12:00] OK CPU : 15%" >> logs/sys-2026-03-20.logecho "[2026-03-20 14:22] ERROR Disque : 95% utilisé - seuil critique" >> logs/sys-2026-03-20.logecho "[2026-03-20 14:23] WARN Nettoyage automatique déclenché" >> logs/sys-2026-03-20.logecho "[2026-03-20 14:30] INFO Disque : 72% après nettoyage" >> logs/sys-2026-03-20.logecho "[2026-03-20 16:00] INFO Arrêt planifié du serveur" >> logs/sys-2026-03-20.logLog système du 21 mars :
echo "[2026-03-21 08:00] INFO Démarrage du serveur" > logs/sys-2026-03-21.logecho "[2026-03-21 08:02] OK CPU : 5%" >> logs/sys-2026-03-21.logecho "[2026-03-21 08:03] INFO Mémoire : 1.8 Go / 8 Go" >> logs/sys-2026-03-21.logecho "[2026-03-21 09:00] OK CPU : 22%" >> logs/sys-2026-03-21.logecho "[2026-03-21 10:15] WARN Mémoire : 6.2 Go / 8 Go" >> logs/sys-2026-03-21.logecho "[2026-03-21 11:30] ERROR Mémoire : 7.9 Go / 8 Go - seuil critique" >> logs/sys-2026-03-21.logecho "[2026-03-21 11:31] WARN Redémarrage du service monitoring" >> logs/sys-2026-03-21.logecho "[2026-03-21 11:35] INFO Mémoire : 2.0 Go / 8 Go après redémarrage" >> logs/sys-2026-03-21.logecho "[2026-03-21 14:00] OK CPU : 18%" >> logs/sys-2026-03-21.logecho "[2026-03-21 16:00] INFO Arrêt planifié du serveur" >> logs/sys-2026-03-21.logFichier de configuration :
echo "port=3000" > config/serveur.confecho "intervalle=60" >> config/serveur.confecho "niveau_log=INFO" >> config/serveur.confecho "dossier_logs=./logs" >> config/serveur.confVérifie que tout est en place :
ls -RPartie 2 : Consulter les logs
Section intitulée « Partie 2 : Consulter les logs »1. Voir le contenu complet
Section intitulée « 1. Voir le contenu complet »Affiche le log du 20 mars :
cat logs/sys-2026-03-20.log2. Voir les premières et dernières entrées
Section intitulée « 2. Voir les premières et dernières entrées »Le serveur vient de démarrer — vérifie les premières lignes du log du jour :
head -n 3 logs/sys-2026-03-21.logIl est 16 h — vérifie les dernières activités :
tail -n 3 logs/sys-2026-03-21.log3. Parcourir un fichier long
Section intitulée « 3. Parcourir un fichier long »Avec less, tu peux naviguer dans un fichier page par page :
less logs/sys-2026-03-20.log4. Consulter la configuration
Section intitulée « 4. Consulter la configuration »Affiche la configuration actuelle du serveur :
cat config/serveur.confPartie 3 : Organiser et archiver
Section intitulée « Partie 3 : Organiser et archiver »1. Archiver les logs
Section intitulée « 1. Archiver les logs »Le log du 20 mars est terminé. Copie-le dans le dossier d’archives :
cp logs/sys-2026-03-20.log archives/ls archives2. Renommer un fichier archivé
Section intitulée « 2. Renommer un fichier archivé »Par convention, les archives portent le préfixe archive-. Renomme le fichier :
mv archives/sys-2026-03-20.log archives/archive-sys-2026-03-20.logls archives3. Créer un rapport
Section intitulée « 3. Créer un rapport »Génère un rapport qui combine les informations importantes :
echo "=== Rapport du 20 mars 2026 ===" > rapports/rapport-2026-03-20.txtecho "" >> rapports/rapport-2026-03-20.txtecho "--- Début de journée ---" >> rapports/rapport-2026-03-20.txthead -n 3 logs/sys-2026-03-20.log >> rapports/rapport-2026-03-20.txtecho "" >> rapports/rapport-2026-03-20.txtecho "--- Fin de journée ---" >> rapports/rapport-2026-03-20.txttail -n 3 logs/sys-2026-03-20.log >> rapports/rapport-2026-03-20.txtVérifie le résultat :
cat rapports/rapport-2026-03-20.txt4. Combiner des logs
Section intitulée « 4. Combiner des logs »Combine les deux logs dans un seul fichier pour avoir une vue d’ensemble :
cat logs/sys-2026-03-20.log logs/sys-2026-03-21.log > rapports/historique-complet.txtcat rapports/historique-complet.txt5. Nettoyer les fichiers temporaires
Section intitulée « 5. Nettoyer les fichiers temporaires »Crée un fichier temporaire, puis supprime-le :
touch logs/temp-debug.logls logsrm logs/temp-debug.logls logsPour aller plus loin
Section intitulée « Pour aller plus loin »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écuterconst 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.appendFileSyncfait exactement ce queecho "texte" >> fichierfait 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.logque 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,headettail.