Question I
Voici le script Bash capable d’effectuer les taches exigées:
#!/bin/bash
# Vérifie si un argument a été fourni
if [ $# -eq 0 ]; then
echo "Erreur : Aucun répertoire spécifié."
exit 1
fi
# Récupère le répertoire passé en argument
repertoire="$1"
# Vérifie si le répertoire existe
if [ ! -d "$repertoire" ]; then
echo "Erreur : Le répertoire '$repertoire' n'existe pas."
exit 1
fi
# Compte le nombre total de fichiers et de sous-répertoires (de manière récursive)
nombre_fichiers=$(find "$repertoire" -type f | wc -l)
nombre_sous_repertoires=$(find "$repertoire" -type d | wc -l)
# Calcule la taille totale des fichiers (en octets)
taille_totale=$(du -sb "$repertoire" | cut -f1)
# Affiche les résultats
echo "Nombre de fichiers : $nombre_fichiers"
echo "Nombre de sous-répertoires : $nombre_sous_repertoires"
echo "Taille totale des fichiers : $taille_totale octets"
# Génère un fichier de log
date_heure=$(date +"%Y-%m-%d %H:%M:%S")
echo "Date et heure d'exécution : $date_heure" > [Link]
echo "Nombre de fichiers : $nombre_fichiers" >> [Link]
echo "Nombre de sous-répertoires : $nombre_sous_repertoires" >> [Link]
echo "Taille totale des fichiers : $taille_totale octets" >> [Link]
echo "Le fichier de log a été généré dans le répertoire courant."
Voici l’exécution du script ci-haut en image:
Voici le fichier log généré:
Question II
Voici le script Bash nous permettant de résoudre ce problème:
#!/bin/bash
# Répertoire contenant les fichiers logs
repertoire_logs="/chemin/vers/votre/repertoire/logs"
# Vérifie si le répertoire existe
if [ ! -d "$repertoire_logs" ]; then
echo "Erreur : Le répertoire '$repertoire_logs' n'existe pas."
exit 1
fi
# Archive les fichiers de logs plus anciens qu'un mois
archive_date=$(date -d "1 month ago" +%Y-%m-%d)
archive_fichier="logs_archive_$archive_date.[Link]"
find "$repertoire_logs" -type f -name "*.log" -mtime +30 -exec tar -czvf "$archive_fichier"
{} +
# Analyse les fichiers de logs restants pour extraire les lignes contenant "ERROR"
nombre_erreurs=0
for fichier_log in "$repertoire_logs"/*.log; do
if grep -q "ERROR" "$fichier_log"; then
grep "ERROR" "$fichier_log" >> errors-$(date +%Y-%m-%d).log
nombre_erreurs=$((nombre_erreurs + $(grep -c "ERROR" "$fichier_log")))
fi
done
# Affiche le nombre total d'erreurs
echo "Nombre total d'erreurs : $nombre_erreurs"
echo "Le fichier d'archive des logs est : $archive_fichier"
echo "Les lignes d'erreurs ont été enregistrées dans errors-$(date +%Y-%m-%d).log"
L’image ci-dessous est l’illustration de l’exécution de ce script:
Il est à noter que le système installé est client, donc à l’occurrence ne peut
offrir de services tel un système serveur (ex; win server, linux server...)