La plupart des utilisateurs novices des systèmes Unix, en particulier Linux, ne sont pas familiarisés avec les opérateurs de ligne de commande de base utilisés dans ce système d'exploitation. Examinons de plus près les fonctions et l'utilisation des opérateurs find et grep.
Utilisation des commandes Find et Grep sous Linux.
TROUVER
La commande Linux find est un utilitaire de ligne de commande permettant de parcourir la hiérarchie des fichiers. Il peut être utilisé pour rechercher des fichiers et des répertoires et effectuer des opérations ultérieures avec eux. Il prend en charge la recherche par fichier, dossier, nom, date de création, date de modification, propriétaire et autorisations. À l'aide de -exec, d'autres commandes UNIX peuvent être exécutées pour les fichiers ou les dossiers trouvés. Syntaxe:
$ find [où commencer la recherche] [expression détermine ce qu'il faut trouver] [-options] [ce qu'il faut trouver]
Options:
- -exec - le fichier requis qui répond aux critères ci-dessus et renvoie 0 comme état de sortie pour une exécution réussie de la commande;
- -ok - fonctionne de la même manière que -exec, sauf que l'utilisateur est d'abord invité;
- -inum N - recherche avec le nombre "N";
- -links N - recherche avec les liens "N";
- -name demo - recherche les fichiers spécifiés dans “demo”;
- -newer file - recherche les fichiers qui ont été modifiés / créés après “fichier”;
- -perm octal - recherche si la résolution est octale;
- -print - affiche le chemin d'accès aux documents trouvés en utilisant les autres critères;
- -empty - recherche de documents et de répertoires vides;
- -size + N / -N - blocs de recherche "N"; "N" et "c" peuvent être utilisés pour mesurer la taille en caractères; "+ N" signifie une plus grande taille de "N" blocs et "-N" signifie une plus petite taille de "N" blocs;
- -nom d'utilisateur - recherche des documents appartenant au nom d'utilisateur ou à l'identifiant "nom";
- \ (expr \) - Vrai si "expr" est vrai; Utilisé pour regrouper les critères avec OR ou AND.
Grep
La commande grep est utilisée pour rechercher des fichiers. La fonction signifie “impression globale d'expressions régulières” et constitue l'une des commandes les plus puissantes et les plus utilisées de Linux. La commande recherche un ou plusieurs fichiers d'entrée correspondant au modèle spécifié et écrit chaque ligne correspondante dans la sortie standard. Si aucun fichier n'est spécifié, la commande est lue à partir de l'entrée standard, qui est généralement la sortie d'une autre commande. Dans cet article, nous allons vous montrer comment entrer une commande, avec des exemples pratiques et des explications détaillées sur les options GNU grep les plus courantes.
Syntaxe de commande
Avant de commencer à utiliser la commande, commençons par examiner la syntaxe de base. Les expressions utilitaires ont la forme suivante:
[OPTIONS] MOTIF [FICHIER ...]
Les éléments entre crochets sont facultatifs.
- OPTIONS - zéro choix ou plus. L'équipe fournit un certain nombre d'options qui contrôlent son comportement.
- MOTIF - Modèle de recherche.
- FILE - zéro ou plusieurs noms de fichier d'entrée.
Comment entrer une commande pour rechercher des fichiers
Le but principal de la commande est de rechercher du texte dans le fichier. Par exemple, pour afficher à partir du fichier / etc / passwd contenant la ligne bash, vous pouvez utiliser la commande suivante:
$ grep bash / etc / passwd
La sortie devrait ressembler à ceci:
racine 0: 0: racine: / racine: / bin / bash
domain1000: 1000: domaine: / home / domaine: / bin / bash
Si la chaîne contient des espaces, vous devez la mettre entre guillemets simples ou doubles:
$ "Gestionnaire d'affichage Gnome" / etc / passwd
Inverser le match (ex)
Pour afficher les lignes qui ne correspondent pas au modèle, entrez le paramètre –v (ou –invert-match). Par exemple, pour afficher un fichier ne contenant pas nologin à partir du fichier / etc / passwd, vous pouvez entrer la commande suivante:
$ -v nologin / etc / passwd
Sortie:
racine 0: 0: racine: / racine: / bin / bash
colord 124: 124 :: / var / lib / colord: / bin / false
git 994: 994: utilisateur du démon git: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Comment utiliser la commande pour rechercher dans la sortie
Au lieu de cela, si vous spécifiez des fichiers d'entrée, vous pouvez rediriger la sortie d'une autre commande, puis afficher uniquement les lignes correspondant au modèle spécifié. Par exemple, pour savoir quels processus s'exécutent sur votre système en tant qu'utilisateur de www-data, vous pouvez utiliser la commande suivante:
$ ps -ef | www-data
Sortie:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: piscine www
root 18272 17714 0 16:00 pts / 0 00:00:00 —color = auto-exclude-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-data
www-data 31147 12770 0 Oct22? 00:05:51 nginx: processus de travail
www-data 31148 12770 0 octobre 22? 00:00:00 nginx: processus du gestionnaire de cache
Vous pouvez également combiner plusieurs canaux dans une équipe. Comme vous pouvez le voir dans le résultat ci-dessus, il existe également une ligne contenant le processus. Si vous ne souhaitez pas que cette ligne soit affichée, envoyez le résultat à une autre instance, comme indiqué ci-dessous.
$ ps -ef | www-data | grep -v grep
Sortie:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: piscine www
root 18272 17714 0 16:00 pts / 0 00:00:00 —color = auto-exclude-dir = .bzr —exclude-dir = CVS —exclude-dir = .git —exclude-dir = .hg —exclude-dir = .svn www-data
www-data 31147 12770 0 Oct22? 00:05:51 nginx: processus de travail
www-data 31148 12770 0 octobre 22? 00:00:00 nginx: processus du gestionnaire de cache
Recherche récursive
Pour rechercher un motif de manière récursive, entrez l'option –r (ou –recursive). Cela vous permettra de rechercher dans tous les fichiers du répertoire spécifié, en ignorant les liens symboliques récursifs. Pour parcourir tous les liens symboliques, utilisez l'option –r (ou –dereference-récursive). Dans l'exemple suivant, nous recherchons domain.com dans tous les fichiers du répertoire / etc:
$ -r domain.com / etc
La commande imprimera les champs correspondants avec le préfixe du chemin de fichier complet.
/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: nom_serveur domain.com www.domain.com;
Si au lieu de –r vous utilisez l'option –R, la commande suivra tous les liens symboliques:
$ -R domain.com / etc
Notez le dernier champ de sortie. Ceci n'est pas imprimé dans l'exemple ci-dessus, car les fichiers du répertoire Nginx activé pour les sites sont des liens symboliques vers des fichiers de configuration situés dans le répertoire sites-available.
Sortie:
/etc/hosts:127.0.0.1 node2.domain.com
/etc/nginx/sites-available/domain.com: nom_serveur domain.com www.domain.com;
/etc/nginx/sites-enabled/domain.com: nom_serveur domain.com www.domain.com;
Afficher uniquement le nom du fichier
Pour supprimer la sortie par défaut et n'imprimer que les noms de fichiers contenant le motif correspondant, vous pouvez entrer l'option –l (ou —files-with-matches). Par exemple, pour rechercher tous les fichiers se terminant par .conf dans le répertoire de travail en cours et imprimer uniquement les noms de fichiers contenant le type domain.com, tapez:
$ –L domain.com * .conf
La sortie ressemblera à ceci:
tmux.conf
haproxy.conf
L'option -l est généralement utilisée conjointement avec l'option -R récursive:
$ -Rl domain.com / tmp
Insensibilité à la casse
Par défaut, la commande est sensible à la casse, ce qui signifie que les caractères majuscules et minuscules sont traités de manière différente. Pour ignorer la casse lors de la recherche, entrez l’option –i (ou –ignore-case). Par exemple, si vous recherchez un Zebra sans aucune option, la commande suivante n’affiche aucune sortie, c.-à-d. il y a correspondance.
$ Zebra / usr / share / words
Mais si vous effectuez une recherche ne respectant pas la casse, utilisez l'option –i, elle correspondra aux lettres majuscules et minuscules:
$ grep -i Zebra / usr / share / words
L'indication «Zebra» correspond à «Zebra», «ZEbrA» ou à toute autre combinaison de lettres majuscules et minuscules.
Sortie:
zèbre
zèbre
zèbres
Match exact
Lors de la recherche, gnu imprimera également gnu, dans lequel seront insérés des mots plus gros, tels que cygnus ou magnum.
$ gnu / usr / share / words
Sortie:
cygnus
gnou
interrègne
lgnu9d
lignum
magnum
magnuson
sphaigne
aileron
Pour renvoyer uniquement les expressions dans lesquelles le champ spécifié est un mot entier (non entouré de mots), vous pouvez utiliser l'option –w (ou —word-regexp).
IMPORTANT Les caractères du mot incluent des caractères alphanumériques (az, AZ et 0-9) et des traits de soulignement (_). Tous les autres caractères sont traités comme des caractères non verbaux.Si vous exécutez la même commande que ci-dessus, y compris l'option –w, la commande ne renverra que ceux qui incluent gnu en tant que mot séparé.
$ grep -w gnu / usr / share / words
Sortie: gnou
Afficher les chiffres
Pour afficher le nombre de lignes contenant un motif, utilisez le paramètre –n (ou –line-number). Cette option permet d’imprimer les correspondances sur la sortie standard avec le préfixe du numéro dans lequel elle a été trouvée. Par exemple, pour afficher à partir du fichier / etc / services contenant le préfixe bash avec le numéro correspondant, vous pouvez utiliser la commande suivante:
$ grep -n 10000 / etc / services
La sortie ci-dessous montre que les correspondances sont à 10423 et 10424.
Sortie:
10423: ndmp 10 000 / tcp
10424: ndmp 10000 / udp
En comptant
Pour imprimer le nombre de lignes correspondantes dans la sortie standard, utilisez le paramètre –c (ou –count). Dans l'exemple ci-dessous, nous comptons le nombre de comptes dotés du shell / usr / bin / zsh.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Sortie: 4
Plusieurs lignes (motifs)
L'opérateur OR peut combiner deux ou plusieurs modèles de recherche |. Par défaut, la commande interprète le modèle comme l'expression régulière principale, dans laquelle les métacaractères perdent leur signification particulière, et leurs versions avec une barre oblique inversée doivent être utilisées. Dans l'exemple ci-dessous, nous recherchons toutes les occurrences des mots fatal, error et critical dans le fichier journal des erreurs Nginx:
$ grep 'fatal \ | error \ | critical' /var/log/nginx/error.log
Si vous utilisez l'option d'expression régulière étendue –E (ou —extended-regexp), l'instruction ne doit pas être échappée, comme indiqué ci-dessous:
$ grep -E 'fatal | error | critical' /var/log/nginx/error.log
Expression régulière
GNU Grep a deux jeux de fonctions d’expression régulière: basique et étendu. Par défaut, la fonction interprète le modèle comme une expression régulière de base. Pour passer aux expressions régulières étendues, vous devez utiliser l'option –E. Lors de l'utilisation d'expressions régulières en mode principal, tous les autres caractères, à l'exception des métacaractères, sont en fait des expressions régulières qui se correspondent. Vous trouverez ci-dessous une liste des métacaractères les plus couramment utilisés:
- Utilisez le caractère ^ (le caractère caret) pour faire correspondre l'expression au début d'une ligne. Dans l'exemple suivant, ^ kangourou ne correspond que s'il se produit au tout début: $ grep "^ kangaroo" file.txt
- Utilisez le symbole $ (dollar) pour faire correspondre l'expression à la fin. Dans l'exemple suivant, kangourou $ ne correspond que s'il est rencontré à la toute fin: grep "kangourou $" fichier.txt
- Utilisez le symbole. (point) pour faire correspondre n'importe quel caractère. Par exemple, pour faire correspondre tout ce qui commence par kan de deux caractères et se termine par roo, vous pouvez utiliser le modèle suivant: $ grep "kan..roo" file.txt
- Utilisez [] (crochets) pour faire correspondre tout caractère isolé entre crochets. Par exemple, recherchez ceux qui contiennent accept ou "accent, vous pouvez utiliser le modèle suivant: $ grep" acce [np] t "fichier.txt
Pour éviter la signification particulière du caractère suivant, utilisez le caractère \ (barre oblique inverse).
Expressions régulières étendues
Pour interpréter un motif en tant qu'expression régulière étendue, utilisez le paramètre –E (ou –extended-regexp). Les expressions régulières étendues incluent tous les métacaractères de base, ainsi que des métacaractères supplémentaires permettant de créer des modèles de recherche plus complexes et plus puissants. Ci-dessous quelques exemples:
- Match et extraire toutes les adresses e-mail de ce fichier: $ grep -E -o "\ b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + \. [A-Za-z] {2.6} \ b "fichier.txt
- Mappez et extrayez toutes les adresses IP valides de ce fichier: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 -9]?) (25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) (25 [0- 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) (25 [0-5] | 2 [0-4] [0- 9] | [01]? [0-9] [0-9]?) 'Fichier.txt
L'option -o est utilisée pour imprimer uniquement les correspondances.
Imprimer avant de compter
Pour imprimer un certain nombre de lignes avant la correspondance, utilisez le paramètre –B (ou —before-context). Par exemple, pour afficher 5 lignes de contexte initial avant la mise en correspondance, vous pouvez utiliser la commande suivante: $ grep -A 5 root / etc / passwd
Imprimer après la recherche
Pour imprimer un nombre spécifique de lignes après une correspondance, utilisez le paramètre –A (ou –après-contexte). Par exemple, pour afficher 5 lignes du contexte final après la mise en correspondance de chaînes, vous pouvez utiliser la commande suivante: $ grep -B 5 racine / etc / passwd
Tout cela est nécessaire à la pleine utilisation des informations de commandes. Si vous utilisez déjà Linux et pouvez conseiller les débutants, partagez des commentaires sous cet article.