PIPESZ(1) Polecenia użytkownika PIPESZ(1)

pipesz - ustawia lub sprawdza rozmiary buforów potoku i FIFO

pipesz [opcje] [--set size] [--] [polecenie [argument] ...]

pipesz [opcje] --get

Potoki i FIFO utrzymują wewnętrzny bufor używany do transferu danych pomiędzy końcem do odczytu i końcem do zapisu. W niektórych przypadkach domyślny rozmiar wewnętrznego bufora może nie być właściwy. Niniejszy program dostarcza metody do ustawiania i sprawdzania rozmiaru opisywanych buforów.

Operacja --set ustawia rozmiary buforów potoku. Jeśli poda się tę opcję, konieczne jest również określenie argumentu rozmiar. W innym przypadku jest dorozumiany; rozmiar jest wówczas odczytywany z /proc/sys/fs/pipe-max-size. Jądro może zmodyfikować rozmiar zgodnie z opisem w podręczniku fcntl(2). Aby sprawdzić faktycznie ustawione rozmiary bufora, proszę skorzystać z opcji --verbose. Jeśli nie poda się --file ani --fd, --set działa na standardowym wyjściu.

Operacja --set pozwala na ustawienie opcjonalnego polecenia do wykonania po ustawieniu rozmiarów buforów potoku. Polecenie to jest wykonywane już na zmodyfikowanych potokach.

Operacja --get wypisuje dane w formacie tabelarycznym. Pierwsza kolumna jest nazwą potoku przekazaną do pipesz. Deskryptory plików są nazywane jako "fd N". Druga kolumna jest rozmiarem wewnętrznego bufora potoku w bajtach. Trzecia kolumna jest liczbą nieodczytanych obecnie bajtów w potoku. Kolumny są rozdzielone znakiem tabulacji("\t", ASCII 09h). Jeśli poda się --verbose, wypisany zostanie również nagłówek z opisem. Jeśli nie poda się --file ani --fd, --get działa na standardowym wejściu.

O ile nie poda się opcji --check, pipesz nie wychodzi po napotkaniu błędu przy modyfikacji pliku lub deskryptora pliku. Dzięki temu można korzystać z pipesz liberalnie i bez obawy o zaburzanie działania potoków, gdyby typy określonych plików uległy później zmianie. Opcja --quiet dodatkowo wyłącza wyświetlanie ostrzeżeń w takim przypadku.

Jądro narzuca limity wielkości przestrzeni na bufory potoków, jaką mogą stosować procesy nieuprzywilejowane, zob. jednak USTERKI poniżej. Jądro odmówi również zmniejszenia bufora potoku, gdyby spowodowało to utratę zbuforowanych danych. Więcej szczegółów w podręczniku pipe(7).

pipesz obsługuje łączenie wielu krótkich opcji, w zwykłym stylu getopt(3). Pierwszy argument niebędący opcją jest interpretowany jako polecenie. Jeśli nazwa polecenia może rozpoczynać się znakiem "-", proszę oddzielić ją znakami "--" od argumentów pipesz. W skryptach powłoki, dobrą praktyką jest korzystanie z '--' przy interpretacji parametrów. Sam pipesz nie odczytuje ze standardowego wejścia i nie zapisuje na standardowe wyjście, chyba że podano opcje --get, --help lub --version.

-g, --get

Zgłasza rozmiar buforów potoku na standardowym wyjściu i wychodzi. Jako przypadek specjalny, jeśli nie poda się --file ani --fd, sprawdzane jest standardowe wejście. Łączenie tej opcji z --set jest błędem.

-s, --set rozmiar

Ustawia rozmiar buforów potoku, w bajtach. Po rozmiarze można użyć przyrostka K, M, G, KiB, MiB, lub GiB, aby wskazać wielokrotności 1024. Obsługiwane są tu wartości ułamkowe. Obsługiwane są również dodatkowe przyrostki, ale raczej nie okażą się przydatne. Jeśli nie poda się tej opcji, używana jest wartość domyślna, zgodnie z opisem powyżej. Jeśli opcję poda się wielokrotnie, wypisywane jest ostrzeżenie i używany jest rozmiar podany jako ostatni. Jako przypadek specjalny, jeśli nie poda się --file ani --fd, dostosowywane jest standardowe wyjście. Łączenie tej opcji z --get jest błędem.

-f, --file ścieżka

Ustawia rozmiar bufora FIFO lub potoku ze ścieżki, względnej wobec bieżącego katalogu roboczego. Można podać opcję wielokrotnie, aby wpłynąć na różne pliki, można to również uczynić w połączeniu z --fd. Opcja ta jest zwykle używana wobec FIFO, lecz działa również na potokach anonimowych (nienazwanych), takich jak w /proc/PID/fd. Zmiany rozmiaru bufora FIFO nie są zachowywane po przeładowaniu systemu.

-n, --fd deskryptor-pliku

ustawia rozmiar bufora potoku lub FIFO przekazanego do pipesz jako podany numer deskryptora pliku. Można podać opcję wielokrotnie, aby wpłynąć na różne pliki, można to również uczynić w połączeniu z --file. Do najczęstszych deskryptorów plików udostępnione są skróty; dotyczy to deskryptora plików 0 (standardowe wejście), 1 (standardowe wyjście) i 2 (standardowe wyjście błędów). W większości sytuacji powinny okazać się one wystarczające.

-i, --stdin

Skrót --fd 0.

-o, --stdout

Skrót --fd 1.

-e, --stderr

Skrót --fd 2.

-c, --check

Wychodzi, bez wykonywania polecenia, gdyby przy operowaniu na pliku lub deskryptorze plików wystąpił jakiś błąd. Domyślnym zachowaniem w takim przypadku jest wypisanie ostrzeżenia na standardowe wyjście błędów i kontynuowanie.

-q, --quiet

Nie informuje o niekrytycznych błędach na standardowym wyjściu błędów. Opcja nie wpływa na zwykłe wyjście opcji --get, --verbose, --help i --version.

-v, --verbose

Przy łącznym użyciu z --get, pipesz wypisze nagłówek z opisem nad tabelą. Jeśli się ją poda w innym przypadku, pipesz wypisze faktyczne rozmiary buforów ustawione przez jądro na standardowe wyjście błędów.

-h, --help

Wyświetla ten tekst i wychodzi.

-V, --version

Wyświetla wersję i wychodzi.

pipesz dd if=plik bs=1M | ...

Uruchamia dd(1) z powiększonym standardowym potokiem wyjściowym, co umożliwia uniknięcie przełączania kontekstów przy przekazywaniem potokiem dużych bloków danych.

pipesz -s1M -cf /run/moja-usługa.fifo

Ustawia rozmiar bufora potoku FIFO usługi na 1 048 576 bajtów. Jeśli rozmiar bufora nie może być ustawiony, pipesz wyjdzie z błędem.

echo witaj | pipesz -g

Wypisze rozmiar potoku używany przez powłokę w celu przekazania wejścia do pipesz. Ponieważ pipesz nie odczytuje standardowego wejścia, program może również zgłosić 6 nieodczytanych bajtów w potoku, w zależności od względnej chronologii zdarzeń.

find /proc/PID/fd -exec pipesz -gqf '{}' ';'

Wypisuje rozmiar i liczbę nieodczytanych bajtów ze wszystkich potoków używanych przez proces o identyfikatorze PID. Jeśli niektóre potoki są często pełne, pipesz może pomóc uniknąć efektu wąskiego gardła.

Linux obsługuje dostosowywanie rozmiarów buforów potoków od jądra 2.6.35. W tym wydaniu wprowadzono również /proc/sys/fs/pipe-max-size.

Niniejszy program do ustawiania rozmiarów buforów potoków korzysta z F_GETPIPE_SZ/F_SETPIPE_SZ fcntl(2).

Program korzysta z FIONREAD ioctl(2) do zgłaszania ilości nieodczytanych danych w potokach. Jeśli z jakiegoś powodu się to nie powiedzie, rozmiar nieodczytanych danych jest zgłaszany jako 0.

Przed Linuksem 4.9, pewne błędy wpływały na stosowanie pewnych ograniczeń zasobów przy ustawianiu rozmiarów buforów potoków. Więcej szczegółów w podręczniku pipe(7).

Nathan Sharp <nwsharp@live.com>

pipe(7)

Problemy należy zgłaszać w systemie śledzenia błędów https://github.com/util-linux/util-linux/issues.

Polecenie pipesz jest częścią pakietu util-linux, który można pobrać ze strony Archiwum jądra Linux https://www.kernel.org/pub/linux/utils/util-linux/.

2025-03-29 util-linux 2.41