Ligne de commande Linux/BSD 101 : Utilisation de awk, sed et grep dans le terminal

En tant qu’administrateur système junior relativement isolé, je me souviens avoir vu des réponses sur Experts Exchange et plus tard Stack Exchange qui m’ont déconcerté. Les auteurs et les commentateurs peuvent enchaîner 10 commandes avec des barres verticales et des chevrons, ce que je n’ai jamais fait dans l’administration système au quotidien. Honnêtement, je doutais de la valeur réelle de cela. Sûrement, ce n’était qu’un exercice d’e-braggadocio, n’est-ce pas ?

Essayer de lire les pages de manuel des utilitaires les plus fréquemment rencontrés dans ces chaînes de commandes étendues ne les a pas non plus rendus plus accessibles. Par exemple, la page de manuel sed pèse à elle seule environ 1 800 mots sans jamais vraiment expliquer le fonctionnement des expressions régulières ou les utilisations les plus courantes de sed lui-même.

Si vous vous retrouvez dans le même bateau, prenez une boisson et attachez-vous. Au lieu de vous donner des listes encyclopédiques de tous les arguments et cas d’utilisation possibles pour chacune de ces commandes omniprésentes, nous allons vous apprendre à penser À propos et comment les incorporer facilement et de manière productive dans votre propre utilisation quotidienne de la ligne de commande.

Redirection 101

Avant de pouvoir parler de sed, awk, et grep, nous devons parler de quelque chose d’un peu plus basique : la redirection de ligne de commande. Encore une fois, nous allons rester très simple :

Opérateur Fonction Exemple
; Traitez la commande à droite une fois que vous avez terminé de traiter la commande à gauche. faire écho ; écho deux
> Placer la sortie de la chose à gauche dans le vide fichier nommé à droite. ls /home/me > myfilesonce.txt ; ls /maison/moi > monfichier une fois.txt
>> Ajouter la sortie de la chose à gauche à la fin de la existant dossier à droite. ls /home/me > myfilestwice.txt ; ls /maison/moi >> myfileestwice.txt
< Utilisez le fichier de droite comme entrée standard de la commande de gauche. chat < fichier source > fichier cible
| Dirigez la sortie standard de la chose sur la gauche dans l’entrée standard de la chose sur la droite. echo « test123 » | mail -s « subjectline » adresse e-mail

Comprendre ces opérateurs de redirection est crucial pour comprendre les types de lignes de commande magiques que vous êtes probablement ici pour apprendre. Ils permettent de traiter des utilités individuelles et simples comme faisant partie d’un tout plus grand.

Et ce dernier concept – diviser une tâche complexe en plusieurs tâches plus simples – est également nécessaire pour apprendre à pense dans des appels de ligne de commande complexes en premier lieu !

Grep trouve des ficelles

Lorsque vous découvrez pour la première fois des outils comme grep, je trouve qu’il est utile de les considérer comme beaucoup plus simples qu’ils ne le sont vraiment. Dans cette veine, grep est l’outil que vous utilisez pour trouver des lignes qui contiennent un string du texte.

Par exemple, disons que vous êtes intéressé à trouver quels ports le apache navigateur Web est ouvert sur votre système. De nombreux utilitaires peuvent atteindre cet objectif ; netstat est l’une des options les plus anciennes et les plus connues. En règle générale, nous invoquons netstat en utilisant le -anp Arguments pour all prises, numeric afficher, et afficher le propriétaire pid de chaque prise.

Malheureusement, cela produit un parcelle de sortie—souvent, plusieurs dizaines de pages. Vous pouvez simplement rediriger toute cette sortie vers un pager, de sorte que vous puissiez le lire une page à la fois, avec netstat -anp | less. Ou, vous pouvez plutôt le rediriger vers un fichier à ouvrir avec un éditeur de texte : netstat -anp > netstat.txt.

Mais il y a un meilleur option. Au lieu de cela, nous pouvons utiliser grep pour ne retourner que les lignes que nous voulons vraiment. Dans ce cas, ce que nous voulons savoir, c’est la apache serveur Web. Donc:

me@banshee:~$ sudo netstat -anp | head -n5
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.188.1:53        0.0.0.0:*               LISTEN      5128/dnsmasq        
tcp        0      0 192.168.254.1:53        0.0.0.0:*               LISTEN      5057/dnsmasq        
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      4893/dnsmasq        

me@banshee:~$ sudo netstat -anp | wc -l
1694

me@banshee:~$ sudo netstat -anp | grep apache
tcp6       0      0 :::80                   :::*                    LISTEN      4011/apache2  

me@banshee:~$ sudo netstat -anp | head -n2 ; sudo netstat -anp | grep apache
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::80                   :::*                    LISTEN      4011/apache2  

Nous avons introduit quelques nouvelles commandes ci-dessus : head, ce qui limite la sortie au premier m lignes, puis le tronque. Il y a aussi wc, qui, avec l’argument -l, vous indique combien de lignes de texte atteignent son entrée standard.

Nous pouvons donc traduire les quatre commandes ci-dessus en anglais simple :

  1. sudo netstat -anp | head -n5 : « Trouvez toutes les sockets réseau ouvertes, mais limitez la sortie aux cinq premières lignes. »
  2. sudo netstat -anp | wc -l : « Trouvez toutes les sockets réseau ouvertes, puis dites-moi combien de lignes de texte au total vous auriez utilisé pour me le dire. »
  3. sudo netstat -anp | grep apache : « Trouvez toutes les sockets réseau ouvertes, mais ne me montrez que les résultats qui incluent le mot ‘apache.' »
  4. sudo netstat -anp | head -n2 ; sudo netstat -anp | grep apache : « Trouvez toutes les sockets réseau ouvertes, mais montrez-moi seulement les deux lignes d’en-tête, puis recommencez, mais montrez-moi seulement les résultats ‘apache’. »

En pensant à grep comme quelque chose de beaucoup plus simple qu’il ne l’est en réalité, nous pouvons immédiatement trouver des moyens productifs de l’utiliser et nous pouvons enchaîner ces utilisations simples pour décrire facilement des tâches plus complexes !

Une fois que vous êtes à l’aise avec l’utilisation grep pour trouver des chaînes simples comme vu ci-dessus, il peut effectuer des tâches beaucoup plus complexes. Ceux-ci incluent, sans s’y limiter : l’utilisation non sensible à la casse, les modèles plus complexes (y compris les expressions régulières complètes), l’exclusion (ne me montrer que les lignes qui ne pas inclure le motif), et bien plus encore. Mais ne t’inquiète pas pour ça jusqu’à ce que après vous êtes familier avec les simples grep les usages. Une fois que vous avez commencé, il est vraiment difficile d’imaginer la vie sans grep plus!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*