GNU/Linux >> Tutoriels Linux >  >> Linux

Travailler avec des canaux sur la ligne de commande Linux

Je suis désolé de vous informer, mais la ligne de commande n'a pas disparu avec les dinosaures, ni n'a disparu avec le dodo ou le pigeon voyageur. La ligne de commande Linux est bien vivante et continue de fonctionner. C'est un moyen efficace de collecter et de traiter rapidement des informations, de créer de nouveaux scripts et de configurer des systèmes.

L'un des opérateurs shell les plus puissants est le tube (| ). Le tube prend la sortie d'une commande et l'utilise comme entrée pour une autre. De plus, vous n'êtes pas limité à une seule commande canalisée :vous pouvez les empiler autant de fois que vous le souhaitez, ou jusqu'à ce que vous manquiez de descripteurs de sortie ou de fichier.

L'un des principaux objectifs de la tuyauterie est le filtrage. Vous utilisez la canalisation pour filtrer le contenu d'un fichier volumineux, pour rechercher une chaîne ou un mot particulier, par exemple. C'est pourquoi l'utilisation la plus courante des canaux implique les commandes grep et sort . Mais, vous n'êtes pas limité à ces cas. Vous pouvez diriger la sortie vers n'importe quelle commande qui accepte l'entrée de flux. Prenons un exemple théorique pour illustrer le fonctionnement de ce processus :

$ cmd1 | cmd2

Les deux cmd1 et cmd2 sont des utilitaires de ligne de commande qui affichent leurs résultats à l'écran (stdout ). Cependant, lorsque vous dirigez la sortie d'une commande vers une autre, les informations de cmd1 ne produit pas de sortie à l'écran. Le tube redirige cette sortie en entrée vers cmd2 .

Remarque : Ne confondez pas pipe (| ) redirection avec redirection de fichier (> ) et (< ). (Un exemple de redirection de fichier : cmd1 > file ou cmd1 < file .) La redirection de fichier envoie la sortie vers un fichier au lieu de l'écran, ou extrait l'entrée d'un fichier.

Examinons quelques exemples concrets du fonctionnement de la tuyauterie.

Vérification des cartes réseau

Supposons que vous ayez besoin de savoir si l'une de vos cartes d'interface réseau (NIC) a une adresse IP commençant par 192 :

$ ifconfig | grep 192

inet 192.168.1.96  netmask 255.255.255.0  broadcast 192.168.1.255

Vous pouvez également savoir quelles cartes réseau actives vous avez sur un système avec un simple tuyau vers grep :

$ ifconfig | grep UP

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

Vous pouvez également grep pour "RUNNING" ou "RUN" pour afficher les mêmes informations.

Examiner les autorisations

Peut-être voulez-vous savoir combien de répertoires sous /etc sont accessibles en écriture par root :

$ sudo ls -lR | grep drwx

Les résultats sont trop longs pour être listés ici, mais comme vous pouvez le voir sur votre liste affichée, il y en a beaucoup. Encore faut-il savoir combien il y en a, et un décompte visuel prendrait beaucoup de temps. Une option simple consiste à canaliser les résultats de votre ls commande au wc commande (nombre de mots) : 

$ sudo ls -lR | grep drwx | wc -l

285

Le -l commutateur affiche le nombre de lignes. Votre compte peut être différent. Cette liste provient d'une nouvelle installation "RHEL 8 server no GUI".

[Vous voulez essayer Red Hat Enterprise Linux ? Téléchargez-le maintenant gratuitement.]

Comptage des fichiers

Vous n'êtes pas obligé d'utiliser grep tout le temps. Par exemple, vous pouvez lister le nombre de fichiers dans le /etc répertoire avec ceci :

$ ls | wc -l

229

Encore une fois, vos résultats peuvent sembler différents, mais vous savez que quelque chose ne va pas si la commande renvoie un petit nombre de fichiers.

Identifier les processus

Vous pouvez également effectuer des tâches complexes à l'aide de tuyaux. Pour répertorier les ID de processus (PID) pour tous les systemd -processus liés :

$ ps -ef | grep systemd | awk '{ print $2 }'

1
471
500
608
631
7449
7494
17242

Le awk $2 de la commande la sortie isole la deuxième colonne (PID) du ps commande. Notez que la dernière entrée, PID 17242 , est en fait le PID pour le grep commande affichant ces informations, comme vous pouvez le voir dans les résultats de la liste complète ici :

khess    17242  7505  0 09:40 pts/0    00:00:00 grep --color=auto systemd

Pour supprimer cette entrée de vos résultats, utilisez à nouveau l'opérateur pipe :

$ ps -ef | grep systemd | awk '{ print $2 }' | grep -v grep

Le -v switch indique au grep commande pour inverser ou ignorer les lignes contenant la chaîne qui suit, dans ce cas toute ligne contenant le mot "grep".

Trier les résultats

Une autre utilisation courante de l'opérateur pipe consiste à trier vos résultats en les dirigeant vers le sort commande. Supposons que vous souhaitiez trier la liste des noms dans contacts.txt . Examinons d'abord le contenu tel qu'il est dans le fichier avant de trier :

$ cat contacts.txt

Bob Jones
Leslie Smith
Dana David
Susan Gee
Leonard Schmidt
Linda Gray
Terry Jones
Colin Doe
Jenny Case

Maintenant, triez la liste :

$ cat contacts.txt | sort

Bob Jones
Colin Doe
Dana David
Jenny Case
Leonard Schmidt
Leslie Smith
Linda Gray
Susan Gee
Terry Jones

Vous pouvez inverser l'ordre de tri avec le -r commutateur :

$ cat contacts.txt | sort -r

Terry Jones
Susan Gee
Linda Gray
Leslie Smith
Leonard Schmidt
Jenny Case
Dana David
Colin Doe
Bob Jones

Le résultat de l'un ou l'autre de ces éléments correspondait-il à ce que vous attendiez ? Par défaut, le sort La commande effectue un tri du dictionnaire sur le premier mot ou la première colonne, c'est pourquoi Bob Jones et Terry Jones ne sont pas répertoriés les uns après les autres.

Vous pouvez trier par la deuxième colonne avec le -k switch, en spécifiant la colonne sur laquelle vous voulez trier, qui dans notre liste est la colonne deux :

$ cat contacts.txt | sort -k2

Jenny Case
Dana David
Colin Doe
Susan Gee
Linda Gray
Bob Jones
Terry Jones
Leonard Schmidt
Leslie Smith

Si vous avez une longue liste de contacts et que vous pensez que cette liste contient des entrées en double, vous pouvez diriger votre liste vers sort puis uniq pour supprimer ces doublons :

$ cat contacts.txt | sort | uniq

Cette commande affiche uniquement les entrées uniques, mais elle n'enregistre pas les résultats. Pour trier le fichier, filtrer les entrées uniques, puis enregistrer le nouveau fichier, utilisez ceci :

$ cat contacts.txt | sort -k2 | uniq > contact_list.txt

N'oubliez pas que l'opérateur pipe et les opérateurs de redirection de fichier font des choses différentes.

Conclusion

Maintenant que vous avez goûté à la puissance de la ligne de commande, pensez-vous pouvoir en assumer la responsabilité ? Les utilitaires de ligne de commande ont plus de flexibilité que leurs homologues graphiques. Et pour certaines tâches, il n'y a pas d'équivalent graphique.

La meilleure façon d'apprendre le comportement de la ligne de commande est d'expérimenter. Par exemple, le sort La commande n'a pas fait ce que vous pensiez qu'elle devrait faire jusqu'à ce que vous exploriez davantage. N'oubliez pas d'utiliser la puissance de votre manuel (man ) pour trouver ces commutateurs et options secrets "cachés" qui transforment la frustration de la ligne de commande en succès de la ligne de commande.


Linux
  1. Comment utiliser la commande Linux grep

  2. 8 conseils pour la ligne de commande Linux

  3. Avoir une vache à la ligne de commande Linux

  4. Enfermez-vous sur la ligne de commande Linux

  5. Travailler avec des flux de données sur la ligne de commande Linux

Maîtrisez la ligne de commande Linux

Manipuler du texte en ligne de commande avec grep

Travailler avec des images Docker à partir de la ligne de commande

Commande Grep sous Linux (avec exemples)

Utilisation de la commande grep sous Linux

Principes de base de la ligne de commande Linux - Travailler avec des fichiers et des répertoires