Heim > Artikel > Betrieb und Instandhaltung > Was macht der Linux-Pipe-Charakter?
Unter Linux besteht die Funktion des Pipe-Zeichens darin, mehrere Anweisungen zu verbinden. Der Ausgabestrom der vorherigen Anweisung wird als Operationsobjekt der nachfolgenden Anweisung verwendet ...". Dieser Befehl Die letztgenannte Anweisung muss in der Lage sein, Standard-Eingabestrombefehle zu empfangen, bevor sie ausgeführt werden kann. Das Pipe-Zeichen wird hauptsächlich für die Verarbeitung mehrerer Befehle verwendet, und das gedruckte Ergebnis des vorherigen Befehls wird als Eingabe für den nachfolgenden Befehl verwendet.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
Pipeline ist eine sehr wichtige Kommunikationsmethode unter Linux. Sie verbindet die Ausgabe eines Programms direkt mit der Eingabe eines anderen Programms. Pipes beziehen sich oft auf unbenannte Pipes und können nur zwischen verwandten Prozessen verwendet werden. Dies ist der größte Unterschied zwischen ihnen und benannten Pipes.
Die berühmte Pipe heißt Named Pipe oder FIFO (First In, First Out) und kann mit der Funktion mkfifo() erstellt werden.
|
Das Pipe-Zeichen wird zum Verbinden mehrerer Anweisungen verwendet. Der Ausgabestream der vorherigen Anweisung wird als Operationsobjekt der nachfolgenden Anweisung verwendet Das Befehlsformat lautet „Befehl 1 |. Befehl 2 | ...“, der Befehl nach diesem Befehl muss den Standard-Eingabestream-Befehl empfangen können, bevor er ausgeführt werden kann. |
管道符的作用是连接多条指令,前一条指令的输出流会作为后一条指令的操作对象,其命令格式为“指令1 | 指令2 | …”,该命令的后一条指令,必须能够接收标准输入流命令才能执行。
管道命令的操作符是:”|
|
“. Er kann nur die korrekten Ausgabeinformationen verarbeiten, die vom vorherigen Befehl gesendet wurden, und verfügt nicht über die Möglichkeit, Fehlerinformationen direkt zu verarbeiten. Anschließend wird es als Operationsobjekt an die nächste Anweisung übergeben. Syntax:
指令1 | 指令2 | …Das Pipe-Zeichen wird hauptsächlich für die Verarbeitung mehrerer Befehle verwendet. Das Druckergebnis des vorherigen Befehls wird als Eingabe für den nachfolgenden Befehl verwendet. Einfach ausgedrückt ist es wie ein Fabrik-Fließband. Nach Abschluss eines Prozesses wird er zum nächsten Prozess weitergeleitet ...
Zum Beispiel: Sortieren Sie die Datei hello.sh und finden Sie die Dateien heraus, die „besser“ enthalten " nach dem Sortieren und Deduplizieren. Der Zeilenbefehl
lautet: cat hello.sh | sort | uniq | grep 'better'
【1】 Nr. Ein Prozess – Sehen Sie sich den Text anVerwenden Sie zuerst den Befehl „cat“, um den Text anzuzeigen. Der auf dem Bildschirm gedruckte Inhalt ist das Ausgabeergebnis des Befehls „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] Der zweite Prozess – SortierungFügen Sie die vom vorherigen Cat-Befehl ausgegebenen Ergebnisse ein. Werfen Sie sie über die Pipeline an den Sortierbefehl, sodass der Sortierbefehl den vom vorherigen Cat-Befehl ausgegebenen Text sortiert.
[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] Der dritte Prozess ist die DeduplizierungWie bereits erwähnt Im vorherigen Artikel, in dem Uniq vorgestellt wurde, wird Sortieren in Kombination mit Uniq verwendet. Um Duplikate effektiv zu entfernen, wird die Textausgabe nach dem Sortieren zur Verarbeitung durch die Pipeline an Uniq gesendet, sodass Uniq den sortierten Text verarbeitet, wodurch Duplikate effektiv entfernt werden können
[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] Der vierte Prozess – Filtern Der letzte Schritt des Filterns besteht auch darin, die Textausgabe nach der Verarbeitung durch den vorherigen Befehl, den Uniq-Befehl, zu filtern Der Punkt!
Die oben genannten Befehle cat, sort, uniq, grep und andere unterstützen alle das Pipe-Zeichen, da diese Befehle den zu verarbeitenden Text aus der Standardeingabe lesen können (das). heißt, die Parameter aus der Standardeingabe lesen); und für einige Befehle, wie z. B. rm, unterstützen Befehle wie kill nicht das Lesen von Parametern aus der Standardeingabe, sondern nur das Lesen von Parametern aus der Befehlszeile (d. h. der Datei oder dem Verzeichnis).
Welche Art von Befehlen unterstützen Pipelines und welche Art von Befehlen unterstützen keine Pipelines? Im Allgemeinen unterstützen Befehle, die Text verarbeiten, wie z. B. sort, uniq, grep, awk, sed usw., keine Pipes. Befehle, die keinen Text verarbeiten, wie z. B. rm und ls, unterstützen keine Pipes Wenn nach sort keine Parameter vorhanden sind, wird die Ausgabe des vorherigen Befehls verarbeitet, die durch das Pipe-Zeichen an ihn geworfen wurde (d. h. die Standardausgabe des vorherigen Befehls wird als Standardeingabe dieses Befehls verwendet).
[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better'be better[root@linuxforliuhj test]#
Wenn die Datei sein soll Wird nach rm nicht gelöscht, wird ein Fehler gemeldet. Parameter gehen verloren, daher unterstützen Befehle wie rm das Lesen von Parametern aus der Standardeingabe nicht. Sie unterstützen nur die Angabe von Parametern in der Befehlszeile, d. h. die Angabe von zu löschenden Dateien.
Es gibt die folgenden zwei DateienWas hat Vorrang zwischen Standardeingabe- und Befehlszeilenparametern?
[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]#Führen Sie den Befehl aus: cat a.txt |. sort
[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]#Wenn der Befehlszeilenparameter von sort leer ist, wird die Ausgabe des vorherigen Befehls als Eingabe dieses Befehls verwendet standardmäßig
[root@linuxforliuhj test]# cat a.txt aaaa dddd cccc bbbb[root@linuxforliuhj test]# cat b.txt 1111333344442222[root@linuxforliuhj test]#Sie können sehen, dass sort die Parameter in der Standardeingabe nicht liest, wenn der Befehlszeilenparameter von sort (hier b.txt) nicht leer ist , und wann Lesen Sie die Befehlszeilenparameter
[root@linuxforliuhj test]# cat a.txt | sortaaaa bbbb cccc dddd[root@linuxforliuhj test]#" - "Gibt die Standardeingabe an, d. h. die Ausgabe des Befehls cat a.txt, der ist entspricht der Datei b.txt und der Standardeingabe zusammen. Die Sortierung entspricht der Sortierung a.txt b.txt
[root@linuxforliuhj test]# sort a.txt b.txt1111222233334444aaaa bbbb cccc dddd[root@linuxforliuhj test]#
思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!
相关推荐:《Linux视频教程》
Das obige ist der detaillierte Inhalt vonWas macht der Linux-Pipe-Charakter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!