Prawie wszystko w Linuksie można uznać za plik , ale główna różnica między zwykłym plikiem a nazwanym potokiem polega na tym, że nazwany potok jest specjalną instancją pliku, który nie ma zawartości w systemie plików.
Oto cytat z man fifo
:
Plik specjalny FIFO (nazwany potok) jest podobny do potoku, z tym że jest dostępny jako część systemu plików. Można go otworzyć za pomocą wielu procesów odczytu lub zapisu. Kiedy procesy wymieniają dane za pośrednictwem FIFO, jądro przekazuje wszystkie dane wewnętrznie bez zapisywania ich w systemie plików. Tak więc plik specjalny FIFO nie ma zawartości w systemie plików; pozycja systemu plików służy jedynie jako punkt odniesienia, dzięki czemu procesy mogą uzyskać dostęp do potoku przy użyciu nazwy w systemie plików.
Jądro utrzymuje dokładnie jeden obiekt potoku dla każdego pliku specjalnego FIFO, który jest otwierany przez co najmniej jeden proces. FIFO musi zostać otwarte na obu końcach (odczyt i zapis) przed przekazaniem danych. Zwykle otwieranie bloków FIFO aż do otwarcia drugiego końca również.
Tak więc nazwany potok nic nie robi, dopóki jakiś proces go nie odczyta i nie zapisze. Nie zajmuje miejsca na dysku twardym (poza odrobiną meta informacji), nie wykorzystuje procesora.
Możesz to sprawdzić, wykonując następujące czynności:
Utwórz nazwaną potok
$ mkfifo /tmp/testpipe
Przejdź na przykład do jakiegoś katalogu /home/user/Documents
i gzip wszystko w nim, używając nazwanego potoku.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Tutaj powinieneś zobaczyć PID procesu gzip. W naszym przykładzie było to 28584.
Teraz sprawdź, co robi ten PID
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
Zobaczysz, że nie używa żadnych zasobów . 0% zużycie procesora, 0% zużycie pamięci.
Sprawdź przeczucie dotyczące wykorzystania przestrzeni plików
$ du -h /tmp/testpipe
0 testpipe
I znowu 0
nic. W razie potrzeby można użyć rurki testowej.
Nie zapomnij zabić gzipa, używając kill -15 28584
. I usuń naszą nazwaną potok za pomocąrm /tmp/testpipe
Przykładowe zastosowania
Możesz przekierować prawie wszystko za pomocą nazwanego potoku. Jako przykład możesz zobaczyć ten jednokreskowy serwer proxy .
Również tutaj jest jeszcze jeden miły wyjaśnienie nazwie użytkowania rur. Możesz skonfigurować dwa procesy na jednym serwerze, aby komunikowały się przy użyciu nazwanego potoku zamiast stosu TCP / IP. Jest znacznie szybszy i nie ładuje zasobów sieciowych. Na przykład Twój serwer internetowy może komunikować się z bazą danych bezpośrednio za pomocą nazwanego potoku, zamiast używać localhost
adresu lub nasłuchiwać na jakimś porcie.