2010-11-04 23:31:07 +03:00
<?xml version="1.0"?>
<!-- * - nxml - * -->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!--
This file is part of systemd.
Copyright 2010 Brandon Philips
systemd is free software; you can redistribute it and/or modify it
2012-04-12 02:20:58 +04:00
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
2010-11-04 23:31:07 +03:00
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2012-04-12 02:20:58 +04:00
Lesser General Public License for more details.
2010-11-04 23:31:07 +03:00
2012-04-12 02:20:58 +04:00
You should have received a copy of the GNU Lesser General Public License
2010-11-04 23:31:07 +03:00
along with systemd; If not, see <http: / / w w w . g n u . o r g / l i c e n s e s /> .
-->
<refentry id= "tmpfiles.d" >
<refentryinfo >
<title > tmpfiles.d</title>
<productname > systemd</productname>
<authorgroup >
<author >
<contrib > Documentation</contrib>
<firstname > Brandon</firstname>
<surname > Philips</surname>
<email > brandon@ifup.org</email>
</author>
</authorgroup>
</refentryinfo>
<refmeta >
<refentrytitle > tmpfiles.d</refentrytitle>
<manvolnum > 5</manvolnum>
</refmeta>
<refnamediv >
<refname > tmpfiles.d</refname>
2011-02-13 17:08:15 +03:00
<refpurpose > Configuration for creation, deletion and
cleaning of volatile and temporary files</refpurpose>
2010-11-04 23:31:07 +03:00
</refnamediv>
2010-11-21 22:41:00 +03:00
<refsynopsisdiv >
<para > <filename > /etc/tmpfiles.d/*.conf</filename> </para>
2011-04-25 23:38:21 +04:00
<para > <filename > /run/tmpfiles.d/*.conf</filename> </para>
2012-03-14 17:25:05 +04:00
<para > <filename > /usr/lib/tmpfiles.d/*.conf</filename> </para>
2010-11-21 22:41:00 +03:00
</refsynopsisdiv>
2010-11-04 23:31:07 +03:00
<refsect1 >
<title > Description</title>
2012-06-10 20:32:11 +04:00
<para > <command > systemd-tmpfiles</command> uses the
configuration files from the above directories to describe the
creation, cleaning and removal of volatile and
temporary files and directories which usually reside
in directories such as <filename > /run</filename>
or <filename > /tmp</filename> .</para>
2014-03-03 20:14:07 +04:00
<para > Volatile and temporary files and directories are
those located in <filename > /run</filename> (and its
alias <filename > /var/run</filename> ),
<filename > /tmp</filename> ,
<filename > /var/tmp</filename> , the API file systems
such as <filename > /sys</filename> or
<filename > /proc</filename> , as well as some other
directories below <filename > /var</filename> .</para>
<para > System daemons frequently require private
runtime directories below <filename > /run</filename> to
2014-05-08 03:28:45 +04:00
place communication sockets and similar in. For these,
2014-03-03 20:14:07 +04:00
consider declaring them in their unit files using
<varname > RuntimeDirectory=</varname>
(see <citerefentry > <refentrytitle > systemd.exec</refentrytitle> <manvolnum > 5</manvolnum> </citerefentry> for details),
if this is feasible.</para>
2010-11-04 23:31:07 +03:00
</refsect1>
<refsect1 >
2012-06-10 20:32:11 +04:00
<title > Configuration Format</title>
2010-11-04 23:31:07 +03:00
2012-06-10 20:26:11 +04:00
<para > Each configuration file shall be named in the
2013-12-24 19:21:45 +04:00
style of
<filename > <replaceable > package</replaceable> .conf</filename>
or
<filename > <replaceable > package</replaceable> -<replaceable > part</replaceable> .conf</filename> .
The second variant should be used when it is desirable
to make it easy to override just this part of
configuration.</para>
<para > Files in <filename > /etc/tmpfiles.d</filename>
override files with the same name in
<filename > /usr/lib/tmpfiles.d</filename> and
<filename > /run/tmpfiles.d</filename> . Files in
<filename > /run/tmpfiles.d</filename> override files
with the same name in
<filename > /usr/lib/tmpfiles.d</filename> . Packages
2012-06-10 20:26:11 +04:00
should install their configuration files in
2013-12-24 19:21:45 +04:00
<filename > /usr/lib/tmpfiles.d</filename> . Files in
<filename > /etc/tmpfiles.d</filename> are reserved for
the local administrator, who may use this logic to
override the configuration files installed by vendor
packages. All configuration files are sorted by their
2013-12-26 05:47:43 +04:00
filename in lexicographic order, regardless of which
of the directories they reside in. If multiple files
2013-12-24 19:21:45 +04:00
specify the same path, the entry in the file with the
lexicographically earliest name will be applied, all
2014-06-11 03:37:35 +04:00
all other conflicting entries will be logged as
errors. When two lines are prefix and suffix of each
other, then the prefix is always processed first, the
2014-06-28 02:48:28 +04:00
suffix later. Otherwise, the files/directories are
2014-06-11 03:37:35 +04:00
processed in the order they are listed.</para>
2012-06-10 20:26:11 +04:00
<para > If the administrator wants to disable a
2013-09-12 23:12:49 +04:00
configuration file supplied by the vendor, the
2012-06-10 20:26:11 +04:00
recommended way is to place a symlink to
<filename > /dev/null</filename> in
<filename > /etc/tmpfiles.d/</filename> bearing the
2013-06-27 23:51:44 +04:00
same filename.</para>
2011-04-25 23:38:21 +04:00
2012-06-10 20:32:11 +04:00
<para > The configuration format is one line per path
2013-12-24 19:21:45 +04:00
containing type, path, mode, ownership, age, and argument
2012-06-10 20:32:11 +04:00
fields:</para>
2010-11-11 01:01:20 +03:00
2013-12-24 19:21:45 +04:00
<programlisting > #Type Path Mode UID GID Age Argument
2012-01-17 18:04:12 +04:00
d /run/user 0755 root root 10d -
L /tmp/foobar - - - - /dev/null</programlisting>
2010-11-11 01:01:20 +03:00
<refsect2 >
2010-11-19 18:14:52 +03:00
<title > Type</title>
2013-09-17 20:02:02 +04:00
2013-12-21 05:25:39 +04:00
<para > The type consists of a single letter and
optionally an exclamation mark.</para>
2013-09-17 20:02:02 +04:00
<para > The following line types are understood:</para>
2010-11-11 01:01:20 +03:00
<variablelist >
<varlistentry >
<term > <varname > f</varname> </term>
2013-12-24 19:21:45 +04:00
<listitem > <para > Create a file if it does not exist yet. If the argument parameter is given, it will be written to the file.</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
<varlistentry >
<term > <varname > F</varname> </term>
2013-12-24 19:21:45 +04:00
<listitem > <para > Create or truncate a file. If the argument parameter is given, it will be written to the file.</para> </listitem>
2012-01-18 19:39:04 +04:00
</varlistentry>
<varlistentry >
<term > <varname > w</varname> </term>
2012-09-15 20:58:49 +04:00
<listitem > <para > Write the argument parameter to a file, if the file exists.
Lines of this type accept shell-style globs in place of normal path
names. The argument parameter will be written without a trailing
newline. C-style backslash escapes are interpreted.</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
<varlistentry >
<term > <varname > d</varname> </term>
2013-12-24 19:21:45 +04:00
<listitem > <para > Create a directory if it does not exist yet.</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
<varlistentry >
<term > <varname > D</varname> </term>
2013-12-24 19:21:45 +04:00
<listitem > <para > Create or empty a directory.</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
2011-07-12 05:56:56 +04:00
<varlistentry >
<term > <varname > p</varname> </term>
2014-06-18 01:50:22 +04:00
<term > <varname > p+</varname> </term>
<listitem > <para > Create a named
pipe (FIFO) if it does not
exist yet. If suffixed with
<varname > +</varname> and a
file already exists where the
2014-06-28 02:48:28 +04:00
pipe is to be created, it will
2014-06-18 01:50:22 +04:00
be removed and be replaced by
the pipe.</para> </listitem>
2011-07-12 05:56:56 +04:00
</varlistentry>
2012-01-17 18:04:12 +04:00
<varlistentry >
<term > <varname > L</varname> </term>
2014-06-16 15:21:07 +04:00
<term > <varname > L+</varname> </term>
<listitem > <para > Create a
symlink if it does not exist
yet. If suffixed with
<varname > +</varname> and a
file already exists where the
2014-06-28 02:48:28 +04:00
symlink is to be created, it
2014-06-16 15:21:07 +04:00
will be removed and be
replaced by the
2014-06-20 17:57:43 +04:00
symlink. If the argument is omitted,
symlinks to files with the same name
residing in the directory
<filename > /usr/share/factory/</filename>
are created.</para> </listitem>
2012-01-17 18:04:12 +04:00
</varlistentry>
<varlistentry >
<term > <varname > c</varname> </term>
2014-06-18 01:50:22 +04:00
<term > <varname > c+</varname> </term>
<listitem > <para > Create a
character device node if it
does not exist yet. If
suffixed with
<varname > +</varname> and a
file already exists where the
2014-06-28 02:48:28 +04:00
device node is to be created,
2014-06-18 01:50:22 +04:00
it will be removed and be
replaced by the device
node.</para> </listitem>
2012-01-17 18:04:12 +04:00
</varlistentry>
<varlistentry >
<term > <varname > b</varname> </term>
2014-06-18 01:50:22 +04:00
<term > <varname > b+</varname> </term>
<listitem > <para > Create a block
device node if it does not
exist yet. If suffixed with
<varname > +</varname> and a
file already exists where the
2014-06-28 02:48:28 +04:00
device node is to be created,
2014-06-18 01:50:22 +04:00
it will be removed and be
replaced by the device
node.</para> </listitem>
2012-01-17 18:04:12 +04:00
</varlistentry>
2014-06-11 01:02:40 +04:00
<varlistentry >
<term > <varname > C</varname> </term>
2014-06-19 21:36:08 +04:00
<listitem > <para > Recursively
copy a file or directory, if
the destination files or
2014-06-28 02:48:28 +04:00
directories do not exist
2014-06-19 21:36:08 +04:00
yet. Note that this command
will not descend into
subdirectories if the
destination directory already
2014-06-28 02:48:28 +04:00
exists. Instead, the entire
2014-06-19 21:36:08 +04:00
copy operation is
2014-06-20 17:57:43 +04:00
skipped. If the argument is omitted,
files from the source directory
<filename > /usr/share/factory/</filename>
with the same name are copied.</para> </listitem>
2014-06-11 01:02:40 +04:00
</varlistentry>
2010-11-11 01:01:20 +03:00
<varlistentry >
<term > <varname > x</varname> </term>
2011-02-12 11:31:25 +03:00
<listitem > <para > Ignore a path
during cleaning. Use this type
to exclude paths from clean-up
as controlled with the Age
parameter. Note that lines of
this type do not influence the
2013-12-24 19:21:45 +04:00
effect of <varname > r</varname>
or <varname > R</varname> lines.
Lines of this type accept
2011-02-12 11:31:25 +03:00
shell-style globs in place of
2013-12-24 19:21:45 +04:00
normal path names.
</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
2013-01-18 19:13:08 +04:00
<varlistentry >
<term > <varname > X</varname> </term>
<listitem > <para > Ignore a path
2013-10-03 17:47:26 +04:00
during cleaning. Use this type
to exclude paths from clean-up
as controlled with the Age
2013-12-24 19:21:45 +04:00
parameter. Unlike
<varname > x</varname> , this
2013-10-03 17:47:26 +04:00
parameter will not exclude the
2013-12-24 19:21:45 +04:00
content if path is a
directory, but only directory
itself. Note that lines of
this type do not influence the
effect of <varname > r</varname>
or <varname > R</varname> lines.
Lines of this type accept
shell-style globs in place of
normal path names.
</para> </listitem>
2013-01-18 19:13:08 +04:00
</varlistentry>
2010-11-11 01:01:20 +03:00
<varlistentry >
<term > <varname > r</varname> </term>
2011-02-12 11:31:25 +03:00
<listitem > <para > Remove a file
2013-12-24 19:21:45 +04:00
or directory if it exists.
This may not be used to remove
non-empty directories, use
<varname > R</varname> for that.
Lines of this type accept
shell-style globs in place of
normal path
2011-02-12 11:31:25 +03:00
names.</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
<varlistentry >
<term > <varname > R</varname> </term>
2011-02-12 11:31:25 +03:00
<listitem > <para > Recursively
remove a path and all its
subdirectories (if it is a
directory). Lines of this type
accept shell-style globs in
place of normal path
names.</para> </listitem>
2010-11-11 01:01:20 +03:00
</varlistentry>
2011-12-16 02:04:37 +04:00
2011-12-16 21:27:35 +04:00
<varlistentry >
<term > <varname > z</varname> </term>
2014-06-11 01:42:16 +04:00
<listitem > <para > Adjust the
access mode, group and user,
and restore the SELinux security
context of a file or directory,
if it exists. Lines of this
type accept shell-style globs
in place of normal path names.
2011-12-16 21:27:35 +04:00
</para> </listitem>
</varlistentry>
2011-12-16 02:04:37 +04:00
<varlistentry >
<term > <varname > Z</varname> </term>
2012-03-13 00:51:39 +04:00
<listitem > <para > Recursively
2014-06-11 01:42:16 +04:00
set the access mode, group and
user, and restore the SELinux
security context of a file or
directory if it exists, as
well as of its subdirectories
and the files contained
therein (if applicable). Lines
of this type accept
shell-style globs in place of
normal path
2012-03-13 00:51:39 +04:00
names.</para> </listitem>
2011-12-16 02:04:37 +04:00
</varlistentry>
2010-11-11 01:01:20 +03:00
</variablelist>
2013-12-21 05:25:39 +04:00
<para > If the exclamation mark is used, this
line is only safe of execute during boot, and
can break a running system. Lines without the
exclamation mark are presumed to be safe to
execute at any time, e.g. on package upgrades.
<command > systemd-tmpfiles</command> will
execute line with an exclamation mark only if
2013-12-30 22:00:38 +04:00
option <option > --boot</option> is given.
2013-12-21 05:25:39 +04:00
</para>
<para > For example:
2014-02-14 18:56:19 +04:00
<programlisting > # Make sure these are created by default so that nobody else can
2013-12-21 05:25:39 +04:00
d /tmp/.X11-unix 1777 root root 10d
# Unlink the X11 lock files
2014-02-14 18:56:19 +04:00
r! /tmp/.X[0-9]*-lock</programlisting>
2013-12-21 05:25:39 +04:00
The second line in contrast to the first one
would break a running system, and will only be
2013-12-30 22:00:38 +04:00
executed with <option > --boot</option> .</para>
2010-11-11 01:01:20 +03:00
</refsect2>
2013-09-17 20:02:02 +04:00
<refsect2 >
<title > Path</title>
<para > The file system path specification supports simple specifier
expansion. The following expansions are
understood:</para>
<table >
<title > Specifiers available</title>
<tgroup cols= '3' align= 'left' colsep= '1' rowsep= '1' >
<colspec colname= "spec" />
<colspec colname= "mean" />
<colspec colname= "detail" />
<thead >
<row >
<entry > Specifier</entry>
<entry > Meaning</entry>
<entry > Details</entry>
</row>
</thead>
<tbody >
<row >
<entry > <literal > %m</literal> </entry>
<entry > Machine ID</entry>
<entry > The machine ID of the running system, formatted as string. See <citerefentry > <refentrytitle > machine-id</refentrytitle> <manvolnum > 5</manvolnum> </citerefentry> for more information.</entry>
</row>
<row >
<entry > <literal > %b</literal> </entry>
<entry > Boot ID</entry>
<entry > The boot ID of the running system, formatted as string. See <citerefentry > <refentrytitle > random</refentrytitle> <manvolnum > 4</manvolnum> </citerefentry> for more information.</entry>
</row>
<row >
<entry > <literal > %H</literal> </entry>
<entry > Host name</entry>
<entry > The hostname of the running system.</entry>
</row>
<row >
<entry > <literal > %v</literal> </entry>
<entry > Kernel release</entry>
<entry > Identical to <command > uname -r</command> output.</entry>
</row>
<row >
<entry > <literal > %%</literal> </entry>
<entry > Escaped %</entry>
<entry > Single percent sign.</entry>
</row>
</tbody>
</tgroup>
</table>
</refsect2>
2010-11-11 01:01:20 +03:00
<refsect2 >
2010-11-19 18:14:52 +03:00
<title > Mode</title>
2011-02-12 11:31:25 +03:00
<para > The file access mode to use when
creating this file or directory. If omitted or
2013-09-12 23:12:49 +04:00
when set to -, the default is used: 0755 for
2013-12-24 19:21:45 +04:00
directories, 0644 for all other file objects.
For <varname > z</varname> , <varname > Z</varname>
lines, if omitted or when set to
<literal > -</literal> , the file access mode
will not be modified. This parameter is
ignored for <varname > x</varname> ,
<varname > r</varname> , <varname > R</varname> ,
<varname > L</varname> lines.</para>
2014-06-11 12:14:07 +04:00
<para > Optionally, if prefixed with
2014-06-28 02:48:28 +04:00
<literal > ~</literal> , the access mode is masked
2014-06-11 12:14:07 +04:00
based on the already set access bits for
existing file or directories: if the existing
2014-06-28 02:48:28 +04:00
file has all executable bits unset, all
2014-06-11 12:14:07 +04:00
executable bits are removed from the new
2014-06-28 02:48:28 +04:00
access mode, too. Similarly, if all read bits
are removed from the old access mode, they will
2014-06-11 12:14:07 +04:00
be removed from the new access mode too, and
if all write bits are removed, they will be
removed from the new access mode too. In
2014-06-28 02:49:12 +04:00
addition, the sticky/SUID/SGID bit is removed unless
2014-06-11 12:14:07 +04:00
applied to a directory. This
functionality is particularly useful in
conjunction with <varname > Z</varname> .</para>
2010-11-19 18:14:52 +03:00
</refsect2>
<refsect2 >
<title > UID, GID</title>
<para > The user and group to use for this file
or directory. This may either be a numeric
user/group ID or a user or group name. If
2013-12-24 19:21:45 +04:00
omitted or when set to <literal > -</literal> ,
the default 0 (root) is used. For
<varname > z</varname> , <varname > Z</varname>
lines, when omitted or when set to -, the file
ownership will not be modified. These
parameters are ignored for
<varname > x</varname> , <varname > r</varname> ,
<varname > R</varname> , <varname > L</varname>
lines.</para>
2010-11-19 18:14:52 +03:00
</refsect2>
<refsect2 >
<title > Age</title>
2010-11-11 01:01:20 +03:00
<para > The date field, when set, is used to
decide what files to delete when cleaning. If
a file or directory is older than the current
2013-09-12 23:12:49 +04:00
time minus the age field, it is deleted. The
2010-11-11 01:01:20 +03:00
field format is a series of integers each
followed by one of the following
postfixes for the respective time units:</para>
<variablelist >
<varlistentry >
<term > <varname > s</varname> </term>
<term > <varname > min</varname> </term>
<term > <varname > h</varname> </term>
<term > <varname > d</varname> </term>
<term > <varname > w</varname> </term>
<term > <varname > ms</varname> </term>
<term > <varname > m</varname> </term>
<term > <varname > us</varname> </term> </varlistentry>
</variablelist>
2010-11-04 23:31:07 +03:00
2013-09-12 23:12:49 +04:00
<para > If multiple integers and units are specified, the time
2012-10-24 00:15:05 +04:00
values are summed up. If an integer is given without a unit,
2012-09-03 17:07:32 +04:00
s is assumed.
</para>
<para > When the age is set to zero, the files are cleaned
unconditionally.</para>
2010-11-04 23:31:07 +03:00
2013-12-24 19:21:45 +04:00
<para > The age field only applies to lines
starting with <varname > d</varname> ,
<varname > D</varname> , and
<varname > x</varname> . If omitted or set to
<literal > -</literal> , no automatic clean-up is
done.</para>
2012-06-20 11:05:50 +04:00
<para > If the age field starts with a tilde
2013-12-24 19:21:45 +04:00
character <literal > ~</literal> , the clean-up
is only applied to files and directories one
level inside the directory specified, but not
the files and directories immediately inside
it.</para>
2010-11-11 01:01:20 +03:00
</refsect2>
2010-11-04 23:31:07 +03:00
2012-01-17 18:04:12 +04:00
<refsect2 >
<title > Argument</title>
2013-12-24 19:21:45 +04:00
<para > For <varname > L</varname> lines
determines the destination path of the
symlink. For <varname > c</varname> ,
<varname > b</varname> determines the
2012-01-17 18:04:12 +04:00
major/minor of the device node, with major and
2013-12-24 19:21:45 +04:00
minor formatted as integers, separated by
<literal > :</literal> , e.g.
<literal > 1:3</literal> . For
<varname > f</varname> , <varname > F</varname> ,
and <varname > w</varname> may be used to
specify a short string that is written to the
2014-06-11 01:02:40 +04:00
file, suffixed by a newline. For
2014-06-28 02:48:28 +04:00
<varname > C</varname> , specifies the source file
2014-06-11 01:02:40 +04:00
or directory. Ignored for all other
lines.</para>
2012-01-17 18:04:12 +04:00
</refsect2>
2010-11-04 23:31:07 +03:00
</refsect1>
<refsect1 >
<title > Example</title>
<example >
<title > /etc/tmpfiles.d/screen.conf example</title>
<para > <command > screen</command> needs two directories created at boot with specific modes and ownership.</para>
2014-02-26 05:11:04 +04:00
<programlisting > d /run/screens 1777 root root 10d
d /run/uscreens 0755 root root 10d12h</programlisting>
2010-11-04 23:31:07 +03:00
</example>
2013-08-22 16:47:49 +04:00
<example >
<title > /etc/tmpfiles.d/abrt.conf example</title>
<para > <command > abrt</command> needs a directory created at boot with specific mode and ownership and its content should be preserved.</para>
<programlisting > d /var/tmp/abrt 0755 abrt abrt
x /var/tmp/abrt/*</programlisting>
</example>
2010-11-04 23:31:07 +03:00
</refsect1>
<refsect1 >
<title > See Also</title>
<para >
2011-02-13 17:08:15 +03:00
<citerefentry > <refentrytitle > systemd</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry> ,
2012-06-27 18:30:57 +04:00
<citerefentry > <refentrytitle > systemd-tmpfiles</refentrytitle> <manvolnum > 8</manvolnum> </citerefentry> ,
2014-03-03 20:14:07 +04:00
<citerefentry > <refentrytitle > systemd-delta</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > systemd.exec</refentrytitle> <manvolnum > 5</manvolnum> </citerefentry>
2010-11-04 23:31:07 +03:00
</para>
</refsect1>
</refentry>