Maison  >  Article  >  Opération et maintenance  >  Que fait le personnage de pipe Linux ?

Que fait le personnage de pipe Linux ?

青灯夜游
青灯夜游original
2023-04-14 11:36:574343parcourir

Sous Linux, la fonction du caractère pipe "|" est de connecter plusieurs instructions. Le flux de sortie de l'instruction précédente sera utilisé comme objet d'opération de l'instruction suivante. Le format de commande est "Instruction 1 | Instruction 2 | ... ". Cette commande Cette dernière instruction doit être capable de recevoir des commandes de flux d'entrée standard avant de pouvoir être exécutée. Le caractère barre verticale est principalement utilisé pour le traitement de plusieurs commandes, et le résultat imprimé de la commande précédente est utilisé comme entrée de la commande suivante.

Que fait le personnage de pipe Linux ?

L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.

Pipeline est une méthode de communication très importante sous Linux. Il connecte directement la sortie d'un programme à l'entrée d'un autre programme. Les canaux font souvent référence à des canaux sans nom. Les canaux sans nom ne peuvent être utilisés qu'entre des processus liés. C'est la plus grande différence entre eux et les canaux nommés.

Le fameux tube est appelé tube nommé ou FIFO (premier entré, premier sorti), qui peut être créé avec la fonction mkfifo().

Le caractère |pipe sous Linux

| Le caractère pipe est utilisé pour connecter plusieurs instructions. Le flux de sortie de l'instruction précédente sera utilisé comme objet d'opération de l'instruction suivante. Le format de la commande est " Command 1 | Command 2 ...", la commande suivante doit pouvoir recevoir la commande de flux d'entrée standard avant de pouvoir être exécutée. | 管道符的作用是连接多条指令,前一条指令的输出流会作为后一条指令的操作对象,其命令格式为“指令1 | 指令2 | …”,该命令的后一条指令,必须能够接收标准输入流命令才能执行。

管道命令的操作符是:”|

L'opérateur de la commande pipeline est : "|". Il ne peut traiter que les informations de sortie correctes envoyées par la commande précédente et n'a aucune capacité de traitement direct des informations d'erreur. Ensuite, il est transmis à l’instruction suivante en tant qu’objet d’opération.

Syntaxe :

指令1 | 指令2 | …

Le caractère pipe est principalement utilisé pour le traitement de plusieurs commandes. Le résultat d'impression de la commande précédente est utilisé comme entrée de la commande suivante. Pour faire simple, c'est comme une chaîne de montage en usine. Après avoir terminé un processus, il continue d'être envoyé au processus suivant...

Par exemple : triez le fichier hello.sh et découvrez les fichiers contenant " better" après les avoir triés et dédupliqués. La commande de la ligne

est : cat hello.sh | sort | uniq | grep 'better'

  • Afficher le texte
  • Trier
  • Supprimer les doublons

Que fait le personnage de pipe Linux ?【1】 No. Un processus - afficher le texte

Utilisez d'abord la commande cat pour afficher le texte. Le contenu imprimé à l'écran est le résultat de la commande cat

[root@linuxforliuhj test]# cat hello.sh hello this is linux
be better
be better
i am lhj
hello this is linux
i am lhj
i am lhj
be better
i am lhj
have a nice day
have a nice day
hello this is linux
hello this is linux
have a nice day
zzzzzzzzzzzzzz
dddddddd
gggggggggggggggggggg[root@linuxforliuhj test]#

[2] Le deuxième processus - tri

.

Mettez les résultats générés par la commande cat précédente. Jetez-les à la commande sort via le pipeline, de sorte que la commande sort trie le texte généré par la commande cat précédente

[root@linuxforliuhj test]# cat hello.sh | sortbe better
be better
be better
dddddddd
gggggggggggggggggggg
have a nice day
have a nice day
have a nice day
hello this is linux
hello this is linux
hello this is linux
hello this is linux
i am lhj
i am lhj
i am lhj
i am lhj
zzzzzzzzzzzzzz[root@linuxforliuhj test]#

[3] Le troisième processus - la déduplication

Comme mentionné dans le article précédent présentant uniq, le tri est utilisé en combinaison avec uniq Afin de supprimer efficacement les doublons, le texte sorti après le tri est envoyé à uniq pour être traité via le pipeline, donc uniq traite le texte trié, ce qui peut supprimer efficacement les doublons

[root@linuxforliuhj test]# cat hello.sh | sort | uniqbe better
dddddddd
gggggggggggggggggggg
have a nice day
hello this is linux
i am lhj
zzzzzzzzzzzzzz[root@linuxforliuhj test]#

[ 4] Le quatrième processus - filtrage

La dernière étape du filtrage consiste également à filtrer le texte sorti après traitement par la commande précédente, la commande uniq

[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better'be better[root@linuxforliuhj test]#

Voici le point !

Voici le point ! !

Voici le point !

Ce qui précède Les commandes cat, sort, uniq, grep et autres prennent toutes en charge le caractère barre verticale car ces commandes peuvent lire le texte à traiter à partir de l'entrée standard (c'est-à-dire, lire les paramètres à partir de l'entrée standard) et pour certaines commandes, telles que rm, les commandes telles que kill ne prennent pas en charge la lecture des paramètres à partir de l'entrée standard, mais prennent uniquement en charge la lecture des paramètres à partir de la ligne de commande (c'est-à-dire que le fichier ou le répertoire à supprimer doit être spécifié après la commande rm, le numéro du processus à tuer doit être spécifié après la commande kill, etc.)

Alors, quels types de commandes prennent en charge les pipelines et quels types de commandes ne prennent pas en charge les pipelines ?
Généralement, les commandes qui traitent du texte, telles que sort, uniq, grep, awk, sed, etc., prennent toutes en charge les tubes ; les commandes qui ne traitent pas de texte, telles que rm et ls, ne prennent pas en charge les tubes


[root@linuxforliuhj test]# cat hello.sh | sortbe better
be better
be better
dddddddd
gggggggggggggggggggg
have a nice day
have a nice day
have a nice day
hello this is linux
hello this is linux
hello this is linux
hello this is linux
i am lhj
i am lhj
i am lhj
i am lhj
zzzzzzzzzzzzzz[root@linuxforliuhj test]#
. n'y a pas de paramètres après le tri, la sortie de la commande précédente lancée par le caractère barre verticale est traitée (c'est-à-dire que la sortie standard de la commande précédente est utilisée comme entrée standard de cette commande)
[root@linuxforliuhj test]# lsbeifen.txt  hello.sh  mk  read.ln  read.sh  read.txt  sub.sh[root@linuxforliuhj test]# ls | grep read.shread.sh[root@linuxforliuhj test]# ls | grep read.sh | rmrm: missing operand
Try 'rm --help' for more information.[root@linuxforliuhj test]#

Lorsque le fichier à être delete n'est pas spécifié après rm, une erreur sera signalée. Les paramètres sont perdus, donc les commandes telles que rm ne prennent pas en charge la lecture des paramètres à partir de l'entrée standard. Elles prennent uniquement en charge la spécification de paramètres sur la ligne de commande, c'est-à-dire la spécification des fichiers à supprimer.

Qu'est-ce qui est prioritaire entre les paramètres d'entrée standard et les paramètres de ligne de commande ? Il y a les deux fichiers suivants

[root@linuxforliuhj test]# cat a.txt aaaa
dddd
cccc
bbbb[root@linuxforliuhj test]# cat b.txt 1111333344442222[root@linuxforliuhj test]#

Exécutez la commande : cat a.txt | sort

[root@linuxforliuhj test]# cat a.txt | sortaaaa
bbbb
cccc
dddd[root@linuxforliuhj test]#

Lorsque le paramètre de ligne de commande de sort est vide, la sortie de la commande précédente sera utilisée comme entrée de cette commande par défaut

Commande d'exécution : cat a.txt | sort b.txt

[root@linuxforliuhj test]# cat a.txt | sort b.txt 1111222233334444[root@linuxforliuhj test]#

Vous pouvez voir que lorsque le paramètre de ligne de commande du tri (ici b.txt) n'est pas vide, le tri ne lira pas les paramètres dans l'entrée standard , et quand Lire les paramètres de la ligne de commande

Exécuter la commande : cat a.txt | sort b.txt -

[root@linuxforliuhj test]# cat a.txt | sort b.txt -1111222233334444aaaa
bbbb
cccc
dddd[root@linuxforliuhj test]#

" - "Indique l'entrée standard, c'est-à-dire la sortie de la commande cat a.txt, qui est équivalent au fichier b.txt et à l'entrée standard ensemble Le tri équivaut à trier a.txt b.txt

[root@linuxforliuhj test]# sort a.txt b.txt1111222233334444aaaa
bbbb
cccc
dddd[root@linuxforliuhj test]#

思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!

相关推荐:《Linux视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn