# 3.2 - Rechercher avec grep, rg, find et locate

## Rechercher du texte avec grep

```bash
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 :

```bash
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 :

```bash
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`.

```bash
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

```bash
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 :

```bash
find . -type f -name '*.conf' -exec file {} \;
```

Pour les noms contenant des espaces ou retours à la ligne, préférer des séparateurs nuls :

```bash
find . -type f -print0 | xargs -0 file
```

## Recherche indexée avec locate

```bash
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

```bash
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.