GNU/Linux >> Tutoriels Linux >  >> Linux

les bases de grep

Cet article présente quelques outils, en particulier grep , un outil de ligne de commande Linux® que vous pouvez utiliser pour rechercher des répertoires ou des fichiers correspondant à des expressions régulières spécifiées.

Qu'est-ce que grep ?

Réponse officielle :

grep recherche les fichiers d'entrée nommés (ou l'entrée standard si vous ne spécifiez pas de fichier ou utilisez un seul trait d'union (- ) comme nom de fichier) pour les lignes contenant une correspondance avec le motif donné. Par défaut, grep imprime les lignes correspondantes.

Meilleure réponse :

Rechercher un fichier, un répertoire ou une sortie pour quelque chose de spécifique, semblable à Ctrl + f sous Windows®. Utilisez cette fonction pour cibler exactement ce dont vous avez besoin.

Les bases

Souvent, le moyen le plus simple de montrer le fonctionnement d'une commande consiste à utiliser des exemples.

Vous pouvez voir tous les utilisateurs dans /etc/passwd fichier avec la commande suivante :

# cat /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql❌27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
sher❌1002:1002::/home/sher:/bin/bash

Utilisation de grep , vous pouvez affiner cette liste pour trouver un seul utilisateur.

Rechercher un utilisateur spécifique :

Répertorier les utilisateurs mais filtrer la sortie en affichant uniquement la ligne avec sher dedans.

# cat /etc/passwd | grep 'sher'
sher❌1002:1002::/home/sher:/bin/bash

Ou, trouvez le même utilisateur avec une seule commande :

# grep 'sher' /etc/passw
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Dans l'exemple suivant, recherchez tous les utilisateurs disposant d'un accès bash :

# grep 'bash' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Drapeaux

Comme la plupart des commandes Linux, grep utilise des drapeaux, généralement une ou plusieurs lettres précédées d'un ou plusieurs tirets, pour ajouter des fonctionnalités supplémentaires.

-v  :Afficher tout ce qui n'inclut pas le modèle de recherche spécifié :

# grep -v 'nologin' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

-i  :Afficher les correspondances en ignorant la casse, ce qui est utile lorsque vous ne savez pas exactement ce dont vous avez besoin :

# grep -i 'SHER' /etc/passwd
sher❌1002:1002::/home/sher:/bin/bash

Rechercher plusieurs modèles

grep utilise le symbole pipe (| ) pour signifier ou vous permettant de rechercher plus d'une chose à la fois. Utilisez l'une des méthodes suivantes pour rechercher plusieurs éléments à la fois :

\ :Échappe le caractère suivant, un tube (| ) lui permettant de fonctionner comme ou :

# grep 'sher\|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

-E :Interprète les caractères spéciaux, tels que | comme ou :

# grep -E 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Le egrep commande fait la même chose :

# egrep 'sher|rack' /etc/passwd
rack❌1001:1001::/home/rack:/bin/bash
sher❌1002:1002::/home/sher:/bin/bash

Combiner des drapeaux

Vous pouvez utiliser différents drapeaux en combinaison pour affiner une recherche.

L'exemple suivant montre tous les utilisateurs qui ne sont pas her ou rack , quelle que soit la casse du modèle de contenu du fichier :

# egrep -vi 'SHER|RACK' /etc/passwd

Exemples pratiques

Les sections suivantes couvrent d'autres utilisations de grep et introduisez d'autres commandes utiles.

Ignorer les commentaires

Sous Linux, vous commentez les lignes en ajoutant le symbole dièse (# ) au début de la ligne. De cette façon, vous pouvez ajouter vos propres notes, et les scripts ou programmes ignorent les commentaires et n'exécutent pas ces lignes.

Pour afficher les fichiers en ignorant ces commentaires, utilisez la commande suivante :

# grep -v ^'#' /file

Vous pouvez même exécuter un grep au-dessus d'un autre grep commande.

Par exemple, répertoriez un fichier en ignorant les lignes commentées, puis recherchez quelque chose de spécifique :

# grep -v ^'#' /file | grep 'hello'

Historique des recherches

La plupart des systèmes Linux conservent un journal des commandes exécutées, auquel vous pouvez accéder avec la commande history . Lorsque vous combinez history avec grep , vous pouvez très efficacement enquêter sur ce qui a été exécuté sur votre système jusqu'à présent.

Vérifiez le passwd commandes run et autres commandes contenant le passwd motif :

# history | grep 'passwd'

Rechercher des commandes exécutées un jour spécifique :

# history | grep '2021-05-10'

Vérifiez quelles commandes ont été exécutées à un moment précis :

# history | grep '2021-05-10 11:00:'

Vérifier les ports et la connexion root

Lister le trafic Web exécuté sur les ports 80 et 443 :

# netstat -plnt | egrep '80|443'

Vous pouvez utiliser ^ dans un grep commande pour afficher uniquement les lignes commençant par votre modèle de recherche.

Par exemple, exécutez la commande suivante pour vérifier si le système autorise les connexions root :

# grep ^'Permit' /etc/ssh/sshd_config

Recherche dans les journaux avec tête et queue

Utilisez top pour afficher les dix premières lignes du journal des tentatives de connexion :

# head /var/log/secure

Utiliser tail pour afficher les lignes à la fin du journal des tentatives de connexion :

# tail /var/log/secure

Utilisez le last commande pour afficher les dix premières lignes des connexions les plus récentes :

# last | head -10

Utilisez le tail -f pour voir un fichier grandir en temps réel. Par exemple, vous pouvez voir les tentatives de connexion les plus récentes et surveiller les tentatives en cours. Si quelqu'un essaie de se connecter, vous pouvez le voir tel quel avec la commande suivante :

# tail -f /var/log/secure
Ctrl + C to exit

Autres outils

Vous pouvez expérimenter vos nouvelles compétences en utilisant les outils de cette section.

vim ou nano

vi , vim , et nano sont les éditeurs de texte les plus courants sous Linux. Vous pouvez les utiliser pour modifier un fichier, comme si vous utilisiez le Bloc-notes sous Windows.

Ouvrez et créez un nouveau fichier, testez :

# vim /test
Actions Séquence de touches Explication
Pour commencer à saisir un nouveau contenu : i Préparer l'insertion de texte
Pour quitter sans enregistrer : Échap :q! Échapper au mode d'insertion et quitter
Pour quitter et enregistrer : Échap :wq! Échapper au mode d'insertion, écrire et quitter

écho

echo est une commande simple qui dit à Linux de répéter ce que vous venez de taper. Ceci est efficace pour tester grep commandes sans créer au préalable un nouveau fichier.

Par exemple, faites bonjour afficher :

# echo 'hello'
hello

Afficher bonjour et recherchez les lettres du milieu :

# echo 'hello' | grep 'ell'
hello

Vous pouvez même utiliser echo pour afficher plusieurs lignes en utilisant -e et \n pour ajouter de nouvelles lignes.

Afficher bonjour et oh sur des lignes séparées :

# echo -e 'hi\nho'
hi
ho

Afficher bonjour et oh sur des lignes distinctes et recherchez salut :

# echo -e 'hi\nho' | grep 'hi'
hi

sed

Comme grep , sed a de nombreuses utilisations, mais vous utilisez principalement cette commande pour rechercher et remplacer le contenu spécifié. Voici quelques exemples de base sur la manière de distinguer des lignes spécifiques :

Tout d'abord, utilisez vim pour créer un fichier :

# vim /test

Lorsque l'éditeur s'ouvre, saisissez les lignes suivantes :

1 Hi
2 How
3 Are
4 You

Affichez le nouveau fichier :

# cat test
1 Hi
2 How
3 Are
4 You

Utilisez sed pour tout renvoyer sauf la première ligne :

# sed 1d test
2 How
3 Are
4 You

Renvoie uniquement la première ligne :

# sed 1q test

ou

# sed '1!d' test
1 Hi

Renvoyez uniquement les deuxième à quatrième lignes :

# sed '2,4!d' test
2 How
3 Are
4 You

Conclusion

Il existe de nombreux autres outils que vous pouvez utiliser, tels que awk , cut , sort , xargs ,etc. Maintenant que vous savez comment créer un fichier en utilisant echo , vous pouvez les expérimenter plus efficacement.


Linux
  1. Différence entre /bin/false et /sbin/nologin

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Comment faire écho à un coup ! ?

  4. L'espace est-il autorisé entre # ! Et /bin/bash à Shebang ?

  5. Pourquoi /bin/sh pointe-t-il vers /bin/dash et non /bin/bash ? ?

Linux – Fusionner /usr/bin et /usr/sbin dans /bin (gnu/linux) ?

Exécutez la commande bash sur le pipeline jenkins

cmake --version pointe vers /usr/bin/cmake tandis que cmake pointe vers /usr/local/bin

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

Différence entre /bin et /usr/bin

chroot échoue - impossible d'exécuter la commande `/bin/bash' :aucun fichier ou répertoire de ce type