TMPFILES.D(5) | tmpfiles.d | TMPFILES.D(5) |
tmpfiles.d - Konfiguration für die Erstellung, Löschung und Bereinigung von flüchtigen und temporären Dateien
/etc/tmpfiles.d/*.conf /run/tmpfiles.d/*.conf /usr/lib/tmpfiles.d/*.conf
~/.config/user-tmpfiles.d/*.conf $XDG_RUNTIME_DIR/user-tmpfiles.d/*.conf ~/.local/share/user-tmpfiles.d/*.conf … /usr/share/user-tmpfiles.d/*.conf
tmpfiles.d-Konfigurationsdateien bieten einen generischen Mechanismus an, um die Erstellung regulärer Dateien, Verzeichnisse, Pipes und Geräteknoten, Anpassungen ihres Zugriffsmodus, ihrer Eigentümerschaft, Attribute, Kontingente, Zuweisungen und ihres Kontextes und schließlich ihrer zeitbasierten Entfernung zu definieren. Es wird am häufigsten für flüchtige und temporäre Dateien und Verzeichnisse benutzt (wie solchen, die sich unterhalb von /run, /tmp, /var/tmp, den API-Dateisystemen wie /sys oder /proc, sowie einigen anderen Verzeichnissen unterhalb von /var befinden).
systemd-tmpfiles verwendet diese Konfiguration, um während des Systemstarts und nachfolgenden periodischen Bereinigungen flüchtige Dateien und Verzeichnisse zu erstellen. Siehe systemd-tmpfiles(5) für eine Beschreibung von systemd-tmpfiles-setup.service, systemd-tmpfiles-cleanup.service und zugehörigen Units.
System-Daemons benötigen häufig private Laufzeitverzeichnisse unterhalb von /run, um Kommunikations-Sockets und ähnliches abzuspeichern. Dafür sollte besser RuntimeDirectory= in ihren Unit-Dateien verwandt werden (siehe systemd.exec(5) für Details), falls die durch tmpfiles.d bereitgestellte Flexibilität nicht benötigt wird. Der Vorteil ist, dass die durch die Unit benötigte Konfiguration an einer Stelle zentralisiert ist und dass die Lebensdauer des Verzeichnisses an die Lebensdauer des Dienstes selbst gekoppelt ist. Ähnlich sollten StateDirectory=, CacheDirectory=, LogsDirectory= und ConfigurationDirectory= zur Erstellung von Verzeichnisse unterhalb von /var/lib/, /var/cache/, /var/log/ und /etc/ verwandt werden. tmpfiles.d sollte für Dateien verwandt werden, deren Lebensdauer unabhängig von irgendeinem Dienst ist oder die kompliziertere Konfiguration benötigen.
Jede Konfigurationsdatei muss in der Art Paket.conf oder Paket-Teil.conf benannt werden. Die zweite Variante sollte genutzt werden, wenn es wünschenswert ist, es leicht zu machen, nur diesen Teil der Konfiguration außer Kraft zu setzen.
Dateien in /etc/tmpfiles.d setzen Dateien mit dem gleichen Namen in /usr/lib/tmpfiles.d und /run/tmpfiles.d außer Kraft. Dateien in /run/tmpfiles.d setzen Dateien mit dem gleichen Namen in /usr/lib/tmpfiles.d außer Kraft. Pakete sollten ihre Konfigurationsdateien in /usr/lib/tmpfiles.d installieren. Dateien in /etc/tmpfiles.d sind für den lokalen Administrator reserviert, der diese Logik dazu verwenden kann, um vom Lieferanten installierte Pakete außer Kraft zu setzen. Alle Konfigurationsdateien werden in lexikographischer Reihenfolge nach ihrem Dateinamen sortiert, unabhängig davon, in welchem der Verzeichnisse sie sich befinden. Falls mehrere Dateien den gleichen Pfad festlegen, wird der Eintrag in der Datei mit dem lexikographisch kleinsten Namen angewandt. Alle anderen im Konflikt stehenden Einträge werden als Fehler protokolliert. Wenn zwei Zeilen Präfix- und Suffixpfad von dem jeweils anderen sind, wird das Präfix zuerst, das Suffix später erstellt (und falls das Entfernen für die Zeile gilt, ist die Reihenfolge umgedreht: das Suffix wird zuerst entfernt, das Präfix später). Zeilen, die Globs akzeptieren werden nach solchen, die keine Globs akzeptieren, verarbeitet. Falls mehrere Aktionen auf die gleiche Datei angewandt werden sollen (wie ACL, Xattr, Dateiatributsanpassungen), werden diese immer in der gleichen festen Reihenfolge vorgenommen. Außer für diese Fälle werden die Dateien/Verzeichnisse in der Reihenfolge verarbeitet, in der sie aufgeführt sind.
Falls der Administrator eine vom Lieferanten bereitgestellte Konfigurationsdatei außer Kraft setzen möchte, wird empfohlen, einen Symlink auf /dev/null in /etc/tmpfiles.d/, der den gleichen Dateinamen trägt, anzulegen.
Das Konfigurationsformat ist eine Zeile pro Pfad und enthält Typ-, Pfad-, Modus-, Eigentümerschaft-, Alter- und Argumentfelder:
#Typ Pfad Modus Benutzer Gruppe Alter Argument d /run/user 0755 root root 10d - L /tmp/foobar - - - - /dev/null
Felder dürfen in Anführungszeichen eingeschlossen werden und C-artige Maskierungen enthalten.
Der Typ besteht aus einem einzelnen Buchstaben und optional einem Ausrufezeichen und/oder einem Minuszeichen.
Die folgenden Zeilentypen werden verstanden:
f
F
w
d
D
e
Damit dieser Eintrag nützlich ist, muss mindestens eines der Argumente Modus, Benutzer, Gruppe oder Alter festgelegt sein, da andernfalls dieser Eintrag keinen Effekt hat. Als Ausnahme kann ein Eintrag ohne Effekt bei der Kombination mit ! nützlich sein, siehe Beispiele.
v
Ein mit diesem Zeilentyp erstelltes Subvolume wird keiner abstrakteren Kontingentgruppe zugeordnet. Verwenden Sie dafür q oder Q, die die Erstellung einfacher Kontingentgruppenhierarchien erlauben, siehe unten.
q
Falls das Subvolume bereits existiert, erfolgen an der Kontingenthierarchie keine Änderungen, unabhängig davon, ob das Subvolume bereits an die Kontingentgruppe angehängt ist. Siehe auch Q unten. Siehe btrfs-qgroup(8) für Details über das Btrfs-Kontingentgruppenkonzept.
Q
Effektiv hat dies eine ähnliche Wirkung wie q, führt allerdings eine neue abstrakte Kontingentgruppe für das festgelegte Subvolume ein, die zum Durchsetzen von Begrenzungen und Buchführungen für das festgelegte Subvolume und innerhalb darin erstellter Kinder-Subvolumes verwandt werden kann. Werden daher Subvolumes nur mittels q und Q erstellt, wird ein »Unterbaumkontingente«-Konzept implementiert. Für jedes Subvolume, für das Q gesetzt ist, wird eine »Unterbaum«-Kontingentgruppe erstellt und alle darin erstellten Kinder-Subvolumes werden ihr zugewiesen. Jedes Subvolume, für das q gesetzt ist, wird keine solche »Unterbaum«-Kontingentgruppe erhalten, aber es wird sichergestellt, dass sie zu der gleichen »Unterbaum«-Kontingentgruppe wie ihr direktes Eltern-Subvolume zugewiesen wird.
Es wird empfohlen, Q für Subvolumes zu verwenden, die typischerweise weitere Subvolumes enthalten und bei denen es wünschenswert ist, Buchführung und Kontingentbegrenzungen auf allen Kind-Subvolumes zusammen zu haben. Beispiele für Q sind typischerweise /home oder /var/lib/machines. q sollte dagegen für Subvolumes verwandt werden, die entweder normalerweise keine weiteren Subvolumes enthalten oder bei denen keine Buchführung und Kontingentbegrenzungen benötigt werden, die auf alle Kind-Subvolumes zusammen angewandt werden sollen. Beispiele für q sind typischerweise /var oder /var/tmp.
Wie mit q hat Q keine Wirkung auf die Kontingentgruppenhierarchie, falls das Subvolume bereits existiert, unabhängig davon, ob das Subvolume bereits zu der Kontingentgruppe gehört.
p, p+
L, L+
c, c+
b, b+
C
x
X
r
R
z
Z
t
T
h
Das Format des Argumentenfelds lautet [+-=][aAcCdDeijsStTu] . Das Präfix + (die Vorgabe) führt dazu, dass die Attribute hinzugfügt werden, - führt dazu, dass die Attribute entfernt werden, = führt dazu, dass die Attribute genau auf die nachfolgenden Buchstaben gesetzt werden. Die Buchstaben »aAcCdDeijsStTu« wählen die neuen Attribute für die Dateien aus, siehe chattr(1) für weitere Informationen.
Wird nur = übergeben, werden alle oben aufgeführten Dateiattribute zurückgesetzt. Es muss daraufhingewiesen werden, dass sich das Präfix = auf die Attribute beschränkt, die den hier aufgeführten Buchstaben entsprechen. Alle weiteren Attribute bleiben unverändert. Folgt keinen Symlinks.
H
a, a+
A, A+
Falls das Ausrufezeichen verwandt wird, ist diese Zeile nur bei der Ausführung während des Systemstarts sicher und kann ein laufendes System beschädigen. Bei Zeilen ohne Ausrufezeichen wird angenommen, dass ihr Aufruf jederzeit sicher ist, z.B. bei Paket-Upgrades. systemd-tmpfiles wird Zeilen mit einem Ausrufezeichen nur ausführen, falls die Option --boot angegeben ist.
Beispiel:
# Sicherstellen, dass diese standardmäßig erstellt werden, so dass es # kein anderer machen kann d /tmp/.X11-unix 1777 root root 10d # Lösen des X11-Sperrdatei-Links r! /tmp/.X[0-9]*-lock
Im Gegensatz zur ersten Zeile würde die zweite Zeile ein laufendes System beschädigen und wird daher nur mit --boot ausgeführt.
Falls das Minuszeichen verwandt wird, wird ein Fehlschlag bei der Ausführung dieser Zeile während der Erstellung (und nur der Erstellung) nicht zu der Ausführung von systemd-tmpfiles führen und einen Fehler zurückliefern.
Beispiel:
# Verändert sysfs, aber schlägt nicht fehl, falls es sich in einem Container mit schreibgeschütztem /proc befindet w- /proc/sys/vm/swappiness - - - - 10
Beachten Sie, dass für alle Zeilentypen, die zur Erstellung irgendeiner Art von Dateimodus führen (d.h. f/F, d/D/v/q/Q, p, L, c/b und C) führende Verzeichnisse implizit falls notwendig erstellt werden, die root gehören und den Zugriffsmodus 0755 haben. Um sicherzustellen, dass Sie sie mit anderen Modi oder Eigentümerschaften erstellen, verwenden Sie geeignete d-Zeilen.
Die Dateisystempfadfestlegung unterstützt einfache Kennzeichnererweiterungen, siehe unten. Der Pfad muss (nach Erweiterung) absolut sein.
Der bei der Erstellung der Datei oder des Verzeichnisses zu verwendende Dateizugriffsmodus. Falls weggelassen oder auf »-« gesetzt, wird die Vorgabe benutzt: 0755 für Verzeichnisse, 0644 für alle anderen Dateiobjekte. Für z-, Z-Zeilen, weggelassen oder auf »-« gesetzt, wird der Dateizugriffsmodus nicht verändert. Dieser Parameter wird für x-, r-, R-, L-, t- und a-Zeilen ignoriert.
Falls optional »~« vorangestellt wird, wird der Zugriffsmodus basierend auf Zugriffsbits von bereits bestehenden Dateien oder Verzeichnissen maskiert: falls die bestehende Datei alle Ausführ-Bits nicht gesetzt hat, werden auch alle Ausführ-Bits von dem neuen Zugriffsmodus entfernt. Ähnlicherweise werden alle Lese-Bits auch von dem neuen Zugriffsmodus entfernt, falls alle Lese-Bits von dem alten Zugriffsmodus entfernt sind und falls alle Schreib-Bits entfernt wurden, werden sie auch von dem neuen Zugriffsmodus entfernt. Zusätzlich wird auch das Bit sticky/SUID/SGID entfernt, außer es wird auf ein Verzeichnis angewandt. Diese Funktionalität ist insbesondere im Zusammenspiel mit Z nützlich.
Die für diese Datei oder dieses Verzeichnis zu verwendenden Benutzer und Gruppe. Dies kann entweder eine numerische Kennung oder ein Benutzer- oder Gruppenname sein. Falls weggelassen oder auf »-« gesetzt, wird der Benutzer und die Gruppe des Benutzers, der systemd-tmpfiles aufgerufen hat, verwandt. Für z- und Z-Zeilen, falls weggelassen oder auf »-« gesetzt, wird die Dateieigentümerschaft nicht geändert. Diese Parameter werden für x-, r-, R-, L-, t- und a-Zeilen ignoriert.
Das Datumsfeld, falls gesetzt, wird zur Entscheidung, welche Dateien beim Bereinigen gelöscht werden sollen, verwandt. Falls eine Datei oder ein Verzeichnis älter als die aktuelle Zeit minus des Feldes »Alter« ist, wird sie gelöscht. Das Feldformat ist eine Serie von Ganzzahlen, an die eine der nachfolgenden entsprechenden Zeiteinheiten angehängt ist: s (Sekunden), m oder min (Minuten), h (Stunden), d (Tage), w (Wochen), ms (Millisekunden) und us (Mikrosekunden). Es können auch die ausgeschriebenen englischen Namen verwandt werden.
Falls mehrere Ganzzahlen und Einheiten festgelegt werden, werden die Zeitwerte aufsummiert. Falls eine Ganzzahl ohne Einheit angegeben wird, wird s angenommen.
Wird das Alter auf Null gesetzt, werden die Dateien bedingungslos bereinigt.
Das Feld »Alter« wird nur auf Zeilen, die mit d, D, e, v, q, Q, C, x und X beginnen, angewandt. Falls weggelassen oder auf »-« gesetzt, erfolgt keine automatische Bereinigung.
Falls das Feld »Alter« mit einem Tildezeichen »~« beginnt, erfolgt die Bereinigung nur auf Dateien und Verzeichnisse eine Stufe innerhalb des festgelegten Verzeichnisses, aber nicht auf Dateien und Verzeichnisse direkt innerhalb davon.
Das Alter des Dateisystemeintrags wird von seinem letzten Änderungszeitstempel (mtime), seinem letzten Zugriffszeitstempel (atime) und (außer für Verzeichnisse) seinem letzten Statusänderungszeitstempel (ctime) bestimmt. Jeder der drei (oder zwei) Werte wird die Bereinigung verhindern, falls er neuer als die aktuelle Zeit minus des Feldes »Alter« ist.
Für L-Zeilen bestimmt es den Zielpfad des Symlinks. Für c und b-Zeilen bestimmt es den Major/Minor des Geräteknotens, wobei Major und Minor als Ganzzahlen getrennt durch »:« formatiert sind, z.B. »1:3«. Für f, F und w kann das Argument zur Festlegung einer kurzen Zeichenkette, die in eine Datei (abgeschlossen durch einen Zeilenumbruch) geschrieben wird, verwandt werden. Für C legt es die Quelldatei oder das Quellverzeichnis fest. Für t und T bestimmt es die zu setzenden erweiterten Attribute. Für a und A bestimmt es die zu setzenden ACL-Attribute. Für h und H bestimmt es die zu setzenden Dateiattribute. Für alle anderen Zeilen ignoriert.
Dieses Feld kann Kennzeichner enthalten, siehe unten.
Kennzeichner können in den Feldern »Pfad« und »Argument« verwandt werden. Ein unbekannter oder unauflösbarer Kennzeichner wird als ungültige Konfiguration behandelt. Die folgenden Erweiterungen werden verstanden:
Tabelle 1. Verfügbare Kennzeichner
Kennzeichner | Bedeutung | Details |
"%b" | Boot-Kennung | Die Boot-Kennung des laufenden Systems, formatiert als Zeichenkette. Siehe random(4) für weitere Informationen. |
"%C" | System- oder Benutzerzwischenspeicherverzeichnis | Im Modus --user ist dies identisch zu $XDG_CACHE_HOME, andernfalls /var/cache. |
"%h" | Benutzer-Home-Verzeichnis. | Dies ist das Home-Verzeichnis des Benutzers, der den Befehl ausführt. Im Falle der Systeminstanz löst sich dies auf »/root« auf. |
"%H" | Rechnername | Der Rechnername des laufenden Systems. |
"%L" | System- oder Benutzerprotokollierverzeichnis | Im Modus --user ist dies identisch zu $XDG_CONFIG_HOME mit angehängtem /log, andernfalls /var/log. |
"%m" | Maschinenkennung | Die Maschinenkennung des laufenden Systems, formatiert als Zeichenkette. Siehe machine-id(5) für weitere Informationen. |
"%S" | System- oder Benutzerzustandsverzeichnis | Im Modus --user ist dies identisch zu $XDG_CONFIG_HOME, andernfalls /var/lib. |
"%t" | System- oder Benutzerlaufzeitverzeichnis | Im Modus --user ist dies identisch zu $XDG_RUNTIME_DIR, andernfalls /run. |
"%T" | Verzeichnis für temporäre Dateien | Dies ist entweder /tmp oder der Pfad, auf den »$TMPDIR«, »$TEMP« oder »$TMP« gesetzt ist. |
"%g" | Benutzergruppe | Dies ist der Name der Gruppe, die den Befehl ausführt. Im Falle der Systeminstanz löst sich dies auf »root« auf. |
"%G" | Benutzer-GID | Dies ist die numerische GID der Gruppe, die den Befehl ausführt. Im Falle der Systeminstanz löst sich dies auf 0 auf. |
"%u" | Benutzername | Dies ist der Name des Benutzers, der den Befehl ausführt. Im Falle der Systeminstanz löst sich dies auf »root« auf. |
"%U" | Benutzer-UID | Dies ist die numerische UID des Benutzers, der den Befehl ausführt. Im Falle der Systeminstanz löst sich dies auf 0 auf. |
"%v" | Kernelveröffentlichung | Identisch zur Ausgabe von uname -r. |
"%V" | Verzeichnis für größere und dauerhafte temporäre Dateien | Dies ist entweder /var/tmp oder der Pfad, auf den »$TMPDIR«, »$TEMP« oder »$TMP« gesetzt ist. |
"%%" | Maskiertes »%« | Einzelnes Prozentzeichen. |
Beispiel 1. Erstellt Verzeichnisse mit festgelegtem Modus und Eigentümerschaft
screen(1) benötigt beim Systemstart zwei Verzeichnisse mit bestimmten Modi und Eigentümerschaften:
# /usr/lib/tmpfiles.d/screen.conf d /run/screens 1777 root screen 10d d /run/uscreens 0755 root screen 10d12h
Inhalte von /run/screens und /run/uscreens werden nach 10 bzw. 10 Tagen und 12 Stunden bereinigt.
Beispiel 2. Erstellt ein Verzeichnis mit einem SMACK-Attribut
D /run/cups - - - - t /run/cups - - - - security.SMACK64=printing user.attr-with-spaces="foo bar"
Das Verzeichnis wird root gehören und den Standardmodus haben. Seine Inhalte unterliegen nicht der zeitbasierten Bereinigung, werden aber gelöscht, wenn systemd-tmpfiles --remove ausgeführt wird.
Beispiel 3. Erstellt ein Verzeichnis und verhindert die Bereinigung seiner Inhalte
abrt(1) benötigt ein beim Systemstart erstelltes Verzeichnis mit bestimmten Modi und Eigentümerschaften, dessen Inhalte vor der automatischen, auf /var/tmp angewandten Bereinigung geschützt werden sollten:
# /usr/lib/tmpfiles.d/tmp.conf d /var/tmp 1777 root root 30d
# /usr/lib/tmpfiles.d/abrt.conf d /var/tmp/abrt 0755 abrt abrt -
Beispiel 4. Wendet Bereinigung beim Systemstart und zeitbasiert an
# /usr/lib/tmpfiles.d/dnf.conf r! /var/cache/dnf/*/*/download_lock.pid r! /var/cache/dnf/*/*/metadata_lock.pid r! /var/lib/dnf/rpmdb_lock.pid e /var/cache/dnf/ - - - 30d
Die Sperrdateien werden während des Systemstarts entfernt. Alle Dateien und Verzeichnisse in /var/cache/dnf/ werden entfernt, nachdem in 30 Tagen nicht auf sie zugegriffen wurde.
Beispiel 5. Den Inhalt eines Zwischenspeicherverzeichnisses beim Systemstart leeren
# /usr/lib/tmpfiles.d/krb5rcache.conf e! /var/cache/krb5rcache - - - 0
Alle Dateien und Unterverzeichnisse in /var/cache/krb5rcache/ werden beim Systemstart entfernt. Das Verzeichnis wird nicht erstellt.
/var/run/ ist ein veralteter Symlink auf /run/ und Anwendungen sollten Letzteres verwenden. systemd-tmpfiles wird bei der Verwendung von /var/run warnen.
systemd(1), systemd-tmpfiles(8), systemd-delta(1), systemd.exec(5), attr(5), getfattr(1), setfattr(1), setfacl(1), getfacl(1), chattr(1), btrfs-subvolume(8), btrfs-qgroup(8)
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> 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 <debian-l10n-german@lists.debian.org>.
systemd 241 |