Wprowadzenie do nazwanych rur na powładzie Bash

Wprowadzenie do nazwanych rur na powładzie Bash

W systemach operacyjnych opartych na systemie Linux i Unix rurki są bardzo przydatne, ponieważ są prostym sposobem osiągnięcia IPC (komunikacja między procesami). Kiedy podłączamy dwa procesy w rurociągu, wyjście pierwszego jest używane jako wejście drugiego. Aby zbudować tak zwaną „anonimową” rurę, wszystko, co musimy zrobić, to użyć | operator. Anonimowe lub bezimienne rury trwają tak długo, jak łączą się procesy. Istnieje jednak inny rodzaj rur, którego możemy użyć: a FIFO, lub nazwana rura. W tym artykule zobaczymy, jak działają nazwane rury i w czym różnią się od standardowych rur.

W tym samouczku się nauczysz:

  • Co to jest nazwana rura
  • Jak utworzyć nazwaną rurę
  • Jak rozpoznać nazwaną rurę
  • Jak działają nazwane rury
  • Jak usunąć nazwaną rurę
Wprowadzenie do nazwanych rur na powładzie Bash

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny dystrybucja
Oprogramowanie Narzędzia używane w tym samouczku są domyślnie dostępne
Inny Uprawnienia do wykonywania zadań administracyjnych
Konwencje # - Wymaga, aby podane Linux -commands były wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$-wymaga wykonania Linux-commands jako zwykłego niewidzianego użytkownika

Szybkie przypomnienie, jak działają rury

W poprzednim samouczku widzieliśmy już, jak działają rury i do czego można je wykorzystać we wstępie do przekierowania skorupy, ale po prostu szybko podsumujmy. Na naszych skryptach lub podczas interaktywnych sesji powłoki możemy użyć operatora rur (|) Aby połączyć dwa procesy ze sobą, aby standardowe wyjście (stdout) procesu po lewej stronie rurki jest używane jako standardowe wejście (stdin) procesu po prawej stronie. Oto szybka i trywialna demonstracja:

$ echo „goot” | tr 't "d' dobrze 

W powyższym przykładzie wyjście Echo polecenie jest używane jako standardowe wejście tr jeden. Dla tych z was, którzy nie wiedzą, tr Polecenie można użyć do tłumaczenia lub usuwania znaków: tutaj użyliśmy go do zastąpienia wszystkich wystąpień T postać z D jeden. Wynik dwóch poleceń wspieranych w tak zwaną a rurociąg, to ciąg „dobry”.

To, co użyliśmy w powyższym przykładzie, nazywa się Rura nienazwana. Taki rodzaj rur istnieje tylko do momentu wykonania poleceń i nie można go później uzyskać. Jeśli chcemy zbudować rurę i być w stanie odwołać się do niej po jej użyciu
Musimy użyć tak zwanych nazwane rury, Zobaczmy, kim oni są i jak działają.



Co to jest nazwana rura?

W systemie operacyjnym opartym na Unixie, takim jak Linux, a Nazwana rura, Lub FIFO (First-in, First-Out), to „specjalny” rodzaj pliku używanego do ustanowienia połączenia między procesami. W przeciwieństwie do „standardowej” rurki, nazwana rura jest dostępna jako część systemu plików, podobnie jak każdy inny typ pliku. Po utworzeniu nazywana rura rzeczywiście pojawi się jako plik standardowy; Jednak zawsze będzie wyglądać na puste, ponieważ nie będzie używane do „przechowywania” informacji. Dane, które przechodzą przez rury, będą zarządzane bezpośrednio przez jądro: FIFO Plik będzie używany jako odniesienie.

Tworzenie nazwanej rury

Stworzyć Nazwana rura, W nowoczesnych systemach operacyjnych opartych na systemie Linux musimy tylko użyć Mkfifo Komenda. W najbardziej podstawowym użyciu wszystko, co musimy przekazać jako argument do programu, to nazwa, której chcemy użyć dla FIFO plik. Dla
instancja, aby utworzyć nazwaną rurę o nazwie Pipe0, Bieglibyśmy:

$ Mkfifo Pipe0 

W razie potrzeby można również utworzyć nazwaną rurę za pomocą określony zestaw uprawnień używając -M opcja (skrót --tryb) Mkfifo Komenda. Opcja akceptuje Plik bity uprawnień Jako argument, więc na przykład, aby utworzyć nazwane
rura z 644 uprawnienia, uruchomilibyśmy:

$ mkfifo -m 644 Pipe0 

Rzućmy okiem na plik utworzony w wyniku uruchomienia powyższego polecenia:

$ ls-l ripe0 prw-r-r-r--. 1 EGDOC EGDOC 0 grudnia 15 11:55 Pipe0 

Tutaj prowadziliśmy LS polecenie z -L opcja, tak aby zastosowano format długiego listy. W wyjściu polecenia możemy zobaczyć, że pierwsza litera, która pojawia się przed bitami uprawnień, to P: to wskazuje
Plik jest rzeczywiście nazwaną rurą.



Za pomocą nazwanej rury

Wiemy, jak działają „standardowe” rury: standardowe wyjście procesu po lewej stronie rury | jest używany jako standardowe wejście tego po prawej stronie. Nazwane rury działają podobnie. Pokazajmy to. Pierwsza rzecz, którą chcemy
to napisać coś do nazwanej rury. Aby to zrobić, możemy użyć prostego przekierowania; Otwieramy nowy emulator terminalu i uruchamiamy następujące polecenie:

$ echo „Wejście komunikatu”> Pipe0 

Coś pozornie nieoczekiwanego dzieje się, gdy tylko naciśniemy Enter: Wydaje się, że polecenie wisie. Wynika to z działania nazwanych rur: aby dane zostały przekazane przez nazwaną rury, FIFO Plik musi zostać otwarty na obu końcach, przez proces, który do niego pisze, i przynajmniej taki, który chce z niego czytać.

W tym przypadku, ponieważ nie ma nic, co „czytanie” z rury i „konsumowanie” jej zawartości, mówimy, że rura jest zablokowany. Aby to zademonstrować, otwórzmy kolejny emulator terminali i użyjmy kot polecenie „odczytu” z nazwanej rury:

Komunikat wejściowy $ CAT PIPE0 

Jak widać, wiadomość, którą napisaliśmy do nazwanej rury, została wydrukowana na ekranie i na terminalu, którego używaliśmy do pisania do rury, wszystko wróciło do normy (polecenie już nie wisi, a monit powłoki pojawia się ponownie). Jak widać w poniższym klipie, to samo dzieje się, jeśli po raz pierwszy otworzymy fajkę do czytania i nie ma nic do pisania:

Po raz kolejny nic nie jest napisane na temat Pipe0 plik, a gdy zawartość nazwanej rury jest „zużywa” rura jest wyczyszczona. Jedną z zalet nazwanych rur nad standardowymi rurami jest to, że procesy pisarza i czytelników nie muszą się rozpocząć w tym samym czasie.



Usuwanie nazwanej rury

Ponieważ nazwana rura to tylko plik, aby usunąć jedną, zakładając, że mamy odpowiednie uprawnienia do wykonania akcji, możemy użyć Rm Komenda. Aby usunąć rurę, którą stworzyliśmy w poprzednich przykładach, zatem uruchomilibyśmy:

$ rm Pipe0 

Wnioski

W tym artykule dowiedzieliśmy się, jak nazwane rury Praca nad Linuksem. Widzieliśmy, w jaki sposób są dostępne jako część systemu plików, ponieważ wydają się być jak każdy inny plik. Widzieliśmy, jak tworzyć nazwane rury za pomocą Mkfifo polecenie co
są ich szczególnością i przykładem ich użycia. Wreszcie widzieliśmy, jak usunąć nazwaną rurę.

Powiązane samouczki Linux:

  • Obsługa danych wejściowych użytkownika w skryptach Bash
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Jak skonfigurować VSFTPD na Debian
  • Jak uruchomić procesy zewnętrzne z Pythonem i…
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Mastering Bash Script Loops
  • Skrypt bash: Oczekiwano Unary Operator
  • Jak propagować sygnał do procesów dziecka z bash…
  • Hung Linux System? Jak uciec do wiersza poleceń i…