FLOCK(1)                Dienstprogramme fur Benutzer                  FLOCK(1)

BEZEICHNUNG
       flock - Sperrungen in Shell-Skripten verwalten

UBERSICHT
       flock [Optionen] Datei|Verzeichnis Befehl [Argumente]

       flock [Optionen] Datei|Verzeichnis -c Befehl

       flock [Optionen] Nummer

BESCHREIBUNG
       Dieses Dienstprogramm verwaltet mit flock(2) eingerichtete Sperrungen
       uber Shell-Skripte oder die Befehlszeile.

       Die erste und die zweite der oben genannten Formen fuhren die Sperrung
       im Rahmen der Ausfuhrung eines Befehls aus, ahnlich wie su(1) oder
       newgrp(1) dies tun. Sie sperren eine angegebene Datei oder ein
       Verzeichnis, welche angelegt werden (ausreichende Berechtigungen
       vorausgesetzt), wenn sie noch nicht existieren. In der Voreinstellung
       wartet flock, bis die Sperrung verfugbar wird, wenn diese nicht
       unmittelbar erreicht werden kann.

       Die dritte Form verwendet eine offene Datei anhand der
       Dateideskriptors-Nummer. In den unten stehenden Beispielen sehen Sie,
       wie Sie dies verwenden konnen.

OPTIONEN
       -c, --command Befehl
           ubergibt einen einzelnen Befehl ohne Argumente an die Shell mit -c.

       -E, --conflict-exit-code Zahl
           ist der Exit-Status, wenn die Option -n verwendet wird und die
           kollidierende Sperrung besteht, oder wenn die Option -w verwendet
           und die Zeit uberschritten wird. Der Vorgabewert ist 1. Die Zahl
           muss im Bereich von 0 bis 255 liegen (einschliesslich dieser
           Werte).

       -F, --no-fork
           forkt nicht vor der Ausfuhrung des Befehls. Bei der Ausfuhrung wird
           der Flock-Prozess durch den Befehl ersetzt, der dann die Sperre
           halt. Diese Option ist zu --close inkompatibel, da andernfalls
           nichts zum Halten der Sperre ubrigbleiben wurde.

       -e, -x, --exclusive
           richtet eine exklusive Sperrung ein, gelegentlich auch
           Schreibsperre genannt. Dies ist die Voreinstellung.

       -n, --nb, --nonblock
           schlagt fehl, anstatt zu warten, wenn eine Sperre nicht unmittelbar
           eingerichtet werden kann. Siehe die Option -E fur den verwendeten
           Exit-Status.

       -o, --close
           schliesst den Dateideskriptor, fur den die Sperrung besteht, bevor
           der Befehl ausgefuhrt wird. Dies ist sinnvoll, wenn der Befehl
           einen Kindprozess erzeugt, der nicht ebenfalls die Sperrung
           erhalten soll.

       -s, --shared
           richtet eine gemeinsame Sperre ein, gelegentlich auch Lesesperre
           genannt.

       -u, --unlock
           lost eine Sperrung. Dies ist normalerweise nicht erforderlich, da
           eine Sperrung automatisch gelost wird, wenn die Datei geschlossen
           wird. Dennoch kann es in speziellen Fallen notig sein, zum Beispiel
           wenn die eingeschlossene Befehlsgruppe einen Hintergrundprozess
           geforkt haben konnte, welcher die Sperrung nicht ubernehmen soll.

       -w, --wait, --timeout Sekunden
           verursacht einen Fehlschlag, wenn die Sperrung nicht innerhalb der
           angegebenen Anzahl Sekunden eingerichtet werden kann. Dezimale
           Nachkommastellen sind zulassig. Siehe die Option -E fur den
           verwendeten Exit-Status. Wenn fur Sekunden Null angegeben ist, wird
           dies als --nonblock interpretiert.

       --fcntl
           Instead of flock(2), apply an fcntl(2) open file description lock
           (that is, using the F_OFD_SETLK (non-blocking) or F_OFD_SETLKW
           (blocking) commands). These locks are independent of those applied
           via flock(2), but, unlike traditional POSIX fcntl() locks (F_SETLK,
           F_SETLKW), have semantics matching those of flock(2).

       This is only available on kernel versions >= 3.15.

       --verbose
           meldet, wie lange es bis zur tatsachlichen Sperrung dauerte oder
           warum die Sperrung nicht erreicht werden konnte.

       -h, --help
           zeigt einen Hilfetext an und beendet das Programm.

       -V, --version
           Display version and exit.

EXIT-STATUS
       Der Befehl verwendet generell die Exit-Status-Werte aus <sysexits.h>,
       ausser wenn Sie die Optionen -n oder -w verwenden, welche beim
       Einrichten der Sperre einen Fehler melden, mit einem durch die Option
       -E festgelegten Exit-Status, oder 1 als Voreinstellung. Der durch -E
       angegebene Exit-Status muss im Bereich von 0 bis 255 liegen
       (einschliesslich dieser Werte).

       Wenn Sie die Befehl-Variante verwenden und die Ausfuhrung des
       Kindprozesses funktioniert, dann ist der Exit-Status jener des
       Kindprozess-Befehls.

ANMERKUNGEN
       flock erkennt keine Deadlocks. Siehe flock(2) fur Details.

       Einige Dateisysteme (zum Beispiel NFS und CIFS) haben B() nur
       unzureichend implementiert und B kann immer fehlschlagen. Fur Details,
       siehe flock(2), nfs(5) und mount.cifs(8). Abhangig von den
       Einhangeoptionen kann flock dort immer fehlschlagen.

BEISPIELE
       Beachten Sie, dass >>shell> << in den Beispielen eine
       Eingabeaufforderung darstellt.

       shell1> flock /tmp -c cat; shell2> flock -w .007 /tmp -c echo;
       /bin/echo $?
           richtet eine exklusive Sperrung des Verzeichnisses /tmp ein,
           woraufhin der zweite Befehl scheitert.

       shell1> flock -s /tmp -c cat; shell2> flock -s -w .007 /tmp -c echo;
       /bin/echo $?
           richtet eine gemeinsame Sperre des Verzeichnisses /tmp ein,
           woraufhin der zweite Befehl nicht scheitert. Beachten Sie, dass die
           Einrichtung einer exklusiven Sperre mit dem zweiten Befehl
           scheitern wird.

       shell> flock -x local-lock-file echo 'a b c'
           holt die exklusive >>lokale-Sperrdatei<<, bevor >>echo<< mit >>a b
           c<< ausgefuhrt wird.

       (; flock -n 9 || exit 1; # ... unter der Sperrung ausgefuhrte Befehle
       ...; ) 9>/var/lock/mylockfile
           Die Form ist in Shell-Skripten praktisch. Der Modus zum Offnen der
           Datei spielt fur flock keine Rolle. Die Verwendung von > oder >>
           ermoglicht das Anlegen der Sperrdatei, falls sie noch nicht
           existiert, wofur allerdings Schreibrechte erforderlich sind. Mit <
           wird vorausgesetzt, dass die Datei bereits existiert und nur
           Lesezugriffsrechte notig sind.

       [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0"
       "$@" || :
           Dies ist ein nutzlicher Baustein-Code fur Shell-Skripte. Setzen Sie
           es an den Anfang des zu sperrenden Skripts und es wird sich bei der
           ersten Ausfuhrung automatisch sperren. Wenn die Umgebungsvariable
           $FLOCKER fur das auszufuhrende Shell-Skript nicht gesetzt ist, dann
           fuhren Sie flock aus und richten eine exklusive nicht-blockierende
           Sperre ein (mit dem Skript selbst als Sperrdatei), bevor sie es mit
           den richtigen Argumenten selbst erneut ausfuhren. Es setzt auch die
           Umgebungsvariable FLOCKER auf den richtigen Wert, so dass es nicht
           erneut lauft.

       shell> exec 4<>/var/lock/mylockfile; shell> flock -n 4
           Diese Form ist fur die Sperrung einer Datei praktisch, ohne einen
           Unterprozess zu starten. Die Shell offnet die Sperrdatei zum Lesen
           und Schreiben als Dateideskriptor 4; dann wird flock zum Sperren
           des Deskriptors verwendet.

AUTOREN
       H. Peter Anvin <hpa@zytor.com>

COPYRIGHT
       Copyright (C) 2003-2006 H. Peter Anvin. Dies ist freie Software, in den
       Quellen finden Sie die Bedingungen zur Vervielfaltigung und Weitergabe.
       Es gibt KEINE Garantie, auch nicht fur die MARKTREIFE oder die
       TAUGLICHKEIT FUR EINEN BESTIMMTEN ZWECK.

SIEHE AUCH
       flock(2), fcntl(2)

FEHLER MELDEN
       For bug reports, use the issue tracker
       <https://github.com/util-linux/util-linux/issues>.

VERFUGBARKEIT
       Der Befehl flock ist Teil des Pakets util-linux, welches aus dem
       Linux-Kernel-Archiv
       <https://www.kernel.org/pub/linux/utils/util-linux/> heruntergeladen
       werden kann.

util-linux 2.41                   2025-03-29                          FLOCK(1)