ÜBERSICHT
flock [Optionen] Datei|Verzeichnis
Befehl [Argumente]
flock [Optionen] Datei|Verzeichnis -c
Befehl
flock [Optionen] Nummer
Das Dienstprogramm flock(2) verwaltet 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.
-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 von Befehl.
Bei der Ausführung wird der Flock-Prozess durch 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.
-V, --version
zeigt Versionsinformationen an und beendet das
Programm.
-h, --help
zeigt einen Hilfetext an und beendet das Programm.
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.
Beachten Sie, dass »shell> « in 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 lokale-Sperrdatei 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 praktisch in Shell-Skripten. 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/meine_Sperrdatei; 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.
H. Peter Anvin <hpa@zytor.com>
Copyright © 2003-2006 H. Peter Anvin. Dies ist freie
Software, in den Quellen finden Sie die Bedingungen zur Weitergabe. Es gibt
KEINE Garantie, auch nicht für die MARKTREIFE oder die TAUGLICHKEIT
FÜR EINEN BESTIMMTEN ZWECK.
Verwenden Sie zum Melden von Fehlern das Fehlererfassungssystem
auf <https://github.com/karelzak/util-linux/issues>.
Der Befehl flock ist Teil des Pakets util-linux, welches
heruntergeladen werden kann von: Linux Kernel Archive
<https://www.kernel.org/pub/linux/utils/util-linux/>.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Dr.
Tobias Quathamer <toddy@debian.org>, Helge Kreutzmann
<debian@helgefjell.de> und Mario Blättermann
<mario.blaettermann@gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General
Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer.