chiark / gitweb /
man: add h/H to tmpfiles.d(5)
[elogind.git] / man / tmpfiles.d.xml
1 <?xml version="1.0"?>
2 <!--*-nxml-*-->
3 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4 <!--
5   This file is part of systemd.
6
7   Copyright 2010 Brandon Philips
8
9   systemd is free software; you can redistribute it and/or modify it
10   under the terms of the GNU Lesser General Public License as published by
11   the Free Software Foundation; either version 2.1 of the License, or
12   (at your option) any later version.
13
14   systemd is distributed in the hope that it will be useful, but
15   WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17   Lesser General Public License for more details.
18
19   You should have received a copy of the GNU Lesser General Public License
20   along with systemd; If not, see <http://www.gnu.org/licenses/>.
21 -->
22 <refentry id="tmpfiles.d">
23
24   <refentryinfo>
25     <title>tmpfiles.d</title>
26     <productname>systemd</productname>
27
28     <authorgroup>
29       <author>
30         <contrib>Documentation</contrib>
31         <firstname>Brandon</firstname>
32         <surname>Philips</surname>
33         <email>brandon@ifup.org</email>
34       </author>
35     </authorgroup>
36   </refentryinfo>
37
38   <refmeta>
39     <refentrytitle>tmpfiles.d</refentrytitle>
40     <manvolnum>5</manvolnum>
41   </refmeta>
42
43   <refnamediv>
44     <refname>tmpfiles.d</refname>
45     <refpurpose>Configuration for creation, deletion and cleaning of
46     volatile and temporary files</refpurpose>
47   </refnamediv>
48
49   <refsynopsisdiv>
50     <para><filename>/etc/tmpfiles.d/*.conf</filename></para>
51     <para><filename>/run/tmpfiles.d/*.conf</filename></para>
52     <para><filename>/usr/lib/tmpfiles.d/*.conf</filename></para>
53   </refsynopsisdiv>
54
55   <refsect1>
56     <title>Description</title>
57
58     <para><command>systemd-tmpfiles</command> uses the configuration
59     files from the above directories to describe the creation,
60     cleaning and removal of volatile and temporary files and
61     directories which usually reside in directories such as
62     <filename>/run</filename> or <filename>/tmp</filename>.</para>
63
64     <para>Volatile and temporary files and directories are those
65     located in <filename>/run</filename> (and its alias
66     <filename>/var/run</filename>), <filename>/tmp</filename>,
67     <filename>/var/tmp</filename>, the API file systems such as
68     <filename>/sys</filename> or <filename>/proc</filename>, as well
69     as some other directories below <filename>/var</filename>.</para>
70
71     <para>System daemons frequently require private runtime
72     directories below <filename>/run</filename> to place communication
73     sockets and similar in. For these, consider declaring them in
74     their unit files using <varname>RuntimeDirectory=</varname> (see
75     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
76     for details), if this is feasible.</para>
77   </refsect1>
78
79   <refsect1>
80     <title>Configuration Format</title>
81
82     <para>Each configuration file shall be named in the style of
83     <filename><replaceable>package</replaceable>.conf</filename> or
84     <filename><replaceable>package</replaceable>-<replaceable>part</replaceable>.conf</filename>.
85     The second variant should be used when it is desirable to make it
86     easy to override just this part of configuration.</para>
87
88     <para>Files in <filename>/etc/tmpfiles.d</filename> override files
89     with the same name in <filename>/usr/lib/tmpfiles.d</filename> and
90     <filename>/run/tmpfiles.d</filename>. Files in
91     <filename>/run/tmpfiles.d</filename> override files with the same
92     name in <filename>/usr/lib/tmpfiles.d</filename>. Packages should
93     install their configuration files in
94     <filename>/usr/lib/tmpfiles.d</filename>. Files in
95     <filename>/etc/tmpfiles.d</filename> are reserved for the local
96     administrator, who may use this logic to override the
97     configuration files installed by vendor packages. All
98     configuration files are sorted by their filename in lexicographic
99     order, regardless of which of the directories they reside in. If
100     multiple files specify the same path, the entry in the file with
101     the lexicographically earliest name will be applied.  All other
102     conflicting entries will be logged as errors. When two lines are
103     prefix and suffix of each other, then the prefix is always
104     processed first, the suffix later. Otherwise, the
105     files/directories are processed in the order they are
106     listed.</para>
107
108     <para>If the administrator wants to disable a configuration file
109     supplied by the vendor, the recommended way is to place a symlink
110     to <filename>/dev/null</filename> in
111     <filename>/etc/tmpfiles.d/</filename> bearing the same filename.
112     </para>
113
114     <para>The configuration format is one line per path containing
115     type, path, mode, ownership, age, and argument fields:</para>
116
117     <programlisting>#Type Path        Mode UID  GID  Age Argument
118     d    /run/user   0755 root root 10d -
119     L    /tmp/foobar -    -    -    -   /dev/null</programlisting>
120
121     <para>Fields may be enclosed within quotes and contain C-style escapes.</para>
122
123     <refsect2>
124       <title>Type</title>
125
126       <para>The type consists of a single letter and optionally an
127       exclamation mark.</para>
128
129       <para>The following line types are understood:</para>
130
131       <variablelist>
132         <varlistentry>
133           <term><varname>f</varname></term>
134           <listitem><para>Create a file if it does not exist yet. If
135           the argument parameter is given, it will be written to the
136           file.</para></listitem>
137         </varlistentry>
138
139         <varlistentry>
140           <term><varname>F</varname></term>
141           <listitem><para>Create or truncate a file. If the argument
142           parameter is given, it will be written to the file.</para>
143           </listitem>
144         </varlistentry>
145
146         <varlistentry>
147           <term><varname>w</varname></term>
148           <listitem><para>Write the argument parameter to a file, if
149           the file exists.  Lines of this type accept shell-style
150           globs in place of normal path names. The argument parameter
151           will be written without a trailing newline. C-style
152           backslash escapes are interpreted.</para></listitem>
153         </varlistentry>
154
155         <varlistentry>
156           <term><varname>d</varname></term>
157           <listitem><para>Create a directory if it does not exist yet.
158           </para></listitem>
159         </varlistentry>
160
161         <varlistentry>
162           <term><varname>D</varname></term>
163           <listitem><para>Create or empty a directory.</para></listitem>
164         </varlistentry>
165
166         <varlistentry>
167           <term><varname>v</varname></term>
168           <listitem><para>Create a subvolume if the path does not
169           exist yet and the file system supports this
170           (btrfs). Otherwise create a normal directory, in the same
171           way as <varname>d</varname>.</para></listitem>
172         </varlistentry>
173
174         <varlistentry>
175           <term><varname>p</varname></term>
176           <term><varname>p+</varname></term>
177           <listitem><para>Create a named pipe (FIFO) if it does not
178           exist yet. If suffixed with <varname>+</varname> and a file
179           already exists where the pipe is to be created, it will be
180           removed and be replaced by the pipe.</para></listitem>
181         </varlistentry>
182
183         <varlistentry>
184           <term><varname>L</varname></term>
185           <term><varname>L+</varname></term>
186           <listitem><para>Create a symlink if it does not exist
187           yet. If suffixed with <varname>+</varname> and a file
188           already exists where the symlink is to be created, it will
189           be removed and be replaced by the symlink. If the argument
190           is omitted, symlinks to files with the same name residing in
191           the directory <filename>/usr/share/factory/</filename> are
192           created.</para></listitem>
193         </varlistentry>
194
195         <varlistentry>
196           <term><varname>c</varname></term>
197           <term><varname>c+</varname></term>
198           <listitem><para>Create a character device node if it does
199           not exist yet. If suffixed with <varname>+</varname> and a
200           file already exists where the device node is to be created,
201           it will be removed and be replaced by the device node. It is
202           recommended to suffix this entry with an exclamation mark to
203           only create static device nodes at boot, as udev will not
204           manage static device nodes that are created at runtime.
205           </para></listitem>
206         </varlistentry>
207
208         <varlistentry>
209           <term><varname>b</varname></term>
210           <term><varname>b+</varname></term>
211           <listitem><para>Create a block device node if it does not
212           exist yet. If suffixed with <varname>+</varname> and a file
213           already exists where the device node is to be created, it
214           will be removed and be replaced by the device node. It is
215           recommended to suffix this entry with an exclamation mark to
216           only create static device nodes at boot, as udev will not
217           manage static device nodes that are created at runtime.
218           </para></listitem>
219         </varlistentry>
220
221         <varlistentry>
222           <term><varname>C</varname></term>
223           <listitem><para>Recursively copy a file or directory, if the
224           destination files or directories do not exist yet. Note that
225           this command will not descend into subdirectories if the
226           destination directory already exists. Instead, the entire
227           copy operation is skipped. If the argument is omitted, files
228           from the source directory
229           <filename>/usr/share/factory/</filename> with the same name
230           are copied.</para></listitem>
231         </varlistentry>
232
233         <varlistentry>
234           <term><varname>x</varname></term>
235           <listitem><para>Ignore a path during cleaning. Use this type
236           to exclude paths from clean-up as controlled with the Age
237           parameter. Note that lines of this type do not influence the
238           effect of <varname>r</varname> or <varname>R</varname>
239           lines. Lines of this type accept shell-style globs in place
240           of normal path names.  </para></listitem>
241         </varlistentry>
242
243         <varlistentry>
244           <term><varname>X</varname></term>
245           <listitem><para>Ignore a path during cleaning. Use this type
246           to exclude paths from clean-up as controlled with the Age
247           parameter. Unlike <varname>x</varname>, this parameter will
248           not exclude the content if path is a directory, but only
249           directory itself. Note that lines of this type do not
250           influence the effect of <varname>r</varname> or
251           <varname>R</varname> lines. Lines of this type accept
252           shell-style globs in place of normal path names.
253           </para></listitem>
254         </varlistentry>
255
256         <varlistentry>
257           <term><varname>r</varname></term>
258           <listitem><para>Remove a file or directory if it exists.
259           This may not be used to remove non-empty directories, use
260           <varname>R</varname> for that.  Lines of this type accept
261           shell-style globs in place of normal path
262           names.</para></listitem>
263         </varlistentry>
264
265         <varlistentry>
266           <term><varname>R</varname></term>
267           <listitem><para>Recursively remove a path and all its
268           subdirectories (if it is a directory). Lines of this type
269           accept shell-style globs in place of normal path
270           names.</para></listitem>
271         </varlistentry>
272
273         <varlistentry>
274           <term><varname>z</varname></term>
275           <listitem><para>Adjust the access mode, group and user, and
276           restore the SELinux security context of a file or directory,
277           if it exists. Lines of this type accept shell-style globs in
278           place of normal path names.</para></listitem>
279         </varlistentry>
280
281         <varlistentry>
282           <term><varname>Z</varname></term>
283           <listitem><para>Recursively set the access mode, group and
284           user, and restore the SELinux security context of a file or
285           directory if it exists, as well as of its subdirectories and
286           the files contained therein (if applicable). Lines of this
287           type accept shell-style globs in place of normal path names.
288           </para></listitem>
289         </varlistentry>
290
291         <varlistentry>
292           <term><varname>t</varname></term>
293           <listitem><para>Set extended attributes. Lines of this type
294           accept shell-style globs in place of normal path names.
295           This can be useful for setting SMACK labels.
296           </para></listitem>
297         </varlistentry>
298
299         <varlistentry>
300           <term><varname>T</varname></term>
301           <listitem><para>Recursively set extended attributes. Lines
302           of this type accept shell-style globs in place of normal
303           path names.  This can be useful for setting SMACK labels.
304           </para></listitem>
305         </varlistentry>
306
307         <varlistentry>
308           <term><varname>h</varname></term>
309           <listitem><para>Set file/directory attributes. Lines of this type
310           accept shell-style globs in place of normal path names.</para>
311
312           <para>The format of the argument field is <varname>[+-=][aAcCdDeijsStTu]
313           </varname></para>
314
315           <para>The prefix <varname>+</varname> (the default one) causes the
316           attribute(s) to be added; <varname>-</varname> causes the
317           attribute(s) to be removed; <varname>=</varname>
318           causes the attributes to set exactly as the following letters.</para>
319           <para>The letters <literal>aAcCdDeijsStTu</literal> select the new
320           attributes for the files, see
321           <citerefentry><refentrytitle>chattr</refentrytitle>
322           <manvolnum>1</manvolnum></citerefentry> for further information.
323           </para>
324           <para>Passing only <varname>=</varname> as argument,
325           resets all the file attributes listed above. It has to be pointed
326           out that the <varname>=</varname> prefix, limits itself to the
327           attributes corresponding to the letters listed here. All other
328           attributes will be left untouched.
329           </para>
330
331           </listitem>
332         </varlistentry>
333
334         <varlistentry>
335           <term><varname>H</varname></term>
336           <listitem><para>Recursively set file/directory attributes. Lines
337           of this type accept shell-style globs in place of normal
338           path names.
339           </para></listitem>
340         </varlistentry>
341
342         <varlistentry>
343           <term><varname>a</varname></term>
344           <term><varname>a+</varname></term>
345           <listitem><para>Set POSIX ACLs (access control lists). If
346           suffixed with <varname>+</varname>, specified entries will
347           be added to the existing set.
348           <command>systemd-tmpfiles</command> will automatically add
349           the required base entries for user and group based on the
350           access mode of the file, unless base entries already exist
351           or are explictly specified. The mask will be added if not
352           specified explicitly or already present. Lines of this type
353           accept shell-style globs in place of normal path names. This
354           can be useful for allowing additional access to certain
355           files.</para></listitem>
356         </varlistentry>
357
358         <varlistentry>
359           <term><varname>A</varname></term>
360           <term><varname>A+</varname></term>
361           <listitem><para>Same as <varname>a</varname> and
362           <varname>a+</varname>, but recursive.</para></listitem>
363         </varlistentry>
364       </variablelist>
365
366       <para>If the exclamation mark is used, this line is only safe of
367       execute during boot, and can break a running system. Lines
368       without the exclamation mark are presumed to be safe to execute
369       at any time, e.g. on package upgrades.
370       <command>systemd-tmpfiles</command> will execute line with an
371       exclamation mark only if option <option>--boot</option> is
372       given.</para>
373
374       <para>For example:
375       <programlisting># Make sure these are created by default so that nobody else can
376       d /tmp/.X11-unix 1777 root root 10d
377
378       # Unlink the X11 lock files
379       r! /tmp/.X[0-9]*-lock</programlisting>
380       The second line in contrast to the first one would break a
381       running system, and will only be executed with
382       <option>--boot</option>.</para>
383     </refsect2>
384
385     <refsect2>
386       <title>Path</title>
387
388       <para>The file system path specification supports simple
389       specifier expansion. The following expansions are
390       understood:</para>
391
392       <table>
393         <title>Specifiers available</title>
394         <tgroup cols='3' align='left' colsep='1' rowsep='1'>
395           <colspec colname="spec" />
396           <colspec colname="mean" />
397           <colspec colname="detail" />
398           <thead>
399             <row>
400               <entry>Specifier</entry>
401               <entry>Meaning</entry>
402               <entry>Details</entry>
403             </row>
404           </thead>
405           <tbody>
406             <row>
407               <entry><literal>%m</literal></entry>
408               <entry>Machine ID</entry>
409               <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>
410             </row>
411             <row>
412               <entry><literal>%b</literal></entry>
413               <entry>Boot ID</entry>
414               <entry>The boot ID of the running system, formatted as string. See <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry> for more information.</entry>
415             </row>
416             <row>
417               <entry><literal>%H</literal></entry>
418               <entry>Host name</entry>
419               <entry>The hostname of the running system.</entry>
420             </row>
421             <row>
422               <entry><literal>%v</literal></entry>
423               <entry>Kernel release</entry>
424               <entry>Identical to <command>uname -r</command> output.</entry>
425             </row>
426             <row>
427               <entry><literal>%%</literal></entry>
428               <entry>Escaped %</entry>
429               <entry>Single percent sign.</entry>
430             </row>
431           </tbody>
432         </tgroup>
433       </table>
434     </refsect2>
435
436     <refsect2>
437       <title>Mode</title>
438
439       <para>The file access mode to use when creating this file or
440       directory. If omitted or when set to <literal>-</literal>, the
441       default is used: 0755 for directories, 0644 for all other file
442       objects.  For <varname>z</varname>, <varname>Z</varname> lines,
443       if omitted or when set to <literal>-</literal>, the file access
444       mode will not be modified. This parameter is ignored for
445       <varname>x</varname>, <varname>r</varname>,
446       <varname>R</varname>, <varname>L</varname>, <varname>t</varname>,
447       and <varname>a</varname> lines.</para>
448
449       <para>Optionally, if prefixed with <literal>~</literal>, the
450       access mode is masked based on the already set access bits for
451       existing file or directories: if the existing file has all
452       executable bits unset, all executable bits are removed from the
453       new access mode, too. Similarly, if all read bits are removed
454       from the old access mode, they will be removed from the new
455       access mode too, and if all write bits are removed, they will be
456       removed from the new access mode too. In addition, the
457       sticky/SUID/SGID bit is removed unless applied to a
458       directory. This functionality is particularly useful in
459       conjunction with <varname>Z</varname>.</para>
460     </refsect2>
461
462     <refsect2>
463       <title>UID, GID</title>
464
465       <para>The user and group to use for this file or directory. This
466       may either be a numeric user/group ID or a user or group
467       name. If omitted or when set to <literal>-</literal>, the
468       default 0 (root) is used. For <varname>z</varname>,
469       <varname>Z</varname> lines, when omitted or when set to
470       <literal>-</literal>, the file ownership will not be
471       modified. These parameters are ignored for <varname>x</varname>,
472       <varname>r</varname>, <varname>R</varname>,
473       <varname>L</varname>, <varname>t</varname>, and
474       <varname>a</varname> lines.</para>
475     </refsect2>
476
477     <refsect2>
478       <title>Age</title>
479       <para>The date field, when set, is used to decide what files to
480       delete when cleaning. If a file or directory is older than the
481       current time minus the age field, it is deleted. The field
482       format is a series of integers each followed by one of the
483       following postfixes for the respective time units:
484       <constant>s</constant>,
485       <constant>m</constant> or <constant>min</constant>,
486       <constant>h</constant>,
487       <constant>d</constant>,
488       <constant>w</constant>,
489       <constant>ms</constant>,
490       <constant>us</constant>,
491       respectively meaning seconds, minutes, hours, days, weeks,
492       milliseconds, and microseconds. Full names of the time units can
493       be used too.
494       </para>
495
496       <para>If multiple integers and units are specified, the time
497       values are summed. If an integer is given without a unit,
498       <constant>s</constant> is assumed.
499       </para>
500
501       <para>When the age is set to zero, the files are cleaned
502       unconditionally.</para>
503
504       <para>The age field only applies to lines
505       starting with <varname>d</varname>,
506       <varname>D</varname>, and
507       <varname>x</varname>. If omitted or set to
508       <literal>-</literal>, no automatic clean-up is
509       done.</para>
510
511       <para>If the age field starts with a tilde character
512       <literal>~</literal>, the clean-up is only applied to files and
513       directories one level inside the directory specified, but not
514       the files and directories immediately inside it.</para>
515     </refsect2>
516
517     <refsect2>
518       <title>Argument</title>
519
520       <para>For <varname>L</varname> lines determines the destination
521       path of the symlink. For <varname>c</varname>,
522       <varname>b</varname> determines the major/minor of the device
523       node, with major and minor formatted as integers, separated by
524       <literal>:</literal>, e.g.  <literal>1:3</literal>. For
525       <varname>f</varname>, <varname>F</varname>, and
526       <varname>w</varname> may be used to specify a short string that
527       is written to the file, suffixed by a newline. For
528       <varname>C</varname>, specifies the source file or
529       directory. For <varname>t</varname> determines extended
530       attributes to be set. For <varname>a</varname> determines
531       ACL attributes to be set. Ignored for all other lines.</para>
532     </refsect2>
533
534   </refsect1>
535
536   <refsect1>
537     <title>Example</title>
538     <example>
539       <title>/etc/tmpfiles.d/screen.conf example</title>
540       <para><command>screen</command> needs two directories created at
541       boot with specific modes and ownership.</para>
542
543       <programlisting>d /run/screens  1777 root root 10d
544       d /run/uscreens 0755 root root 10d12h
545       t /run/screen - - - - user.name="John Smith" security.SMACK64=screen</programlisting>
546     </example>
547     <example>
548       <title>/etc/tmpfiles.d/abrt.conf example</title>
549       <para><command>abrt</command> needs a directory created at boot with specific mode and ownership and its content should be preserved.</para>
550
551       <programlisting>d /var/tmp/abrt 0755 abrt abrt
552       x /var/tmp/abrt/*</programlisting>
553     </example>
554   </refsect1>
555
556   <refsect1>
557     <title>See Also</title>
558     <para>
559       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
560       <citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
561       <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
562       <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
563       <citerefentry project='man-pages'><refentrytitle>attr</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
564       <citerefentry project='man-pages'><refentrytitle>getfattr</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
565       <citerefentry project='man-pages'><refentrytitle>setfattr</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
566       <citerefentry project='man-pages'><refentrytitle>setfacl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
567       <citerefentry project='man-pages'><refentrytitle>getfacl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
568       <citerefentry project='man-pages'><refentrytitle>chattr</refentrytitle><manvolnum>1</manvolnum></citerefentry>
569     </para>
570   </refsect1>
571
572 </refentry>