Maison > Article > Opération et maintenance > Quel est le caractère pipe sous Linux
Sous Linux, le caractère pipe est "|", qui est principalement utilisé pour connecter deux ou plusieurs commandes ensemble et utiliser la sortie d'une commande comme entrée de la commande suivante ; .. ]", la sortie de la commande à gauche du caractère "|" sera utilisée comme entrée de la commande à droite du caractère "|". Le caractère pipe peut être utilisé en continu. La sortie de la première commande sera utilisée comme entrée de la deuxième commande, et la sortie de la deuxième commande sera utilisée comme entrée de la troisième commande, et ainsi de suite.
L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.
Shell a également une fonction, qui consiste à connecter deux ou plusieurs commandes (programmes ou processus) ensemble et à utiliser la sortie d'une commande comme entrée de la commande suivante. Deux ou plusieurs commandes connectées de cette manière Un tuyau est formé. .
Les tuyaux Linux utilisent des barres verticales |
pour connecter plusieurs commandes, appelées caractères de tuyau.
command1 | command2 command1 | command2 [ | commandN... ]
Lorsqu'un tube est placé entre deux commandes, la sortie de la commande à gauche du symbole du tube | devient l'entrée de la commande à droite. Tant que la première commande écrit sur la sortie standard et que la deuxième commande lit à partir de l'entrée standard, les deux commandes peuvent former un canal. La plupart des commandes Linux peuvent être utilisées pour former des tubes.
Le caractère pipe peut être utilisé en continu. La sortie de la première commande sera utilisée comme entrée de la deuxième commande, et la sortie de la deuxième commande sera utilisée comme entrée de la troisième commande, et ainsi de suite.
Il convient de noter ici que command1 doit avoir une sortie correcte et que command2 doit être capable de traiter le résultat de sortie de command2 ; et command2 ne peut traiter que le résultat de sortie correct de command1, mais ne peut pas gérer le message d'erreur de commande1.
Par exemple : triez le fichier hello.sh et recherchez la ligne contenant "meilleur" après l'avoir trié et dédupliqué. La commande est : cat hello.sh sort | grep 'better'
Afficher le texte.
Trier[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 - le tri
Les résultats générés par la commande cat précédente sont envoyés à la commande de tri via le pipeline, de sorte que la commande de tri trie le texte généré par la commande cat précédente
[root@linuxforliuhj test]# cat hello.sh | sort be 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 Processus - Déduplication
Comme mentionné dans l'article précédent présentant uniq, le tri peut être efficacement dédupliqué lorsqu'il est utilisé en combinaison avec uniq, de sorte que le texte généré par le tri est envoyé à uniq pour être traité via le pipeline, de sorte qu'uniq traite le tri. text. , peut supprimer efficacement les doublons
[root@linuxforliuhj test]# cat hello.sh | sort | uniq be better dddddddd gggggggggggggggggggg have a nice day hello this is linux i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#
【4】Le quatrième processus - le filtrage
La dernière étape du filtrage consiste également à filtrer la sortie de texte après le traitement de 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 clé. !
Voici le point important !
Voici le point important !
Les commandes cat, sort, uniq, grep et autres ci-dessus prennent toutes en charge le caractère pipe car ces commandes peuvent lire le texte pour être traité à partir de l'entrée standard (c'est-à-dire la lecture des paramètres à partir de l'entrée standard) ; pour certaines commandes, telles que rm, kill et d'autres commandes, elles 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 delete doit être spécifié après le fichier ou le répertoire de commande rm, le numéro de processus à tuer doit être spécifié après la commande kill, etc.)
Alors, quel type de commandes prennent en charge les tubes et quel type de commandes ne supporte pas les tuyaux ?
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
Qu'est-ce qui est prioritaire entre les paramètres d'entrée standard et les paramètres de ligne de commande ?[root@linuxforliuhj test]# cat hello.sh | sort be 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]# ls beifen.txt hello.sh mk read.ln read.sh read.txt sub.sh [root@linuxforliuhj test]# ls | grep read.sh read.sh [root@linuxforliuhj test]# ls | grep read.sh | rm rm: 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 1111 3333 4444 2222 [root@linuxforliuhj test]#Exécutez la commande : cat a.txt | sort
[root@linuxforliuhj test]# cat a.txt | sort aaaa 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 1111 2222 3333 4444 [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 - 1111 2222 3333 4444 aaaa 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.txt 1111 2222 3333 4444 aaaa 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!