Einführung in genannte Pipes auf Bash Shell
- 557
- 145
- Hr. Moritz Bozsik
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
Softwareanforderungen und Konventionen verwendet
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 BefehlUS |
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…