Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Was macht der Linux-Pipe-Charakter?

Was macht der Linux-Pipe-Charakter?

青灯夜游
青灯夜游Original
2023-04-14 11:36:574423Durchsuche

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.

Was macht der Linux-Pipe-Charakter?

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 in Linux

| 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 | …”,该命令的后一条指令,必须能够接收标准输入流命令才能执行。

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

Der Operator des Pipeline-Befehls lautet: „|“. 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'

  • Text anzeigen
  • Sortieren
  • Duplikate entfernen

Was macht der Linux-Pipe-Charakter?

【1】 Nr. Ein Prozess – Sehen Sie sich den Text an

Verwenden 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 – Sortierung

Fü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 Deduplizierung

Wie 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!

Hier kommt 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.

Was hat Vorrang zwischen Standardeingabe- und Befehlszeilenparametern?

Es gibt die folgenden zwei Dateien

[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

Ausführungsbefehl: cat a.txt |. sort b.txt
[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

Führen Sie den Befehl aus: cat a.txt |. sort b.txt -

[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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn