noble (1) flock.1.gz

Provided by: util-linux-locales_2.39.3-9ubuntu6.2_all bug

BEZEICHNUNG

       flock - Sperrungen in Shell-Skripten verwalten

ÜBERSICHT

       flock [Optionen] Datei|Verzeichnis Befehl [Argumente]

       flock [Optionen] Datei|Verzeichnis -c Befehl

       flock [Optionen] Nummer

BESCHREIBUNG

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

       Die erste und die zweite der oben genannten Formen führen die Sperrung im Rahmen der Ausführung eines
       Befehls aus, ähnlich 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 verfügbar 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 können.

OPTIONEN

       -c, --command Befehl
           übergibt 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 überschritten wird. Der Vorgabewert ist 1. Die Zahl muss im
           Bereich von 0 bis 255 liegen (einschließlich dieser Werte).

       -F, --no-fork
           forkt nicht vor der Ausführung des Befehls. Bei der Ausführung wird der Flock-Prozess durch den
           Befehl ersetzt, der dann die Sperre hält. Diese Option ist zu --close inkompatibel, da andernfalls
           nichts zum Halten der Sperre übrigbleiben würde.

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

       -n, --nb, --nonblock
           schlägt fehl, anstatt zu warten, wenn eine Sperre nicht unmittelbar eingerichtet werden kann. Siehe
           die Option -E für den verwendeten Exit-Status.

       -o, --close
           schließt den Dateideskriptor, für den die Sperrung besteht, bevor der Befehl ausgeführt 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
           löst eine Sperrung. Dies ist normalerweise nicht erforderlich, da eine Sperrung automatisch gelöst
           wird, wenn die Datei geschlossen wird. Dennoch kann es in speziellen Fällen nötig sein, zum Beispiel
           wenn die eingeschlossene Befehlsgruppe einen Hintergrundprozess geforkt haben könnte, welcher die
           Sperrung nicht übernehmen soll.

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

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

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

       -V, --version
           zeigt Versionsinformationen an und beendet das Programm.

EXIT-STATUS

       Der Befehl verwendet generell die Exit-Status-Werte aus <sysexits.h>, außer 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 (einschließlich dieser Werte).

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

ANMERKUNGEN

       flock erkennt keine Deadlocks. Siehe flock(2) für Details.

       Einige Dateisysteme (zum Beispiel NFS und CIFS) haben B() nur unzureichend implementiert und B kann immer
       fehlschlagen. Für Details, siehe flock(2), nfs(5) und mount.cifs(8). Abhängig von den Einhängeoptionen
       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« ausgeführt wird.

       (; flock -n 9 || exit 1; # ... unter der Sperrung ausgeführte Befehle ...; ) 9>/var/lock/mylockfile
           Die Form ist in Shell-Skripten praktisch. Der Modus zum Öffnen der Datei spielt für flock keine
           Rolle. Die Verwendung von > oder >> ermöglicht das Anlegen der Sperrdatei, falls sie noch nicht
           existiert, wofür allerdings Schreibrechte erforderlich sind. Mit < wird vorausgesetzt, dass die Datei
           bereits existiert und nur Lesezugriffsrechte nötig sind.

       [ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
           Dies ist ein nützlicher Baustein-Code für Shell-Skripte. Setzen Sie es an den Anfang des zu
           sperrenden Skripts und es wird sich bei der ersten Ausführung automatisch sperren. Wenn die
           Umgebungsvariable $FLOCKER für das auszuführende Shell-Skript nicht gesetzt ist, dann führen 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 ausführen. Es setzt auch die
           Umgebungsvariable FLOCKER auf den richtigen Wert, so dass es nicht erneut läuft.

       shell> exec 4<>/var/lock/mylockfile; shell> flock -n 4
           Diese Form ist für die Sperrung einer Datei praktisch, ohne einen Unterprozess zu starten. Die Shell
           öffnet 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 © 2003-2006 H. Peter Anvin. Dies ist freie Software, in den Quellen finden Sie die Bedingungen
       zur Vervielfältigung und Weitergabe. Es gibt KEINE Garantie, auch nicht für die MARKTREIFE oder die
       TAUGLICHKEIT FÜR EINEN BESTIMMTEN ZWECK.

SIEHE AUCH

       flock(2)

FEHLER MELDEN

       Nutzen Sie zum Melden von Fehlern das Fehlererfassungssystem auf
       https://github.com/util-linux/util-linux/issues.

VERFÜGBARKEIT

       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.