GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwendung von Pipes und Named Pipes unter Linux (mit Beispielen)

Einer der mächtigsten Shell-Operatoren in Linux ist die Pipe. In diesem Artikel werden wir sehen, wie normale und benannte Pipes funktionieren, wie man sie benutzt und wie sie sich voneinander unterscheiden.

Pipes sind eine der wertvollsten Befehlszeilenfunktionen von Linux und Unix-ähnlichen Betriebssystemen. Rohre werden in einer Vielzahl von Anwendungen verwendet. Wenn Sie sich einen Artikel über die Linux-Befehlszeile ansehen, werden Sie feststellen, dass Pipes häufig erscheinen.

Das vertikale Balkensymbol | bezeichnet ein Rohr. Aufgrund der Pipe können Sie die Ausgabe eines Befehls nehmen und als Eingabe an einen anderen Befehl weiterleiten.

Als Ergebnis kann die Ausgabe eines Befehls als Eingabe für einen anderen verwendet werden, und die Ausgabe dieses Befehls kann als Eingabe für den nächsten Befehl verwendet werden, und so weiter.

Sie sind also nicht auf einen einzelnen Pipe-Befehl beschränkt. Sie können sie beliebig oft stapeln.

Mit anderen Worten, eine Pipe ist eine Form der Umleitung, die in Linux verwendet wird, um die Ausgabe eines Programms zur weiteren Verarbeitung an ein anderes Programm zu senden. Mit Pipes können Sie Operationen ausführen, die die Shell standardmäßig nicht unterstützt.

Die Syntax für den Pipe- oder unbenannten Pipe-Befehl lautet | Zeichen zwischen zwei beliebigen Befehlen:

command1 | command2 | ... | commandN

Wie funktioniert eine Pipe unter Linux

Um zu sehen, wie Pipe funktioniert, sehen wir uns die folgenden Beispiele an.

Wir haben ein Verzeichnis voller vieler verschiedener Arten von Dateien. Wir wollen also wissen, wie viele Dateien eines bestimmten Typs sich in diesem Verzeichnis befinden.

So können wir mit ls einfach eine Liste von Dateien erhalten Befehl:

ls -l

Wir werden grep verwenden, um die Dateitypen zu trennen, nach denen wir suchen. Beispielsweise suchen wir nach Dateien mit dem Wort txt in ihrem Namen oder als Dateierweiterung.

Wir verwenden das spezielle Shell-Zeichen | um ls zu leiten ‘ Ausgabe an grep .

ls | grep txt

Wie Sie dem obigen Bild entnehmen können, ist die Ausgabe der Datei ls Befehl wurde nicht an das Terminalfenster gesendet.

Daher wird das Ergebnis nicht auf dem Bildschirm angezeigt. Stattdessen wird stattdessen auf die Eingabe von grep umgeleitet Befehl. Die Ausgabe, die wir oben sehen, kommt von grep , der letzte Befehl in dieser Kette.

Beginnen wir nun damit, unsere Kette zu erweitern. Wir können Dateien txt zählen durch Hinzufügen des wc Befehl an die Kette. Wir werden das -l verwenden Option (Anzahl Zeilen) mit wc .

ls | grep txt | wc -l

Im obigen Beispiel grep ist nicht mehr der letzte Befehl in der Kette, daher sehen wir seine Ausgabe nicht. Stattdessen die Ausgabe von grep wird in das wc eingespeist Befehl.

Das Ergebnis, das wir im Terminalfenster sehen, kommt von wc . Es meldet zwei Dateien, txt im Verzeichnis.

Was ist eine benannte Pipe unter Linux?

Wie der Name schon sagt, handelt es sich um Pfeifen mit Namen. Einer der Hauptunterschiede zwischen regulären Pipes und benannten Pipes ist, dass benannte Pipes im Dateisystem vorhanden sind . Das heißt, sie werden wie Dateien angezeigt.

Die benannte Pipe in Linux ist eine Methode zum Übergeben von Informationen von einem Computerprozess zu einem anderen, wobei eine Pipe mit einem bestimmten Namen verwendet wird. Named Pipes sind auch als FIFO bekannt, was für First In, First Out steht .

Sie können eine benannte Pipe mit mkfifo erstellen Befehl. Zum Beispiel:

mkfifo mypipe

Ob eine Datei eine benannte Pipe ist, erkennen Sie am p Bit im Abschnitt Dateiberechtigungen.

ls -l mypipe
prw-r--r--  1 root     root         0 Mar 20 12:58 mypipe

Die Named Pipes sind Dateien im Dateisystem selbst. Im Gegensatz zu einer Standard-Pipe wird auf eine Named Pipe wie auf jeden anderen Dateityp als Teil des Dateisystems zugegriffen.

Der Named-Pipe-Inhalt befindet sich im Arbeitsspeicher und wird nicht auf die Festplatte geschrieben. Es wird also erst passiert, wenn beide Rohrenden geöffnet wurden. Und Sie können mehrmals in eine Pipe schreiben, bevor sie am anderen Ende geöffnet und gelesen wird.

Durch die Verwendung von Named Pipes können Sie einen Prozess einrichten, bei dem ein Prozess in eine Pipe schreibt und ein anderer aus einer Pipe liest, ohne sich Gedanken darüber machen zu müssen, ihre Interaktion zu timen oder sorgfältig zu orchestrieren.

Um zu sehen, wie benannte Pipes funktionieren, sehen wir uns die folgenden Beispiele an. Lassen Sie uns zuerst unsere Named Pipe erstellen:

mkfifo mypipe

Lassen Sie uns nun Nachrichten mit dieser Pipe konsumieren.

tail -f mypipe

Öffnen Sie ein weiteres Terminalfenster, schreiben Sie eine Nachricht an diese Pipe:

echo "hi" >> mypipe

Im ersten Fenster sehen Sie nun das „hi“ ausgedruckt:

tail -f pipe1
hi

Da es sich um eine Pipe handelt und die Nachricht verbraucht wurde, sehen Sie, wenn wir die Dateigröße überprüfen, dass sie immer noch 0:

ist
ls -l mypipe
prw-r--r-- 1 root root 0 Mar 20 14:11 mypipe

Da eine benannte Pipe nur eine Linux-Datei ist, können wir sie mit dem Befehl rm entfernen. Um die in den vorherigen Beispielen erstellte Pipe zu entfernen, würden wir daher Folgendes ausführen:

rm mypipe

Wann sollten reguläre oder benannte Pipes verwendet werden

Die Verwendung einer regulären Pipe anstelle einer benannten Pipe in Linux hängt von den Eigenschaften ab, nach denen wir suchen. Einige können Persistenz, bidirektionale Kommunikation, ein Dateiname, das Erstellen eines Filters und das Einschränken von Zugriffsberechtigungen sein.

Wenn wir beispielsweise die Ausgabe eines Befehls mehrmals filtern möchten, scheint die Verwendung einer anonymen Pipe die geeignetste Option zu sein.

Wenn wir andererseits einen Dateinamen benötigen und keine Daten auf der Festplatte speichern möchten, suchen wir nach einer Named Pipe.

Abschließend, wenn Sie das nächste Mal mit Befehlen am Linux-Terminal arbeiten und Daten zwischen Befehlen verschieben, wird eine Pipe den Vorgang hoffentlich schnell und einfach machen.

Schlussfolgerung

Dieser Artikel hat Ihnen die Vielseitigkeit von Pipes gezeigt, wenn sie in Linux-Befehlen verwendet werden. Es ist dennoch relativ einfach, kann aber eine Vielzahl komplizierter Abfragen lösen.

Darüber hinaus ist dieses Befehlszeilentool einfach und funktioniert mit UNIX- und Linux-Plattformen.

Weitere Informationen zu pipe Befehl unter Linux finden Sie auf der Handbuchseite.


Linux
  1. Verwendung des Linux-Hexdump-Befehls mit praktischen Beispielen

  2. So verwenden Sie den Sed-Befehl unter Linux mit Beispielen

  3. SCP-Befehl in Linux:Verwendung mit Beispielen

  4. So verwenden Sie den Rmmod-Befehl unter Linux mit Beispielen

  5. So verwenden Sie den Dig-Befehl unter Linux mit Beispielen

Linux-Alias-Befehl:Verwendung mit Beispielen

So verwenden Sie den Gunzip-Befehl unter Linux mit Beispielen

So verwenden Sie den Linux-rm-Befehl mit Beispielen

So installieren und verwenden Sie den Ack-Befehl unter Linux mit Beispielen

So installieren und verwenden Sie den fd-Befehl unter Linux

So verwenden Sie den Sleep-Befehl unter Linux:Erklärt mit Beispielen