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.