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.