Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 11

Trouver fichiers et texte (find, grep)

Recommended resources

Bonjour ! Dans la leçon précédente, vous avez appris à modifier des fichiers directement depuis le terminal avec l'éditeur nano. C'est une compétence essentielle. Mais que faire lorsque vous ne savez pas où se trouve un fichier de configuration, ou que vous devez trouver une ligne spécifique contenant une erreur dans des dizaines de fichiers de log ?

Bienvenue dans cette nouvelle leçon, où nous allons répondre à ces questions. L'objectif d'aujourd'hui est de maîtriser deux des commandes les plus puissantes de l'arsenal d'un administrateur systèmes : find et grep.

  • find vous permettra de rechercher des fichiers et des répertoires sur tout votre système en fonction de critères précis (nom, taille, date de modification, propriétaire, etc.).
  • grep vous servira à chercher des motifs de texte à l'intérieur même de ces fichiers.

Pour un administrateur, ces outils sont utilisés quotidiennement pour le diagnostic, la sécurité et l'automatisation. À la fin de cette leçon, vous saurez comment localiser n'importe quel fichier et comment extraire des informations précises de fichiers texte, des compétences indispensables pour le dépannage.

1. find : Retrouver des fichiers et des dossiers

Commençons par find. Cette commande parcourt l'arborescence de votre système pour trouver des fichiers qui correspondent aux critères que vous spécifiez. Sa puissance réside dans la multitude d'options qu'elle propose.

La vidéo suivante, de la chaîne Linuxtricks, est un excellent guide qui couvre les usages les plus courants de find. Nous allons la visionner en plusieurs parties.

Recherche par nom et par type

Les critères de recherche les plus simples sont le nom et le type (fichier, dossier, etc.).

find : Chercher des fichiers avec précision !

Cette première partie de la vidéo vous montrera comment utiliser find pour des recherches simples basées sur le nom et le type, y compris l'utilisation de caractères jokers.

Regardez la vidéo de 01:19 à 06:17. Concentrez-vous sur la syntaxe de base et les options suivantes : -name : pour rechercher par nom. -iname : pour une recherche insensible à la casse (majuscules/minuscules). -type d : pour ne trouver que les répertoires (directories). -type f : pour ne trouver que les fichiers (files).

Exercice pratique 1 : Premières recherches

Maintenant, à vous de jouer dans votre machine virtuelle.

  1. Allez dans votre répertoire personnel : cd ~
  2. Créez quelques fichiers pour nos tests :
    touch rapport.txt analyse.log RAPPORT.PDF
    mkdir archives
    
  3. Trouvez tous les fichiers qui se terminent par .txt dans votre répertoire personnel. Le . indique le répertoire courant.
    find . -name "*.txt"
    
  4. Trouvez le fichier rapport.pdf. Notez que la commande suivante ne trouvera rien car find est sensible à la casse par défaut.
    find . -name "rapport.pdf"
    
  5. Utilisez l'option correcte pour trouver RAPPORT.PDF sans vous soucier de la casse :
    find . -iname "rapport.pdf"
    
  6. Listez uniquement le répertoire archives que vous avez créé :
    find . -type d -name "archives"
    

Recherche par taille, date et propriétaire

En administration système, on doit souvent trouver des fichiers en fonction de métadonnées plus complexes, comme la taille (pour libérer de l'espace disque), la date de modification (pour voir les changements récents sur un fichier de configuration) ou le propriétaire (pour des raisons de sécurité).

find : Chercher des fichiers avec précision !

Continuons avec la même vidéo pour explorer ces critères de recherche plus avancés.

Regardez la vidéo de 06:17 à 15:01. Portez une attention particulière aux options suivantes : -size : pour rechercher par taille (ex: +10M pour plus de 10 mégaoctets). -mtime : pour rechercher par date de modification, en jours (modification time). -1 signifie "modifié il y a moins d'un jour". -user et -group : pour trouver les fichiers appartenant à un utilisateur ou un groupe spécifique.

Ces options sont extrêmement utiles. Par exemple, find / -size +1G vous montrera tous les fichiers de plus de 1 Go sur votre système, un bon point de départ pour faire du ménage.


2. grep : Chercher du texte dans les fichiers

Maintenant que nous savons trouver les fichiers, voyons comment regarder à l'intérieur. C'est le rôle de grep. Il lit des fichiers (ou une entrée de données) ligne par ligne et affiche uniquement celles qui contiennent un motif de recherche que vous spécifiez.

Les bases de grep

La vidéo suivante, du même auteur, explique très clairement le fonctionnement de grep.

CMDécouverte : grep pour afficher les lignes correspondant à un motif donné

Cette vidéo vous présente les bases de grep, comment l'utiliser sur un fichier, et comment l'associer à d'autres commandes via un 'pipe' (|).

Regardez la vidéo du début jusqu'à 04:38. Notez les options suivantes : -i : pour ignorer la casse. -n : pour afficher le numéro de la ligne correspondante.

Exercice pratique 2 : Chercher dans un fichier de configuration

Les fichiers de configuration de Linux se trouvent principalement dans le répertoire /etc. Entraînons-nous sur l'un d'eux.

  1. Le fichier /etc/ssh/sshd_config contrôle le service de connexion à distance SSH. Cherchons la ligne qui définit le port d'écoute.
    grep "Port" /etc/ssh/sshd_config
    
  2. La recherche est sensible à la casse. Essayez avec "port" en minuscules et vous verrez que la commande ne retourne rien.
  3. Maintenant, faites la même recherche en ignorant la casse et en affichant le numéro de la ligne :
    grep -in "port" /etc/ssh/sshd_config
    
    Le numéro de ligne est très utile si vous souhaitez ensuite ouvrir le fichier avec nano pour le modifier.

Recherche récursive et inversion

Deux des options les plus utiles de grep sont la recherche récursive (-r), pour fouiller tout un répertoire, et l'inversion (-v), pour afficher tout sauf ce qui correspond.

CMDécouverte : grep pour afficher les lignes correspondant à un motif donné

Cette partie de la vidéo montre comment utiliser ces options avancées. L'exemple sur le filtrage des commentaires d'un fichier de configuration est une technique que vous utiliserez très souvent.

Regardez les sections de 07:14 à 08:24 (pour -r) et de 10:09 à 12:28 (pour -v).

Exercice pratique 3 : Filtrer un fichier de configuration

Les fichiers de configuration sont souvent remplis de commentaires (lignes commençant par #) et de lignes vides. Pour voir rapidement les paramètres actifs, grep -v est parfait.

Affichez les paramètres actifs du fichier sshd_config en filtrant les commentaires et les lignes vides. Pour cela, on utilise une expression régulière simple : ^# signifie "un # en début de ligne" et ^$ signifie "une ligne vide". On combine les deux recherches avec l'option -e.

grep -v -e "^#" -e "^$" /etc/ssh/sshd_config

Le résultat est une vue claire et concise de la configuration active de votre serveur SSH.


3. Le duo de choc : find + grep

La véritable puissance se révèle lorsque l'on combine ces deux commandes. Le scénario est classique : "trouver tous les fichiers de log dans un certain répertoire qui contiennent le mot 'error'".

Pour cela, on utilise l'option -exec de find, qui permet d'exécuter une autre commande (comme grep) sur chaque fichier trouvé.

find : Chercher des fichiers avec précision !

Pour comprendre comment find peut exécuter des commandes, regardez cette section de la première vidéo.

Regardez la vidéo de 15:01 à 20:08. Concentrez-vous sur la syntaxe de -exec. Notez l'utilisation de {} pour représenter le fichier trouvé et de \; pour marquer la fin de la commande.

La syntaxe de base est :
find [chemin] [critères] -exec [commande] {} \;

Cela exécute la [commande] une fois pour chaque fichier trouvé. Une version plus moderne et efficace utilise + au lieu de \;. Elle regroupe les fichiers trouvés pour lancer la commande une seule fois, ce qui est beaucoup plus rapide.

find [chemin] [critères] -exec [commande] {} +

L'image ci-dessous montre des exemples complexes, dignes d'un administrateur système expérimenté. Regardez le deuxième exemple, il combine find et grep exactement comme nous le souhaitons.

Advanced Linux 'find' Command Examples
Cette image illustre des usages avancés de `find`. Le deuxième exemple recherche tous les fichiers de configuration (`.conf` ou `.cfg`) dans `/var` et utilise `grep` pour trouver le mot "database" à l'intérieur, en utilisant la syntaxe efficace avec `+`.

Exercice pratique 4 : Dépanner un service

Mettons cela en pratique avec un cas de dépannage typique.

Cherchez toutes les occurrences du mot "error" (ignorant la casse) dans tous les fichiers se terminant par .log dans le répertoire /var/log. Comme vous fouillez dans des répertoires système, vous aurez besoin de sudo.

sudo find /var/log -name "*.log" -exec grep -i "error" {} +

Cette seule ligne de commande peut vous faire gagner un temps précieux en pointant directement vers les fichiers de log pertinents et les lignes d'erreur lors d'un incident.


Conclusion

Félicitations ! Vous venez d'acquérir deux outils fondamentaux qui décuplent votre efficacité en ligne de commande. Savoir trouver ce que l'on cherche est la base de toute investigation sur un système.

Points clés à retenir :

  • find recherche des fichiers par critères : -name, -type, -size, -mtime, -user.
  • grep recherche du texte dans les fichiers, avec des options clés : -i (insensible à la casse), -n (numéros de ligne), -r (récursif), -v (inverser la recherche).
  • L'option -exec de find permet de combiner les deux commandes pour des recherches puissantes : find . -name "*.conf" -exec grep "mot_cle" {} +.

Maintenant que vous savez où et comment chercher des fichiers, il serait utile de comprendre la logique d'organisation du système. Pourquoi les logs sont-ils dans /var/log et les configurations dans /etc ?

Ce sera le sujet de notre prochaine leçon, où nous découvrirons la Structure Standard des Répertoires Linux (FHS), le plan qui organise tout système Linux.