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)