Provided by: util-linux-locales_2.41.2-4ubuntu1_all 

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/>.
util-linux 2.41.2 2025-10-17 FLOCK(1)