Provided by: util-linux-locales_2.41-4ubuntu3_all bug

NUME

       flock - gestionează blocările din scripturi shell

REZUMAT

       flock [opțiuni] fișier|director comanda [argumente]

       flock [opțiuni] fișier|director -c comanda

       flock [opțiuni] număr

DESCRIERE

       Această utilitate gestionează blocările flock(2) din cadrul scripturilor de tip shell sau din linia de
       comandă.

       Prima și a doua dintre formele de mai sus învăluie blocarea în jurul executării unei comenzi, într-un mod
       similar cu su(1) sau newgrp(1). Acestea blochează un fișier sau un director specificat, care este creat
       (presupunând permisiunile corespunzătoare) dacă nu există deja. În mod implicit, în cazul în care
       blocarea nu poate fi obținută imediat, flock așteaptă până când blocarea este disponibilă.

       Cea de-a treia formă utilizează un fișier deschis prin descriptorul de fișier număr. A se vedea exemplele
       de mai jos pentru a afla cum poate fi utilizat.

OPȚIUNI

       -c, --command comanda
           Pasează o singură comandă, fără argumente, către shell cu -c.

       -E, --conflict-exit-code număr
           Starea de ieșire utilizată atunci când se utilizează opțiunea -n și există o blocare conflictuală sau
           când se utilizează opțiunea -w și se depășește timpul de așteptare. Valoarea implicită este 1.
           numărul trebuie să fie cuprins între 0 și 255.

       -F, --no-fork
           Nu creează o bifurcație înainte de a executa comanda. După execuție, procesul flock este înlocuit de
           comandă, care continuă să dețină blocarea. Această opțiune este incompatibilă cu opțiunea --close,
           deoarece altfel nu ar mai rămâne nimic care să păstreze blocajul.

       -e, -x, --exclusive
           Obține o blocare exclusivă, denumită uneori blocare la scriere. Aceasta este opțiunea implicită.

       -n, --nb, --nonblock
           Eșuează în loc să aștepte, dacă nu se poate obține imediat blocarea. A se vedea opțiunea -E pentru
           starea de ieșire utilizată.

       -o, --close
           Închide descriptorul de fișier în care este deținut blocajul înainte de a executa comanda. Acest
           lucru este util în cazul în care comanda generează un proces-copil care nu ar trebui să dețină
           blocarea.

       -s, --shared
           Obține o blocare partajată, denumită uneori blocare la citire.

       -u, --unlock
           Înlătură o blocare. De obicei, acest lucru nu este necesar, deoarece o blocare este eliminată automat
           atunci când fișierul este închis. Cu toate acestea, poate fi necesară în cazuri speciale, de exemplu,
           dacă grupul de comenzi închis a bifurcat un proces în fundal care nu ar trebui să dețină blocarea.

       -w, --wait, --timeout secunde
           Eșuează dacă blocarea nu poate fi obținută în secunde. Sunt permise valorile fracționare zecimale. A
           se vedea opțiunea -E pentru starea de ieșire utilizată. Numărul zero de secunde este interpretat ca
           fiind --nonblock.

       --fcntl
           În loc de flock(2), aplică o blocare a descrierii fișierului deschis fcntl(2) (adică, utilizând
           comenzile F_OFD_SETLK (neblocare) sau F_OFD_SETLKW (blocare)). Aceste blocaje sunt independente de
           cele aplicate prin flock(2), dar, spre deosebire de blocajele tradiționale POSIX fcntl() (F_SETLK,
           F_SETLKW), au o semantică care corespunde celei a flock(2).

       Aceasta este disponibilă numai pe versiunile de nucleu >= 3.15.

       --verbose
           Raportează cât timp a durat obținerea blocării sau de ce nu a putut fi obținută.

       -h, --help
           Afișează acest mesaj de ajutor și iese.

       -V, --version
           Afișează versiunea și iese.

STARE DE IEȘIRE

       Comanda utilizează valorile de stare de ieșire <sysexits.h> pentru orice lucru, cu excepția cazului în
       care se utilizează oricare dintre opțiunile -n sau -w, care raportează un eșec de achiziționare a
       blocării cu o stare de ieșire dată de opțiunea -E sau 1 în mod implicit. Starea de ieșire dată de -E
       trebuie să fie cuprinsă între 0 și 255.

       Atunci când se utilizează varianta comanda și se execută comanda-copil, atunci starea de ieșire este cea
       a comenzii-copil.

NOTE

       flock nu detectează blocajul blocării (deadlock). A se vedea flock(2) pentru detalii.

       Unele sisteme de fișiere (de exemplu, NFS și CIFS) au o implementare limitată a flock(2) și este posibil
       ca «flock» să eșueze întotdeauna. Pentru detalii, consultați flock(2), nfs(5) și mount.cifs(8). În
       funcție de opțiunile de montare, «flock» poate eșua întotdeauna acolo.

EXEMPLE

       Rețineți că „shell> ” din exemple este un prompt de linie de comandă.

       shell1> flock /tmp -c cat; shell2> flock -w .007 /tmp -c echo; /bin/echo $?
           Stabilește o blocare exclusivă a directorului /tmp și a doua comandă va eșua.

       shell1> flock -s /tmp -c cat; shell2> flock -s -w .007 /tmp -c echo; /bin/echo $?
           Stabilește blocarea partajată la directorul /tmp și a doua comandă nu va eșua. Observați că
           încercarea de a obține o blocare exclusivă cu a doua comandă ar eșua.

       shell> flock -x fișier-blocare-locală echo 'a b c'
           Preia blocarea exclusivă „fișier-blocare-locală” înainte de a rula echo cu „a b c”.

       (; flock -n 9 || exit 1; # ... comenzi executate sub blocare ...; ) 9>/var/lock/fișierul-meu-de-blocare
           Formatul este convenabil în cadrul scripturilor shell. Modul utilizat pentru a deschide fișierul nu
           contează pentru flock; utilizarea > sau >> permite crearea fișierului de blocare dacă acesta nu
           există deja, însă este necesară permisiunea de scriere. Utilizarea < presupune ca fișierul să existe
           deja, dar este necesară doar permisiunea de citire.

       [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
           Acesta este un cod auxiliar util pentru scripturile shell. Puneți-l în partea de sus a scriptului
           shell pe care doriți să îl blocați și se va bloca automat la prima execuție. Dacă variabila de mediu
           $FLOCKER nu este definită la scriptul de shell care este rulat, atunci execută flock și obține o
           blocare exclusivă fără blocare (folosind scriptul însuși ca fișier de blocare) înainte de a se
           reexecuta cu argumentele corecte. De asemenea, stabilește variabila de mediu FLOCKER la valoarea
           corectă, astfel încât să nu se mai execute din nou.

       shell> exec 4<>/var/lock/fișierul-meu-de-blocare; shell> flock -n 4
           Această formă este convenabilă pentru a bloca un fișier fără a genera un subproces. Shell-ul deschide
           fișierul de blocare pentru citire și scriere ca descriptor de fișier 4, apoi se utilizează flock
           pentru a bloca descriptorul.

AUTORI

       H. Peter Anvin <hpa@zytor.com>

DREPTURI DE AUTOR

       Drepturi de autor © 2003-2006 H. Peter Anvin. Acesta este un software liber; consultați sursa pentru
       condițiile de copiere. Nu există nicio garanție; nici măcar pentru COMERCIALIZARE sau ADECVARE LA UN SCOP
       PARTICULAR.

CONSULTAȚI ȘI

       flock(2), fcntl(2)

RAPORTAREA ERORILOR

       Pentru rapoarte de eroare, folosiți sistemul de urmărire al erorilor
       <https://github.com/util-linux/util-linux/issues>.

DISPONIBILITATE

       Comanda flock face parte din pachetul util-linux care poate fi descărcat de la Linux Kernel Archive
       <https://www.kernel.org/pub/linux/utils/util-linux/>.

util-linux 2.41                                    2025-07-02                                           FLOCK(1)