<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="file-hierarchy">

  <refentryinfo>
    <title>file-hierarchy</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>file-hierarchy</refentrytitle>
    <manvolnum>7</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>file-hierarchy</refname>
    <refpurpose>File system hierarchy overview</refpurpose>
  </refnamediv>

  <refsect1>
    <title>Description</title>

    <para>Operating systems using the
    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> system and service
    manager are organized based on a file system hierarchy inspired by UNIX, more specifically the hierarchy described
    in the <ulink url="http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html">File System Hierarchy</ulink>
    specification and <citerefentry
    project='man-pages'><refentrytitle>hier</refentrytitle><manvolnum>7</manvolnum></citerefentry>, with various
    extensions, partially documented in the <ulink
    url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG Base Directory
    Specification</ulink> and <ulink url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs">XDG User
    Directories</ulink>. This manual page describes a more generalized, though minimal and modernized subset of these
    specifications that defines more strictly the suggestions and restrictions systemd makes on the file system
    hierarchy.</para>

    <para>Many of the paths described here can be queried
    with the
    <citerefentry><refentrytitle>systemd-path</refentrytitle><manvolnum>1</manvolnum></citerefentry>
    tool.</para>
  </refsect1>

  <refsect1>
    <title>General Structure</title>

    <variablelist>
      <varlistentry>
        <term><filename>/</filename></term>
        <listitem><para>The file system root. Usually writable, but
        this is not required. Possibly a temporary file system
        (<literal>tmpfs</literal>). Not shared with other hosts
        (unless read-only). </para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/boot/</filename></term>
        <listitem><para>The boot partition used for bringing up the
        system. On EFI systems, this is possibly the EFI System
        Partition (ESP), also see
        <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
        This directory is usually strictly local to the host, and
        should be considered read-only, except when a new kernel or
        boot loader is installed. This directory only exists on
        systems that run on physical or emulated hardware that
        requires boot loaders.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/efi/</filename></term>
        <listitem><para>If the boot partition <filename>/boot/</filename> is maintained separately from the EFI System
        Partition (ESP), the latter is mounted here. Tools that need to operate on the EFI system partition should look
        for it at this mount point first, and fall back to <filename>/boot/</filename> — if the former doesn't qualify
        (for example if it is not a mount point or does not have the correct file system type
        <constant>MSDOS_SUPER_MAGIC</constant>).</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/etc/</filename></term>
        <listitem><para>System-specific configuration. This directory
        may or may not be read-only. Frequently, this directory is
        pre-populated with vendor-supplied configuration files, but
        applications should not make assumptions about this directory
        being fully populated or populated at all, and should fall
        back to defaults if configuration is
        missing.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/home/</filename></term>
        <listitem><para>The location for normal user's home
        directories. Possibly shared with other systems, and never
        read-only. This directory should only be used for normal
        users, never for system users. This directory and possibly the
        directories contained within it might only become available or
        writable in late boot or even only after user authentication.
        This directory might be placed on limited-functionality
        network file systems, hence applications should not assume the
        full set of file API is available on this directory.
        Applications should generally not reference this directory
        directly, but via the per-user <varname>$HOME</varname>
        environment variable, or via the home directory field of the
        user database.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/root/</filename></term>
        <listitem><para>The home directory of the root user. The root
        user's home directory is located outside of
        <filename>/home/</filename> in order to make sure the root user
        may log in even without <filename>/home/</filename> being
        available and mounted.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/srv/</filename></term>
        <listitem><para>The place to store general server payload,
        managed by the administrator. No restrictions are made how
        this directory is organized internally. Generally writable,
        and possibly shared among systems. This directory might become
        available or writable only very late during
        boot.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/tmp/</filename></term>
        <listitem><para>The place for small temporary files. This directory is usually mounted as a
        <literal>tmpfs</literal> instance, and should hence not be used for larger files. (Use
        <filename>/var/tmp/</filename> for larger files.) This directory is usually flushed at boot-up. Also,
        files that are not accessed within a certain time may be automatically deleted.</para>

        <para>If applications find the environment variable <varname>$TMPDIR</varname> set, they should use
        the directory specified in it instead of <filename>/tmp/</filename> (see <citerefentry
        project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry> and
        <ulink url="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">IEEE
        Std 1003.1</ulink> for details).</para>

        <para>Since <filename>/tmp/</filename> is accessible to other users of the system, it is essential
        that files and subdirectories under this directory are only created with <citerefentry
        project='man-pages'><refentrytitle>mkstemp</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
        <citerefentry
        project='man-pages'><refentrytitle>mkdtemp</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
        and similar calls. For more details, see <ulink url="https://systemd.io/TEMPORARY_DIRECTORIES">Using
        /tmp/ and /var/tmp/ Safely</ulink>.</para>
        </listitem>
      </varlistentry>

    </variablelist>
  </refsect1>

  <refsect1>
    <title>Runtime Data</title>

    <variablelist>
      <varlistentry>
        <term><filename>/run/</filename></term>
        <listitem><para>A <literal>tmpfs</literal> file system for system packages to place runtime data,
        socket files, and similar. This directory is flushed on boot, and generally writable for privileged
        programs only. Always writable.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/run/log/</filename></term>
        <listitem><para>Runtime system logs. System components may
        place private logs in this directory. Always writable, even
        when <filename>/var/log/</filename> might not be accessible
        yet.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/run/user/</filename></term>
        <listitem><para>Contains per-user runtime directories, each
        usually individually mounted <literal>tmpfs</literal>
        instances. Always writable, flushed at each reboot and when
        the user logs out. User code should not reference this
        directory directly, but via the
        <varname>$XDG_RUNTIME_DIR</varname> environment variable, as
        documented in the <ulink
        url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
        Base Directory Specification</ulink>.</para></listitem>
      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1>
    <title>Vendor-supplied Operating System Resources</title>

    <variablelist>

      <varlistentry>
        <term><filename>/usr/</filename></term>
        <listitem><para>Vendor-supplied operating system resources.
        Usually read-only, but this is not required. Possibly shared
        between multiple hosts. This directory should not be modified
        by the administrator, except when installing or removing
        vendor-supplied packages.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/bin/</filename></term>
        <listitem><para>Binaries and executables for user commands
        that shall appear in the <varname>$PATH</varname> search path.
        It is recommended not to place binaries in this directory that
        are not useful for invocation from a shell (such as daemon
        binaries); these should be placed in a subdirectory of
        <filename>/usr/lib/</filename> instead.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/include/</filename></term>
        <listitem><para>C and C++ API header files of system
        libraries.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/lib/</filename></term>
        <listitem><para>Static, private vendor data that is compatible
        with all architectures (though not necessarily
        architecture-independent). Note that this includes internal
        executables or other binaries that are not regularly invoked
        from a shell. Such binaries may be for any architecture
        supported by the system. Do not place public libraries in this
        directory, use <varname>$libdir</varname> (see below),
        instead.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/lib/<replaceable>arch-id</replaceable>/</filename></term>
        <listitem><para>Location for placing dynamic libraries into, also
        called <varname>$libdir</varname>. The architecture identifier
        to use is defined on <ulink
        url="https://wiki.debian.org/Multiarch/Tuples">Multiarch
        Architecture Specifiers (Tuples)</ulink> list. Legacy
        locations of <varname>$libdir</varname> are
        <filename>/usr/lib/</filename>,
        <filename>/usr/lib64/</filename>. This directory should not be
        used for package-specific data, unless this data is
        architecture-dependent, too. To query
        <varname>$libdir</varname> for the primary architecture of the
        system, invoke:
        <programlisting># systemd-path system-library-arch</programlisting></para></listitem>

      </varlistentry>

      <varlistentry>
        <term><filename>/usr/share/</filename></term>
        <listitem><para>Resources shared between multiple packages,
        such as documentation, man pages, time zone information, fonts
        and other resources. Usually, the precise location and format
        of files stored below this directory is subject to
        specifications that ensure interoperability.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/share/doc/</filename></term>
        <listitem><para>Documentation for the operating system or
        system packages.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/share/factory/etc/</filename></term>
        <listitem><para>Repository for vendor-supplied default
        configuration files. This directory should be populated with
        pristine vendor versions of all configuration files that may
        be placed in <filename>/etc/</filename>. This is useful to
        compare the local configuration of a system with vendor
        defaults and to populate the local configuration with
        defaults.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/usr/share/factory/var/</filename></term>

        <listitem><para>Similar to
        <filename>/usr/share/factory/etc/</filename>, but for vendor
        versions of files in the variable, persistent data directory
        <filename>/var/</filename>.</para></listitem>

      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1>
    <title>Persistent Variable System Data</title>

    <variablelist>
      <varlistentry>
        <term><filename>/var/</filename></term>
        <listitem><para>Persistent, variable system data. Writable during normal system operation. This
        directory might be pre-populated with vendor-supplied data, but applications should be able to
        reconstruct necessary files and directories in this subhierarchy should they be missing, as the
        system might start up without this directory being populated. Persistency is recommended, but
        optional, to support ephemeral systems. This directory might become available or writable only very
        late during boot. Components that are required to operate during early boot hence shall not
        unconditionally rely on this directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/var/cache/</filename></term>
        <listitem><para>Persistent system cache data. System
        components may place non-essential data in this directory.
        Flushing this directory should have no effect on operation of
        programs, except for increased runtimes necessary to rebuild
        these caches.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/var/lib/</filename></term>
        <listitem><para>Persistent system data. System components may
        place private data in this directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/var/log/</filename></term>
        <listitem><para>Persistent system logs. System components may
        place private logs in this directory, though it is recommended
        to do most logging via the
        <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
        and
        <citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry>
        calls.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/var/spool/</filename></term>
        <listitem><para>Persistent system spool data, such as printer
        or mail queues.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/var/tmp/</filename></term>
        <listitem><para>The place for larger and persistent temporary files. In contrast to
        <filename>/tmp/</filename>, this directory is usually mounted from a persistent physical file system
        and can thus accept larger files. (Use <filename>/tmp/</filename> for small ephemeral files.) This
        directory is generally not flushed at boot-up, but time-based cleanup of files that have not been
        accessed for a certain time is applied.</para>

        <para>If applications find the environment variable <varname>$TMPDIR</varname> set, they should use
        the directory specified in it instead of <filename>/var/tmp/</filename> (see <citerefentry
        project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
        details).</para>

        <para>The same security restrictions as with <filename>/tmp/</filename> apply: <citerefentry
        project='man-pages'><refentrytitle>mkstemp</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
        <citerefentry
        project='man-pages'><refentrytitle>mkdtemp</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
        and similar calls should be used. For further details about this directory, see <ulink
        url="https://systemd.io/TEMPORARY_DIRECTORIES">Using /tmp/ and /var/tmp/ Safely</ulink>.</para>
        </listitem>
      </varlistentry>

    </variablelist>
  </refsect1>

  <refsect1>
    <title>Virtual Kernel and API File Systems</title>

    <variablelist>
      <varlistentry>
        <term><filename>/dev/</filename></term>
        <listitem><para>The root directory for device nodes. Usually,
        this directory is mounted as a <literal>devtmpfs</literal>
        instance, but might be of a different type in
        sandboxed/containerized setups. This directory is managed
        jointly by the kernel and
        <citerefentry><refentrytitle>systemd-udevd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
        and should not be written to by other components. A number of
        special purpose virtual file systems might be mounted below
        this directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/dev/shm/</filename></term>
        <listitem><para>Place for POSIX shared memory segments, as
        created via
        <citerefentry project='die-net'><refentrytitle>shm_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
        This directory is flushed on boot, and is a
        <literal>tmpfs</literal> file system. Since all users have
        write access to this directory, special care should be taken
        to avoid name clashes and vulnerabilities. For normal users,
        shared memory segments in this directory are usually deleted
        when the user logs out. Usually, it is a better idea to use
        memory mapped files in <filename>/run/</filename> (for system
        programs) or <varname>$XDG_RUNTIME_DIR</varname> (for user
        programs) instead of POSIX shared memory segments, since these
        directories are not world-writable and hence not vulnerable to
        security-sensitive name clashes.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/proc/</filename></term>
        <listitem><para>A virtual kernel file system exposing the
        process list and other functionality. This file system is
        mostly an API to interface with the kernel and not a place
        where normal files may be stored. For details, see
        <citerefentry project='man-pages'><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
        A number of special purpose virtual file systems might be
        mounted below this directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/proc/sys/</filename></term>
        <listitem><para>A hierarchy below <filename>/proc/</filename>
        that exposes a number of kernel tunables. The primary way to
        configure the settings in this API file tree is via
        <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
        files. In sandboxed/containerized setups, this directory is
        generally mounted read-only.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/sys/</filename></term>
        <listitem><para>A virtual kernel file system exposing
        discovered devices and other functionality. This file system
        is mostly an API to interface with the kernel and not a place
        where normal files may be stored. In sandboxed/containerized
        setups, this directory is generally mounted read-only. A number
        of special purpose virtual file systems might be mounted below
        this directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/sys/fs/cgroup/</filename></term>
        <listitem><para>A virtual kernel file system exposing process
        control groups (cgroups). This file system is an API to interface
        with the kernel and not a place where normal files may be stored. On
        current systems running in the default "unified" mode,
        this directory serves as the mount point for the
        <literal>cgroup2</literal> filesystem, which provides a unified
        cgroup hierarchy for all resource controllers. On systems with
        non-default configurations, this directory may instead be a tmpfs
        filesystem containing mount points for various
        <literal>cgroup</literal> (v1) resource controllers; in such
        configurations, if <literal>cgroup2</literal> is mounted it will be
        mounted on <filename>/sys/fs/cgroup/unified/</filename>, but
        cgroup2 will not have resource controllers attached. In
        sandboxed/containerized setups, this directory may either not exist or
        may include a subset of functionality.
        </para></listitem>
      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1>
    <title>Compatibility Symlinks</title>

    <variablelist>
      <varlistentry>
        <term><filename>/bin/</filename></term>
        <term><filename>/sbin/</filename></term>
        <term><filename>/usr/sbin/</filename></term>

        <listitem><para>These compatibility symlinks point to
        <filename>/usr/bin/</filename>, ensuring that scripts and
        binaries referencing these legacy paths correctly find their
        binaries.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/lib/</filename></term>

        <listitem><para>This compatibility symlink points to
        <filename>/usr/lib/</filename>, ensuring that programs
        referencing this legacy path correctly find their
        resources.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/lib64/</filename></term>

        <listitem><para>On some architecture ABIs, this compatibility
        symlink points to <varname>$libdir</varname>, ensuring that
        binaries referencing this legacy path correctly find their
        dynamic loader. This symlink only exists on architectures
        whose ABI places the dynamic loader in this
        path.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>/var/run/</filename></term>

        <listitem><para>This compatibility symlink points to
        <filename>/run/</filename>, ensuring that programs referencing
        this legacy path correctly find their runtime
        data.</para></listitem>
      </varlistentry>

    </variablelist>
  </refsect1>

  <refsect1>
    <title>Home Directory</title>

    <para>User applications may want to place files and directories in
    the user's home directory. They should follow the following basic
    structure. Note that some of these directories are also
    standardized (though more weakly) by the <ulink
    url="https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG
    Base Directory Specification</ulink>. Additional locations for
    high-level user resources are defined by <ulink
    url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs">xdg-user-dirs</ulink>.</para>

    <variablelist>
      <varlistentry>
        <term><filename>~/.cache/</filename></term>

        <listitem><para>Persistent user cache data. User programs may
        place non-essential data in this directory. Flushing this
        directory should have no effect on operation of programs,
        except for increased runtimes necessary to rebuild these
        caches. If an application finds
        <varname>$XDG_CACHE_HOME</varname> set, it should use the
        directory specified in it instead of this
        directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>~/.config/</filename></term>

        <listitem><para>Application configuration and state. When a
        new user is created, this directory will be empty or not exist
        at all. Applications should fall back to defaults should their
        configuration or state in this directory be missing. If an
        application finds <varname>$XDG_CONFIG_HOME</varname> set, it
        should use the directory specified in it instead of this
        directory.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>~/.local/bin/</filename></term>

        <listitem><para>Executables that shall appear in the user's
        <varname>$PATH</varname> search path. It is recommended not to
        place executables in this directory that are not useful for
        invocation from a shell; these should be placed in a
        subdirectory of <filename>~/.local/lib/</filename> instead.
        Care should be taken when placing architecture-dependent
        binaries in this place, which might be problematic if the home
        directory is shared between multiple hosts with different
        architectures.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>~/.local/lib/</filename></term>

        <listitem><para>Static, private vendor data that is compatible
        with all architectures.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>~/.local/lib/<replaceable>arch-id</replaceable>/</filename></term>

        <listitem><para>Location for placing public dynamic libraries.
        The architecture identifier to use is defined on <ulink
        url="https://wiki.debian.org/Multiarch/Tuples">Multiarch
        Architecture Specifiers (Tuples)</ulink>
        list.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><filename>~/.local/share/</filename></term>

        <listitem><para>Resources shared between multiple packages,
        such as fonts or artwork. Usually, the precise location and
        format of files stored below this directory is subject to
        specifications that ensure interoperability. If an application
        finds <varname>$XDG_DATA_HOME</varname> set, it should use the
        directory specified in it instead of this
        directory.</para></listitem>
      </varlistentry>

    </variablelist>
  </refsect1>

  <refsect1>
    <title>Write Access</title>

    <refsect2>
      <title>Unprivileged Write Access</title>

      <para>Unprivileged processes generally lack write access to most of the hierarchy.</para>

      <para>The exceptions for normal users are
      <filename>/tmp/</filename>,
      <filename>/var/tmp/</filename>,
      <filename>/dev/shm/</filename>, as well as the home directory
      <varname>$HOME</varname> (usually found below
      <filename>/home/</filename>) and the runtime directory
      <varname>$XDG_RUNTIME_DIR</varname> (found below
      <filename>/run/user/</filename>) of the user, which are all
      writable.</para>

      <para>For unprivileged system processes, only
      <filename>/tmp/</filename>,
      <filename>/var/tmp/</filename> and
      <filename>/dev/shm/</filename> are writable. If an
      unprivileged system process needs a private writable directory in
      <filename>/var/</filename> or <filename>/run/</filename>, it is
      recommended to either create it before dropping privileges in the
      daemon code, to create it via
      <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
      fragments during boot, or via the
      <varname>StateDirectory=</varname> and <varname>RuntimeDirectory=</varname>
      directives of service units (see
      <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
      for details).</para>

      <para><filename>/tmp/</filename>, <filename>/var/tmp/</filename> and <filename>/dev/shm/</filename>
      should be mounted <option>nosuid</option> and <option>nodev</option>, which means that set-user-id mode
      and character or block special devices are not interpreted on those file systems. In general it is not
      possible to mount them <option>noexec</option>, because various programs use those directories for
      dynamically generated or optimized code, and with that flag those use cases would break. Using this
      flag is OK on special-purpose installations or systems where all software that may be installed is
      known and doesn't require such functionality. See the discussion of
      <option>nosuid</option>/<option>nodev</option>/<option>noexec</option> in <citerefentry
      project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> and
      <constant>PROT_EXEC</constant> in <citerefentry
      project='man-pages'><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
      </para>
    </refsect2>

    <refsect2>
      <title>Lack of Write Access on Read-Only Systems and during System Recovery</title>

      <para>As noted above, some systems operate with the <filename>/usr</filename> and
      <filename>/etc</filename> hierarchies mounted read-only, possibly only allowing write access during
      package upgrades. Other part of the hierarchy are generally mounted read-write (in particular
      <filename>/var</filename> and <filename>/var/tmp</filename>), but may be read-only when the kernel
      remounts the file system read-only in response to errors, or when the system is booted read-only for
      recovery purposes. To the extent reasonable, applications should be prepared to execute without write
      access, so that for example, failure to save non-essential data to <filename>/var/cache/</filename> or
      failure to create a custom log file under <filename>/var/log</filename> does not prevent the
      application from running.</para>

      <para>The <filename>/run/</filename> directory is available since the earliest boot and is always
      writable. It should be used for any runtime data and sockets, so that write access to e.g.
      <filename>/etc</filename> or <filename>/var</filename> is not needed.</para>
    </refsect2>
  </refsect1>

  <refsect1>
    <title>Node Types</title>

    <para>Unix file systems support different types of file nodes,
    including regular files, directories, symlinks, character and
    block device nodes, sockets and FIFOs.</para>

    <para>It is strongly recommended that <filename>/dev/</filename> is
    the only location below which device nodes shall be placed.
    Similarly, <filename>/run/</filename> shall be the only location to
    place sockets and FIFOs. Regular files, directories and symlinks
    may be used in all directories.</para>
  </refsect1>

  <refsect1>
    <title>System Packages</title>

    <para>Developers of system packages should follow strict rules when placing their files in the file
    system. The following table lists recommended locations for specific types of files supplied by the
    vendor.</para>

    <table>
      <title>System package vendor files locations</title>
      <tgroup cols='2' align='left' colsep='1' rowsep='1'>
        <colspec colname="directory" />
        <colspec colname="purpose" />
        <thead>
          <row>
      <entry>Directory</entry>
      <entry>Purpose</entry>
          </row>
        </thead>
        <tbody>
          <row>
      <entry><filename>/usr/bin/</filename></entry>
      <entry>Package executables that shall appear in the <varname>$PATH</varname> executable search path, compiled for any of the supported architectures compatible with the operating system. It is not recommended to place internal binaries or binaries that are not commonly invoked from the shell in this directory, such as daemon binaries. As this directory is shared with most other packages of the system, special care should be taken to pick unique names for files placed here, that are unlikely to clash with other package's files.</entry>
          </row>
          <row>
      <entry><filename>/usr/lib/<replaceable>arch-id</replaceable>/</filename></entry>
      <entry>Public shared libraries of the package. As above, be careful with using too generic names, and pick unique names for your libraries to place here to avoid name clashes.</entry>
          </row>
          <row>
      <entry><filename>/usr/lib/<replaceable>package</replaceable>/</filename></entry>
      <entry>Private static vendor resources of the package, including private binaries and libraries, or any other kind of read-only vendor data.</entry>
          </row>
          <row>
      <entry><filename>/usr/lib/<replaceable>arch-id</replaceable>/<replaceable>package</replaceable>/</filename></entry>
      <entry>Private other vendor resources of the package that are architecture-specific and cannot be shared between architectures. Note that this generally does not include private executables since binaries of a specific architecture may be freely invoked from any other supported system architecture.</entry>
          </row>
          <row>
      <entry><filename>/usr/include/<replaceable>package</replaceable>/</filename></entry>
      <entry>Public C/C++ APIs of public shared libraries of the package.</entry>
          </row>
        </tbody>
      </tgroup>
    </table>

    <para>Additional static vendor files may be installed in the
    <filename>/usr/share/</filename> hierarchy to the locations
    defined by the various relevant specifications.</para>

    <para>The following directories shall be used by the package for local configuration and files created
    during runtime:</para>

    <table>
      <title>System package variable files locations</title>
      <tgroup cols='2' align='left' colsep='1' rowsep='1'>
        <colspec colname="directory" />
        <colspec colname="purpose" />
        <thead>
          <row>
      <entry>Directory</entry>
      <entry>Purpose</entry>
          </row>
        </thead>
        <tbody>
          <row>
      <entry><filename>/etc/<replaceable>package</replaceable>/</filename></entry>
      <entry>System-specific configuration for the package. It is recommended to default to safe fallbacks if this configuration is missing, if this is possible. Alternatively, a <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> fragment may be used to copy or symlink the necessary files and directories from <filename>/usr/share/factory/</filename> during boot, via the <literal>L</literal> or <literal>C</literal> directives.</entry>
          </row>
          <row>
      <entry><filename>/run/<replaceable>package</replaceable>/</filename></entry>
      <entry>Runtime data for the package. Packages must be able to create the necessary subdirectories in this tree on their own, since the directory is flushed automatically on boot. Alternatively, a <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> fragment may be used to create the necessary directories during boot, or the <varname>RuntimeDirectory=</varname> directive of service units may be used to create them at service startup (see <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details).</entry>
          </row>
          <row>
      <entry><filename>/run/log/<replaceable>package</replaceable>/</filename></entry>
      <entry>Runtime log data for the package. As above, the package needs to make sure to create this directory if necessary, as it will be flushed on every boot.</entry>
          </row>
          <row>
      <entry><filename>/var/cache/<replaceable>package</replaceable>/</filename></entry>
      <entry>Persistent cache data of the package. If this directory is flushed, the application should work correctly on next invocation, though possibly slowed down due to the need to rebuild any local cache files. The application must be capable of recreating this directory should it be missing and necessary. To create an empty directory, a <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> fragment or the <varname>CacheDirectory=</varname> directive of service units (see <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>) may be used.</entry>
          </row>
          <row>
      <entry><filename>/var/lib/<replaceable>package</replaceable>/</filename></entry>
      <entry>Persistent private data of the package. This is the primary place to put persistent data that does not fall into the other categories listed. Packages should be able to create the necessary subdirectories in this tree on their own, since the directory might be missing on boot. To create an empty directory, a <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> fragment or the <varname>StateDirectory=</varname> directive of service units (see <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>) may be used.</entry>
          </row>
          <row>
      <entry><filename>/var/log/<replaceable>package</replaceable>/</filename></entry>
      <entry>Persistent log data of the package. As above, the package should make sure to create this directory if necessary, possibly using <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> or <varname>LogsDirectory=</varname> (see <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>), as it might be missing.</entry>
          </row>
          <row>
      <entry><filename>/var/spool/<replaceable>package</replaceable>/</filename></entry>
      <entry>Persistent spool/queue data of the package. As above, the package should make sure to create this directory if necessary, as it might be missing.</entry>
          </row>
        </tbody>
      </tgroup>
    </table>
  </refsect1>

  <refsect1>
    <title>User Packages</title>

    <para>Programs running in user context should follow strict rules when placing their own files in the
    user's home directory. The following table lists recommended locations in the home directory for specific
    types of files supplied by the vendor if the application is installed in the home directory. (User
    applications installed system-wide are covered by the rules outlined above for vendor files.)</para>

    <table>
      <title>Vendor package file locations under the home directory of the user</title>
      <tgroup cols='2' align='left' colsep='1' rowsep='1'>
        <colspec colname="directory" />
        <colspec colname="purpose" />
        <thead>
          <row>
      <entry>Directory</entry>
      <entry>Purpose</entry>
          </row>
        </thead>
        <tbody>
          <row>
      <entry><filename>~/.local/bin/</filename></entry>
      <entry>Package executables that shall appear in the <varname>$PATH</varname> executable search path. It is not recommended to place internal executables or executables that are not commonly invoked from the shell in this directory, such as daemon executables. As this directory is shared with most other packages of the user, special care should be taken to pick unique names for files placed here, that are unlikely to clash with other package's files.</entry>
          </row>
          <row>
      <entry><filename>~/.local/lib/<replaceable>arch-id</replaceable>/</filename></entry>
      <entry>Public shared libraries of the package. As above, be careful with using overly generic names, and pick unique names for your libraries to place here to avoid name clashes.</entry>
          </row>
          <row>
      <entry><filename>~/.local/lib/<replaceable>package</replaceable>/</filename></entry>
      <entry>Private, static vendor resources of the package, compatible with any architecture, or any other kind of read-only vendor data.</entry>
          </row>
          <row>
      <entry><filename>~/.local/lib/<replaceable>arch-id</replaceable>/<replaceable>package</replaceable>/</filename></entry>
      <entry>Private other vendor resources of the package that are architecture-specific and cannot be shared between architectures.</entry>
          </row>
        </tbody>
      </tgroup>
    </table>

    <para>Additional static vendor files may be installed in the <filename>~/.local/share/</filename>
    hierarchy, mirroring the subdirectories specified in the section "Vendor-supplied operating system
    resources" above.</para>

    <para>The following directories shall be used by the package for per-user local configuration and files
    created during runtime:</para>

    <table>
      <title>User package variable file locations</title>
      <tgroup cols='2' align='left' colsep='1' rowsep='1'>
        <colspec colname="directory" />
        <colspec colname="purpose" />
        <thead>
          <row>
      <entry>Directory</entry>
      <entry>Purpose</entry>
          </row>
        </thead>
        <tbody>
          <row>
      <entry><filename>~/.config/<replaceable>package</replaceable>/</filename></entry>
      <entry>User-specific configuration and state for the package. It is required to default to safe fallbacks if this configuration is missing.</entry>
          </row>
          <row>
      <entry><filename><varname>$XDG_RUNTIME_DIR</varname>/<replaceable>package</replaceable>/</filename></entry>
      <entry>User runtime data for the package.</entry>
          </row>
          <row>
      <entry><filename>~/.cache/<replaceable>package</replaceable>/</filename></entry>
      <entry>Persistent cache data of the package. If this directory is flushed, the application should work correctly on next invocation, though possibly slowed down due to the need to rebuild any local cache files. The application must be capable of recreating this directory should it be missing and necessary.</entry>
          </row>
        </tbody>
      </tgroup>
    </table>
  </refsect1>

  <refsect1>
    <title>See Also</title>
    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>hier</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>systemd-path</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
      <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
