Quand on travaille sous Linux, il est fréquent de manipuler des fichiers volumineux ou d’analyser des sorties de commandes complexes. Que ce soit pour lire des fichiers de logs, extraire une information précise ou faire du tri dans des fichiers de configuration, il faut un outil rapide, puissant et flexible.
Le nom grep est l’acronyme de Global Regular Expression Print. Il est disponible par défaut sur toutes les distributions Linux.
PRISE EN MAIN DE GREP
Syntaxe générale
grep [options] [motif] [fichier...]- motif : le texte ou l’expression régulière à rechercher.
- fichier : un ou plusieurs fichiers dans lesquels effectuer la recherche.
- Si aucun fichier n’est précisé,
greplit l’entrée standard (utile avec unpipe|).
Rechercher une chaîne de caractères dans un fichier
grep root /etc/passwdCette commande affiche toutes les lignes du fichier /etc/passwd contenant le mot root. Très utile pour identifier les comptes système ou les utilisateurs ayant des privilèges élevés.
Ignorer la casse (-i)
grep -i ubuntu /etc/os-releaseL’option -i permet d’ignorer les majuscules/minuscules. Ici, qu’on cherche « Ubuntu », « ubuntu » ou « UBUNTU », tout sera trouvé.
Afficher les numéros de ligne (-n)
grep -n bash /etc/passwdAffiche les lignes contenant le mot “bash” avec leurs numéros. Pratique pour situer rapidement l’information dans un fichier.
Compter les lignes correspondantes (-c)
grep -c /bin/bash /etc/passwdRenvoie uniquement le nombre de lignes qui correspondent au motif. Idéal pour avoir une vue d’ensemble sans afficher les résultats.
Afficher seulement le motif (-o)
grep -o 'error' /var/log/syslog
Affiche uniquement les mots « error » trouvés dans le fichier, ligne par ligne, sans le reste du contenu. Très utile avec des expressions régulières pour extraire des données précises (comme des IP ou des ports).
Exclure certaines lignes (-v)
grep -v '^#' /etc/fstab
Affiche toutes les lignes qui ne commencent pas par # (donc qui ne sont pas des commentaires). Combiné avec -E, on peut aussi supprimer les lignes vides :
grep -Ev '(^#|^$)' /etc/fstabRésultat : uniquement les lignes « actives ».
Recherche récursive dans un dossier (-r)
grep -r Listen /etc/apache2/Parcourt tous les fichiers et sous-dossiers du dossier donné à la recherche du mot “Listen”. Utile pour fouiller dans une arborescence.
Rechercher dans des fichiers compressés
Si vous avez des fichiers .gz, .bz2 ou .xz, utilisez les variantes :
zgrep erreur fichier.log.gz
bzgrep erreur fichier.log.bz2
xzgrep erreur fichier.log.xzExpressions régulières complexes (-E)
grep -E '^(UUID|/)' /etc/fstabCe motif affichera les lignes commençant par UUID ou par /. L’option -E permet d’utiliser des regex étendues (comme les groupes, les alternatives |, etc.).
EXEMPLES CONCRETS
Trouver tous les utilisateurs avec le shell /bin/bash
grep '/bin/bash' /etc/passwdCela permet d’afficher uniquement les comptes utilisateurs ayant un accès interactif à un terminal.
Extraire les adresses IP d’un fichier
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' /etc/hostsExtrait uniquement les adresses IPv4. L’option -o affiche uniquement les correspondances, et la regex capture le format standard d’une IPv4.
Rechercher un mot-clé dans tous les fichiers .conf
grep -r "Port" /etc/ssh/*.confAffiche toutes les lignes contenant « Port » dans les fichiers .conf du répertoire SSH.
COMBINER GREP AVEC D’AUTRES OUTILS
Exemple avec lspci
lspci | grep EthernetAffiche uniquement les périphériques réseau de type Ethernet.
Exemple avec ip a pour les IP
ip a | grep inetPermet de récupérer toutes les lignes contenant les adresses IP (v4 ou v6) associées aux interfaces réseau.
Exemple avec journalctl (logs système)
journalctl -xe | grep sshFiltre les journaux système en ne gardant que les événements liés au service SSH.
CONCLUSION
La commande grep sous Linux est bien plus qu’un simple outil de recherche : c’est un véritable assistant d’analyse pour tous les fichiers textes du système. Elle permet de gagner un temps considérable, surtout lorsqu’on l’associe à d’autres commandes ou qu’on exploite la puissance des expressions régulières.
En maîtrisant grep, vous faites un pas important vers une utilisation efficace de la ligne de commande Linux, que ce soit pour l’administration système, le développement ou l’analyse de logs.