Vous avez déjà passé dix minutes à chercher un fichier dont vous étiez sûr de l’emplacement ? Ou fouillé un fichier de logs en faisant défiler à la main pour trouver une erreur ? Linux a trois outils pour ça, et une fois qu’on les connaît, on ne revient pas en arrière.
Chacun répond à une question différente :
- grep — qu’est-ce qui contient ce texte ?
- find — où est ce fichier ?
- locate — où est ce fichier ? (mais en beaucoup plus vite)
grep — chercher à l’intérieur des fichiers
grep ne cherche pas des fichiers. Il cherche du texte dans des fichiers et vous montre les lignes qui correspondent.
grep "ERREUR" app.log
[09:12] ERREUR Timeout sur la base de données
[11:30] ERREUR Clé API invalide pour le service mail
Toutes les lignes qui ne contiennent pas “ERREUR” disparaissent. Vous avez filtré un fichier de 10 000 lignes en une commande.
Quelques options qui reviennent tout le temps :
grep -i "erreur" app.log # ignorer la casse
grep -n "erreur" app.log # afficher les numéros de ligne
grep -r "TODO" ./src # chercher dans tout un dossier
grep -v "INFO" app.log # tout sauf les lignes INFO
Cas d’usage typiques : déboguer des logs, retrouver où une fonction est appelée dans un projet, filtrer la sortie d’une commande via un pipe.
# Quels processus Python tournent en ce moment ?
ps aux | grep "python"
find — chercher des fichiers avec des critères précis
find parcourt votre système de fichiers en temps réel et vous retourne les fichiers qui correspondent à vos critères. Il est lent sur de très grandes arborescences, mais il est d’une précision redoutable.
find . -name "*.log"
./var/app.log
./var/error.log
./backup/2024-01-15.log
Ce qui rend find puissant, c’est la richesse des critères disponibles :
find . -type f -mtime -7 # fichiers modifiés dans les 7 derniers jours
find . -type f -size +100M # fichiers de plus de 100 Mo
find . -name "*.py" -type f # fichiers Python uniquement (pas les dossiers)
find /etc -name "*.conf" -maxdepth 1 # .conf dans /etc, sans descendre
Et surtout, il peut agir sur chaque fichier trouvé :
find . -name "*.tmp" -delete # supprimer les fichiers temporaires
find . -name "*.py" -exec wc -l {} + # compter les lignes de chaque fichier
Cas d’usage typiques : faire le ménage sur un disque plein, retrouver ce qu’on a modifié aujourd’hui, automatiser des tâches sur un ensemble de fichiers.
locate — chercher des fichiers en un instant
locate fait la même chose que find -name, mais il ne parcourt pas le disque — il consulte une base de données pré-construite. Résultat : la réponse est instantanée, même sur un système avec des millions de fichiers.
locate nginx.conf
/etc/nginx/nginx.conf
/usr/share/doc/nginx/nginx.conf.example
La contrepartie : cette base est mise à jour une fois par jour. Un fichier créé à l’instant n’y figurera pas encore. Si besoin, on force la mise à jour :
sudo updatedb
locate -i "readme" # insensible à la casse
locate -n 5 "*.conf" # limiter à 5 résultats
locate -c "*.py" # juste le nombre de fichiers trouvés
Cas d’usage typiques : retrouver rapidement un fichier de configuration, vérifier où est installé un programme, chercher par nom quand on ne sait pas du tout où regarder.
Lequel utiliser ?
Voilà comment choisir en pratique :
| Vous cherchez... | Utilisez |
|---|---|
| Du texte dans un fichier | grep |
| Du texte dans tous les fichiers d’un projet | grep -r |
| Un fichier par son nom, rapidement | locate |
| Un fichier créé très récemment | find |
| Des fichiers selon leur taille ou leur date | find |
| Faire une action sur les fichiers trouvés | find -exec |
En pratique, les trois se combinent souvent. find ou locate pour cibler les bons fichiers, grep pour chercher dedans :
# Chercher "deprecated" dans tous les fichiers Python modifiés cette semaine
find . -name "*.py" -mtime -7 | xargs grep "deprecated"
# Même chose mais en passant par locate
locate "*.py" | xargs grep -l "deprecated"
Pour aller plus loin
Ces trois outils ont chacun leur article dédié sur ce site, avec des exemples approfondis et des exercices :
Si vous deviez n’en retenir qu’un pour commencer : grep. C’est celui que vous utiliserez le plus souvent, et sa logique — filtrer des lignes selon un motif — se retrouve dans beaucoup d’autres outils Unix.
Commentaires
Aucun commentaire pour l'instant. Soyez le premier !
Laisser un commentaire