Einführung in genannte Pipes auf Bash Shell

Einführung in genannte Pipes auf Bash Shell

Unter Linux- und Unix-basierten Betriebssystemen sind Rohre sehr nützlich, da sie eine einfache Möglichkeit sind, zu erreichen IPC (Interprozesskommunikation). Wenn wir zwei Prozesse in einer Pipeline anschließen, wird die Ausgabe des ersten als Eingang des zweiten verwendet. Um eine sogenannte „anonyme“ Pfeife zu bauen, müssen wir nur die verwenden, um die zu verwenden | Operator. Anonyme oder unbenannte Pfeifen dauern so lange wie die Prozesse, die sie verbinden. Es gibt jedoch eine andere Art von Rohr, die wir verwenden können: a FIFO, oder benannte Pfeife. In diesem Artikel werden wir sehen, wie benannte Rohre funktionieren und in dem, was sie sich von den Standardrohren unterscheiden.

In diesem Tutorial lernen Sie:

  • Was ist eine benannte Pfeife
  • So erstellen Sie ein benanntes Rohr
  • Wie man eine benannte Pfeife erkennt
  • Wie benannte Rohre funktionieren
  • So löschen Sie ein benanntes Rohr
Einführung in genannte Pipes auf Bash Shell

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Verteilung unabhängig
Software Die in diesem Tutorial verwendeten Versorgungsunternehmen sind standardmäßig verfügbar
Andere Root -Berechtigungen zur Ausführung von Verwaltungsaufgaben
Konventionen # - Erfordert, dass gegebene Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden können sudo Befehl
US

Eine kurze Erinnerung daran, wie Rohre funktionieren

In einem früheren Tutorial haben wir bereits gesehen. In unseren Skripten oder in unseren interaktiven Shell -Sitzungen können wir den Rohroperator verwenden (|) Um zwei Prozesse miteinander zu verbinden, so dass der Standardausgang (STDOut) des Vorgangs auf der linken Seite des Rohrs als Standardeingang (STDIN) des Prozesses auf der rechten Seite verwendet wird. Hier ist eine schnelle und triviale Demonstration:

$ echo "Goot" | tr 't "d' gut 

Im obigen Beispiel der Ausgabe der Echo Der Befehl wird als Standardeingabe des tr eins. Für diejenigen unter Ihnen, die es nicht wissen, die tr Der Befehl kann verwendet werden, um Zeichen zu übersetzen oder zu löschen: Hier haben wir ihn verwendet, um alle Vorkommen des T Charakter mit dem D eins. Das Ergebnis der beiden Befehle, die zusammen in sogenannten so genannten Geboten geschlagen wurden Pipeline, ist die Zeichenfolge "gut".

Was wir im obigen Beispiel verwendet haben, wird als als genannt Unbenanntes Rohr. Diese Art von Rohr existiert nur, bis die Befehle ausgeführt werden und danach nicht zugegriffen werden kann. Wenn wir ein Rohr bauen und nach seiner Verwendung verweisen können
Wir müssen die sogenannten verwenden benannte Pfeifen, Mal sehen, was sie sind und wie sie funktionieren.



Was ist eine benannte Pfeife?

Auf Unix-basiertem Betriebssystem wie Linux, a benannte Pfeife, oder FIFO (First-in, First-Out) ist eine „spezielle“ Datei, mit der eine Verbindung zwischen den Prozessen hergestellt wird. Im Gegensatz zu einem „Standard“ -Pips wird auf ein benanntes Rohr als Teil des Dateisystems zugegriffen, genau wie bei jeder anderen Art von Datei. Einmal erstellt, wird eine benannte Pfeife tatsächlich als Standarddatei angezeigt. Es scheint jedoch immer leer zu sein, da es nicht verwendet wird, um Informationen zu „speichern“. Die Daten, die durch das Rohr gelangen, werden direkt vom Kernel verwaltet: die FIFO Die Datei Will wird nur als Referenz verwendet.

Erstellen einer benannten Pfeife

A erstellen a benannte Pfeife, In modernen Linux-basierten Betriebssystemen müssen wir nur die verwenden, um die zu verwenden Mkfifo Befehl. In seiner grundlegendsten Verwendung müssen wir nur als Argument an das Programm übergeben, der Name, den wir für die verwenden möchten FIFO Datei. Für
Instanz, um eine benannte Pfeife namens zu erstellen Pfeife0, Wir würden rennen:

$ mkfifo pipe0 

Auf Wunsch kann auch ein benanntes Rohr mit a erstellt werden Spezifische Berechtigungsgruppe Verwendung der -M Option (kurz für --Modus) des Mkfifo Befehl. Die Option akzeptiert die Dateiberechtigungsbits als Argument, zum Beispiel zum Erstellen eines Namens
Pfeife mit 644 Berechtigungen würden wir rennen:

$ mkfifo -m 644 pipe0 

Schauen wir uns die Datei an, die als Ergebnis des obigen Befehls erstellt wurde:

$ ls -l pipe0 prw-r- r--. 1 EGDOC EGDOC 0 Dez 15 11:55 Pipe0 

Hier haben wir das ausgeführt ls Befehl mit dem -l Option, damit das Long Listing -Format verwendet wurde. In der Ausgabe des Befehls können wir sehen, dass der erste Brief, der vor den Berechtigungsbits erscheint, a ist P: Dies zeigt das an
Die Datei ist in der Tat eine benannte Pfeife.



Verwenden einer benannten Pfeife

Wir wissen, wie „Standard“ -Pipes funktionieren: die Standardausgabe des Prozesses links vom Rohr | wird als Standardeingang des Rechts rechts verwendet. Named Pipes funktioniert ähnlich. Lassen Sie es uns demonstrieren. Das erste, was wir wollen
Tun Sie etwas an die benannte Pfeife. Zu diesem Zweck können wir eine einfache Umleitung verwenden; Wir öffnen einen neuen Terminalemulator und führen den folgenden Befehl aus:

$ echo "Eingabenachricht"> PIPE0 

Etwas anscheinend Unerwartetes passiert, sobald wir die Eingabetaste drücken: Der Befehl scheint zu hängen. Dies liegt daran FIFO Die Datei muss an beiden Enden geöffnet werden, durch einen Prozess, der darauf schreibt, und von mindestens einem, der daraus lesen möchte.

In diesem Fall gibt es nichts, was aus der Pfeife „liest“ und ihren Inhalt „verbraucht“, wir sagen, dass die Pfeife ist verstopft. Um dies zu demonstrieren, öffnen wir einen weiteren Terminalemulator und verwenden Sie die Katze Befehl zum "Lesen" aus der benannten Pipe:

$ cat pipe0 Eingabenachricht 

Wie Sie sehen können, wurde die Nachricht, die wir an das benannte Rohr geschrieben haben, auf dem Bildschirm gedruckt und auf dem Terminal, mit dem wir an das Rohr geschrieben wurden, ist alles wieder normal (der Befehl hängt nicht mehr und die Schale wird erneut angezeigt). Wie Sie im Clip unten sehen können, passiert das Gleiche, wenn wir das Rohr zum ersten Mal zum Lesen öffnen, und es gibt nichts, wonach sie schreibt:

Noch einmal ist nichts auf der geschrieben Pfeife0 Datei, und sobald der Inhalt eines benannten Rohrs „verbraucht“ ist, wird das Rohr gelöscht. Einer der Vorteile von benannten Pipes gegenüber Standardrohren ist, dass der Autor- und Leserprozesse nicht gleichzeitig beginnen muss.



Löschen eines benannten Rohrs

Da ein benanntes Rohr nur eine Datei ist, um eine zu entfernen, unter der Annahme, dass wir die richtigen Berechtigungen haben, um die Aktion auszuführen, können wir die verwenden rm Befehl. Um das Rohr zu entfernen, das wir in den vorherigen Beispielen erstellt haben, würden wir daher laufen:

$ rm pipe0 

Schlussfolgerungen

In diesem Artikel haben wir gelernt, wie benannte Pfeifen Arbeit unter Linux. Wir haben gesehen, wie sie als Teil des Dateisystems zugegriffen werden, da sie wie jede andere Datei zu sein scheinen. Wir haben gesehen, wie man benannte Pipes mit dem erstellt Mkfifo Befehl, was
sind ihre Besonderheit und ein Beispiel für ihre Verwendung. Schließlich sahen wir, wie man eine benannte Pfeife löscht.

Verwandte Linux -Tutorials:

  • Umgang mit Benutzereingaben in Bash -Skripten
  • Dinge zu installieren auf Ubuntu 20.04
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • So richten Sie VSFTPD auf Debian ein
  • So starten Sie externe Prozesse mit Python und dem…
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Mastering -Bash -Skriptschleifen beherrschen
  • Bash -Skript: Unary Operator erwartet
  • Wie man ein Signal an Kinderprozesse aus einer Bash verbreitet…
  • Hung Linux System? Wie man zur Befehlszeile entkommt und…