Mini-test 9

Fichiers
& donnees

Parsing de date, archives, tests d'existence, recherche par nom et par contenu

6 questions ciblees

$(date +...) tar -czf [ -f ] [ -d ] find / grep -r

Cliquez Voir la solution sur chaque slide

← → naviguer · I indice · S solution · R recommencer

Question 1 / 6 $(date +...) dans un nom

Nommer une sauvegarde du jour

Vous voulez creer une archive backup-AAAA-MM-JJ.tgz (ex. backup-2026-05-13.tgz) du repertoire /var/lib/ircd-hybrid/.
a) Commande complete avec la date du jour :
b) Avec heure et minute (ex. backup-2026-05-13_14-30.tgz) :
man date. Format : %Y annee, %m mois, %d jour, %H heure, %M minute. La substitution de commande : $(date +%Y-%m-%d).
# a) Date du jour AAAA-MM-JJ (tri naturel)
tar -czf backup-$(date +%Y-%m-%d).tgz /var/lib/ircd-hybrid/

# b) Avec heure (utile si plusieurs sauvegardes par jour)
tar -czf backup-$(date +%Y-%m-%d_%H-%M).tgz /var/lib/ircd-hybrid/

Pourquoi %Y-%m-%d ? Le tri alphabetique correspond au tri chronologique. Eviter %d-%m-%Y qui trie mal (les 01-* viennent avant les annees).

Variantes utiles :

date +%Y%m%dT%H%M%S    # format ISO 8601 propre
date +%s              # timestamp Unix (secondes depuis 1970)
date '+%d %B %Y'      # "13 May 2026" lisible humain

Question 2 / 6 tar : c / t / x

Manipuler une archive : creer, lire, extraire

Trois operations classiques avec une archive archives.tgz.
a) Creer archives.tgz a partir de /etc/ircd-hybrid/ :
b) Lister le contenu de archives.tgz sans extraire :
c) Extraire archives.tgz dans le repertoire courant :
man tar. Lettres-cles : -c create, -t tlist (lister), -x extract. Toujours combiner avec -z pour gzip et -f pour le nom de fichier.
# a) Creer (compresse)
tar -czf archives.tgz /etc/ircd-hybrid/

# b) Lister sans extraire
tar -tzf archives.tgz

# c) Extraire dans le repertoire courant
tar -xzf archives.tgz

Decoupage des switches :

Autres formats : -j pour bzip2 (.tbz2), -J pour xz (.txz), --zstd pour zstd.

Question 3 / 6 [ -f ] et [ -d ]

Le fichier (ou le repertoire) existe-t-il ?

Avant d'agir, on verifie ce qui est deja la.
a) Si /etc/ircd-hybrid/ircd.conf n'existe pas, le copier depuis le modele /etc/ircd-hybrid/ircd.conf.default :
b) Si le repertoire /var/log/ircd-hybrid n'existe pas, le creer (avec parents) :
man test ou man bash section CONDITIONAL EXPRESSIONS. -f = fichier ordinaire, -d = repertoire, -e = n'importe quoi. Pour la negation : ! -f ou [ ! -f ... ].
# a) Fichier de config manquant : restaurer depuis le modele
[ -f /etc/ircd-hybrid/ircd.conf ]     || cp /etc/ircd-hybrid/ircd.conf.default /etc/ircd-hybrid/ircd.conf

# b) Repertoire de log a creer si absent
[ -d /var/log/ircd-hybrid ] || mkdir -p /var/log/ircd-hybrid

Cles a connaitre :

Variante moderne avec [[ ]] :

if [[ ! -f /etc/ircd-hybrid/ircd.conf ]]; then
    cp /etc/ircd-hybrid/ircd.conf.default /etc/ircd-hybrid/ircd.conf
fi

Question 4 / 6 find : par nom

Trouver un fichier par son NOM

Chercher des fichiers selon des criteres sur leur nom et leur age.
a) Tous les fichiers .conf quelque part sous /etc/ :
b) Les .log dans /var/log/ modifies dans les 7 derniers jours :
man find. Format : find ou-chercher -critere1 -critere2 .... -name = nom (utiliser les guillemets si jokers), -mtime = age (en jours ; -N = moins de N jours, +N = plus de N jours).
# a) Tous les .conf dans /etc (recursif par defaut)
find /etc -name "*.conf"

# b) Les .log modifies dans les 7 derniers jours
find /var/log -name "*.log" -mtime -7

Autres criteres utiles :

Actions a la fin : -print (defaut), -delete, -exec cmd {} +.

Question 5 / 6 grep : par contenu

Trouver un fichier par son CONTENU

Cette fois on ne sait pas dans quel fichier, mais on sait ce qu'on cherche a l'interieur.
a) Chercher recursivement la chaine port 6667 dans tous les fichiers de /etc/ircd-hybrid/ :
b) Lister uniquement les NOMS de fichiers qui contiennent ce motif (pas les lignes elles-memes) :
man grep. -r recursif (descend dans les sous-repertoires), -l liste seulement les NOMS de fichiers correspondants, -i insensible a la casse, -n affiche les numeros de ligne.
# a) Recherche recursive du motif
grep -r "port 6667" /etc/ircd-hybrid/

# b) Seulement les noms de fichiers qui matchent
grep -rl "port 6667" /etc/ircd-hybrid/
# Equivalent (l et r dans n'importe quel ordre)
grep -l -r "port 6667" /etc/ircd-hybrid/

Options frequentes de grep :

Question 6 / 6 find + grep

Chercher un motif dans certains types de fichiers

Le besoin classique : "trouver tous les fichiers d'un certain type qui contiennent un certain motif".

Listez tous les fichiers .conf sous /etc/ qui contiennent enable_ssl=yes. Une seule commande, en chainant find et grep :

L'option -exec de find lance une commande pour chaque fichier trouve. Le symbole {} represente le fichier courant. Terminer par \; (une commande par fichier) ou + (commande groupee, plus efficace). Alternative : grep -r --include="*.conf".
# Methode classique : find -exec grep
find /etc -name "*.conf" -exec grep -l "enable_ssl=yes" {} +

# Variante avec --include de grep (plus simple a retenir)
grep -rl --include="*.conf" "enable_ssl=yes" /etc/

# Variante avec xargs (utile si on veut piper a autre chose ensuite)
find /etc -name "*.conf" | xargs grep -l "enable_ssl=yes"

Les 3 variantes valent mieux que l'autre ?

Difference {} \; vs {} + :

find . -name "*.txt" -exec grep "foo" {} \;   # 1 grep PAR fichier (lent)
find . -name "*.txt" -exec grep "foo" {} +    # 1 grep avec PLUSIEURS fichiers (rapide)

Bilan

Ce que vous venez de pratiquer

R pour recommencer.

« Retour aux mini-tests