Maison > Article > Opération et maintenance > Que fait le personnage de pipe Linux ?
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.
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 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 | …”,该命令的后一条指令,必须能够接收标准输入流命令才能执行。
管道命令的操作符是:”|
|
". 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'
【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 !
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.
[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!