Scroll to navigation

FLOCK(1) Polecenia użytkownika FLOCK(1)

NAZWA

flock - zarządza blokadami ze skryptów powłoki

SKŁADNIA

flock [opcje] plik|katalog polecenie [argumenty]

flock [opcje] plik|katalog -c polecenie

flock [opcje] numer

OPIS

Program zarządza blokami flock(2) z poziomu skryptów powłoki lub z wiersza poleceń.

Pierwsza i druga z powyższych postaci wywołania wiąże blokadę z wykonaniem polecenia, w podobny sposób do su(1) lub newgrp(1). Blokowany jest podany plik lub katalog, który jest tworzony (przy odpowiednich uprawnieniach), jeśli jeszcze nie istniał. Domyślnie, jeśli blokada nie może być od razu pozyskana, flock poczeka, aż stanie się dostępna.

Trzecia postać używa otwartego pliku określonego numerem deskryptora pliku. Przykłady podane poniżej wskazują na potencjalne zastosowania.

OPCJE

-c, --command polecenie

Przekazuje powłoce pojedyncze polecenie, bez argumentów, używając opcji -c.

-E, --conflict-exit-code liczba

Status zakończenia, używany gdy stosowana jest opcja -n i istnieje sprzeczna blokada, albo gdy stosowana jest opcja -w i osiągnie się czas przeterminowania. Domyślną wartością jest 1. Liczba musi być z zakresu od 0 do 255.

-F, --no-fork

Nie rozgałęzia się przed wykonaniem polecenia. Przy wykonaniu, proces flock jest zastępowany poleceniem, które kontynuuje utrzymywanie blokady. Opcja ta jest niekompatybilna z --close, ponieważ wówczas nie istniałoby nic, co mogłoby utrzymywać blokadę.

-e, -x, --exclusive

Uzyskuje blokadę na wyłączność, czasem określaną jako blokadę zapisu. Tak jest domyślnie.

-n, --nb, --nonblock

Zawodzi zamiast czekać, gdy nie można od razu uzyskać blokady. Zob. opcję -E, aby poznać używany status zakończenia.

-o, --close

Zamyka deskryptor pliku na którym utrzymywana jest blokada, przed wykonaniem polecenia. Jest to przydatne, gdy polecenie tworzy proces potomny, który nie powinien utrzymywać blokady.

-s, --shared

Uzyskuje blokadę współdzieloną, czasem określaną jako blokadę odczytu.

-u, --unlock

Porzuca blokadę. Nie jest to zwykle wymagane, ponieważ blokada jest automatycznie porzucana przy zamykaniu pliku. Opcja może być wymagana w szczególnych przypadkach, na przykład gdy rozgraniczona grupa poleceń mogła zostać rozgałęziona w proces tła, który nie powinien utrzymywać blokady.

-w, --wait, --timeout sekundy

Zawodzi, gdy blokady nie uda się pozyskać w czasie sekund. Dozwolona jest wartość w postaci ułamka dziesiętnego. Opcja -E określa użyty w takim przypadku status zakończenia. Zerowa wartość sekund jest interpretowana jako podanie opcji --nonblock.

--fcntl

Zamiast flock(2), nakłada blokadę opisu otwartego pliku fcntl(2) (tzn. korzystając z poleceń F_OFD_SETLK (nieblokujące) lub F_OFD_SETLKW (blokujące)). Blokady te są niezależne od nałożonych za pomocą flock(2), lecz w przeciwieństwie do tradycyjnych blokad fcntl() POSIX (F_SETLK, F_SETLKW), mają zachowanie odpowiadające blokadom flock(2).

Dostępne tylko w wersjach jądra >= 3.15.

--verbose

Zgłasza jak długo zajęło pozyskanie blokady lub dlaczego nie udało się tego zrobić.

-h, --help

Wyświetla ten tekst i wychodzi.

-V, --version

Wyświetla wersję i wychodzi.

STATUS ZAKOŃCZENIA

Polecenie korzysta z wartości statusu zakończenia z <sysexits.h> we wszystkich przypadkach, z wyjątkiem podania opcji -n lub -w, zgłaszających niepowodzenia w pozyskaniu blokady ze statusem zakończenia podanym opcją -E lub z domyślną wartością 1. Status zakończenia określony przez -E musi mieścić się w zakresie 0 do 255.

Przy korzystaniu z wariantu polecenie, jeśli wykonanie polecenia potomnego powiodło się, statusem zakończenia będzie status polecenia potomnego.

UWAGI

flock nie wykrywa zakleszczeń. Więcej szczegółów w podręczniku flock(2).

Niektóre systemy plików (np. NFS i CIFS) mają ograniczoną implementację flock(2) i flock może zawsze zawieść. Więcej szczegółów w podręcznikach flock(2), nfs(5) oraz mount.cifs(8). W zależności od opcji montowania, flock może na nich zawsze zawodzić.

PRZYKŁADY

Proszę zwrócić uwagę, że "shell> " w poniższych przykładach jest znakiem zachęty wiersza poleceń.

shell1> flock /tmp -c cat; shell2> flock -w .007 /tmp -c echo; /bin/echo $?

Ustawia blokadę na wyłączność na katalogu /tmp, zatem drugie polecenie zawiedzie.

shell1> flock -s /tmp -c cat; shell2> flock -s -w .007 /tmp -c echo; /bin/echo $?

Ustawia blokadę współdzieloną na katalogu /tmp, zatem drugie polecenie nie zawiedzie. Proszę zauważyć, że próba uzyskania blokady na wyłączność drugim poleceniem zawiedzie.

shell> flock -x lokalny-plik-blokady echo 'a b c'

Uzyskuje blokadę na wyłączność "lokalny-plik-blokady" przed wykonaniem echo z argumentem 'a b c'.

(; flock -n 9 || exit 1; # ... polecenia wykonane pod blokadą ...; ) 9>/var/lock/mojplikblokady

Postać ta jest wygodna w skryptach powłoki. Tryb, z którego korzysta się do otwarcia pliku nie ma znaczenia dla flock; korzystanie z > lub >> pozwala na utworzenie pliku blokady, jeśli jeszcze nie istnieje, jednak potrzebne jest do tego uprawnienie do zapisu. Użycie < wymaga, aby plik już istniał, ale wymaga jest wówczas tylko uprawnienie do odczytu.

[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :

Przydatny kod szablonowy do skryptów powłoki. Należy go umieścić na początku skryptu powłoki, który ma być objęty blokadą; zablokuje się on automatycznie przy pierwszym uruchomieniu. Jeśli zmienna środowiskowa $FLOCKER nie jest ustawiona, gdy skrypt powłoki zostanie uruchomiony, kod wykonuje flock oraz uzyskuje nieblokującą blokada na wyłączność (używając samego skryptu jako pliku blokady) przed ponownym wykonaniem się z prawidłowymi argumentami. Ustawia również zmienną środowiskową FLOCKER na prawidłową wartość, dzięki czemu polecenie nie będzie mogło być wykonane ponownie.

shell> exec 4<>/var/lock/mojplikblokady; shell> flock -n 4

Postać przydatna do blokowania pliku bez tworzenia podprocesu. Powłoka otwiera plik blokady do odczytu i zapisu jako deskryptor pliku 4, a następnie używa flock do zablokowania deskryptora.

AUTORZY

H. Peter Anvin <hpa@zytor.com>

PRAWA AUTORSKIE

Prawa autorskie zastrzeżone © 2003-2006 H. Peter Anvin. Jest to wolne oprogramowanie; warunki rozpowszechniania znajdują się w źródle programu. NIE ma gwarancji, nawet PRZYDATNOŚCI HANDLOWEJ czy PRZYDATNOŚCI DO OKREŚLONEGO CELU.

ZOBACZ TAKŻE

flock(2), fcntl(2)

ZGŁASZANIE BŁĘDÓW

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

DOSTĘPNOŚĆ

Polecenie flock 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-09-24 util-linux 2.41.2