Chercher dans les fichiers avec grep
En helpdesk, vous passez une bonne partie du temps à analyser des logs : erreurs Apache, authentifications échouées, plantages GLPI... grep est votre meilleur allié : il cherche des lignes correspondant à un motif dans un ou plusieurs fichiers, en quelques millisecondes même sur des fichiers de plusieurs gigaoctets.
La syntaxe de base
grep "motif" fichier
grep "erreur" /var/log/syslog
Les options indispensables
grep -i "error" error.log # -i : insensible à la casse (Error, ERROR, error)
grep -n "failed" auth.log # -n : affiche le numéro de ligne
grep -r "mot_de_passe" /etc/ # -r : récursif dans un dossier
grep -v "DEBUG" application.log # -v : inverse (affiche les lignes qui NE contiennent PAS)
grep -c "404" access.log # -c : compte le nombre de lignes
grep -l "glpi" /etc/*.conf # -l : liste les fichiers qui contiennent
grep -A 3 "FATAL" error.log # -A 3 : affiche 3 lignes Après chaque résultat
grep -B 2 "FATAL" error.log # -B 2 : affiche 2 lignes Avant
grep -C 2 "FATAL" error.log # -C 2 : context (avant + après)
Expressions régulières basiques
grep "^192.168" access.log # ^ : commence par
grep ".php$" access.log # $ : se termine par ($ = fin, \ = échappe le point)
grep "err[eo]r" log.txt # [eo] : 'e' ou 'o'
grep -E "failed|error|warning" log # -E : OU logique avec |
Cas concret
Un utilisateur signale qu'il ne peut plus se connecter au serveur depuis hier matin. Vous analysez les logs d'authentification :
# Chercher les échecs d'authentification
grep -i "failed password" /var/log/auth.log | tail -20
# Résultat typique :
# Jun 19 09:14:23 srv-glpi sshd[1234]: Failed password for alice from 10.0.0.5 port 48210 ssh2
# Jun 19 09:14:25 srv-glpi sshd[1235]: Failed password for alice from 10.0.0.5 port 48211 ssh2
# Compter les tentatives par IP
grep "Failed password" /var/log/auth.log | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq -c | sort -rn
# Chercher si le compte est verrouillé
grep -i "alice" /var/log/auth.log | grep -i "lock\|invalid"
graph LR LOG["Fichier log<br/>(millions de lignes)"] -->|"grep -i 'failed'"| FILTER["Lignes filtrées<br/>(échecs seulement)"] FILTER -->|"grep -oE IP"| IPS["Adresses IP<br/>extraites"] IPS -->|"sort | uniq -c"| COUNT["Comptage<br/>par IP"]
Erreurs fréquentes
- Oublier les guillemets autour du motif quand il contient des espaces ou caractères spéciaux :
grep Failed passwordcherche "Failed" dans le fichier "password". - Confondre
grep -r "motif" /etc/(cherche dans /etc/) etgrep "motif" /etc/*(cherche dans les fichiers directs, pas les sous-dossiers). - Ne pas utiliser
-iet rater des résultats à cause de la casse : "Error", "error", "ERROR" sont différents sans-i.
À retenir
grep -i -n "erreur" fichier→ cherche sans casse et affiche les numéros de ligne.grep -vinverse la recherche (lignes qui ne contiennent PAS le motif).grep -C 2affiche le contexte autour de chaque résultat : indispensable pour analyser des logs.
Mini-exercice
Tapez grep -i "error" /var/log/syslog | tail -10 pour voir les 10 dernières erreurs système. Si le fichier n'existe pas, essayez /var/log/kern.log ou journalctl -p err --no-pager | tail -10.