Skip to main content

3.2 — Rechercher avec grep, rg, find et locate

Rechercher du texte avec grep

grep 'erreur' application.log
grep -i 'erreur' application.log       # ignorer la casse
grep -n 'erreur' application.log       # afficher les numéros de ligne
grep -v '^#' fichier.conf              # exclure les commentaires
grep -RIn '192.168.25.1' /etc           # recherche récursive

Afficher du contexte :

grep -n -C 3 'failed' service.log       # 3 lignes avant et après
grep -n -A 5 'failed' service.log       # 5 lignes après
grep -n -B 2 'failed' service.log       # 2 lignes avant

Expressions régulières étendues :

grep -En 'error|failed|denied' application.log
grep -E '^[0-9]{4}-[0-9]{2}-[0-9]{2}' application.log

Rechercher rapidement avec rg

rg désigne ripgrep. Il est très rapide et ignore par défaut certains fichiers cachés ou exclus par .gitignore.

rg 'motif' .
rg -n -i 'motif' /etc
rg --hidden 'motif' .
rg -g '*.yml' 'password' .

Il n'est pas installé par défaut partout. Utiliser grep -R comme solution universelle.

Rechercher des fichiers avec find

find . -type f -name '*.log'
find /var/log -type f -iname '*error*'
find . -type d -name 'cache'
find . -type f -size +100M -print
find . -type f -mtime -7 -print       # modifiés depuis moins de 7 jours
find . -maxdepth 2 -type f -print

Exécuter une commande sur chaque résultat :

find . -type f -name '*.conf' -exec file {} \;

Pour les noms contenant des espaces ou retours à la ligne, préférer des séparateurs nuls :

find . -type f -print0 | xargs -0 file

Recherche indexée avec locate

locate sshd_config
sudo updatedb

locate interroge une base mise à jour périodiquement : il est rapide, mais peut afficher un fichier qui vient d'être supprimé ou manquer un fichier récent.

Rechercher une commande disponible

command -v ssh
type -a python

Toujours délimiter précisément une recherche sous / : elle peut être lente, rencontrer des permissions refusées et parcourir des systèmes de fichiers distants.