Polarys

Recherche & filtres

Chercher dans les fichiers avec grep

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 password cherche "Failed" dans le fichier "password".
  • Confondre grep -r "motif" /etc/ (cherche dans /etc/) et grep "motif" /etc/* (cherche dans les fichiers directs, pas les sous-dossiers).
  • Ne pas utiliser -i et 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 -v inverse la recherche (lignes qui ne contiennent PAS le motif).
  • grep -C 2 affiche 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.

Quiz de validation

Quiz - 6 questions

1. Quelle option de grep rend la recherche insensible à la casse ?

2. Que fait 'grep -v "DEBUG" application.log' ?

3. Comment chercher le mot 'glpi' dans tous les fichiers .conf du dossier /etc/ et ses sous-dossiers ?

4. Vous cherchez 'FATAL ERROR' dans un log et voulez voir les 3 lignes suivantes pour avoir le contexte. Quelle option utilisez-vous ?

5. Quelle commande compte le nombre de lignes contenant '404' dans access.log ?

6. Un technicien tape 'grep Failed password /var/log/auth.log'. Quel est le problème ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.