FHS#

The Filesystem Hierarchy Standard defines the standard layout of a Linux system. Which directories must exist at the root, what each one is for, and what user space is allowed to write into. Distributions add their own conventions on top, but the top level is portable.

Path

Purpose

/

Root of the entire filesystem tree.

/bin

Essential user binaries (modern distros symlink to /usr/bin).

/sbin

Essential system binaries for the superuser (symlink to /usr/sbin).

/boot

Kernel images, initramfs, bootloader configuration.

/dev

Device nodes (/dev/sda, /dev/null, /dev/random).

/etc

System configuration files.

/home

User home directories (one per user).

/lib

Essential shared libraries (modern distros symlink to /usr/lib).

/lib64

64-bit shared libraries on multi-arch systems (symlink to /usr/lib64).

/media

Mount points for removable media (USB, optical).

/mnt

Mount points for temporarily-mounted filesystems.

/opt

Optional, self-contained third-party packages.

/proc

Kernel virtual filesystem; one directory per running process.

/root

The root user’s home directory (not the same as /).

/run

Runtime data since boot (PID files, sockets); cleared at boot.

/srv

Data for services this host provides (web, FTP).

/sys

Kernel virtual filesystem exposing devices and kernel state.

/tmp

Temporary files; usually cleared on reboot.

/usr

Distribution-provided programs, libraries, docs, headers.

/var

Variable data such as logs, spools, and caches.

/ (Root)#

The single root of the filesystem tree. Every absolute path begins here; everything else is layered on top via mounts. The root partition is mounted read-only by the kernel during early boot, then remounted read-write once the initramfs has confirmed the disk is healthy.

$ df -h /
$ findmnt /

/bin, /sbin, /lib, /lib64#

Symlinks into /usr on modern distributions. The /usr-merge transition consolidated essential and non-essential binaries into a single tree, eliminating the historical split that existed back when /usr was often a separately-mounted filesystem. Most distros completed it between 2012 and 2020.

Path

Target

/bin

/usr/bin

/sbin

/usr/sbin

/lib

/usr/lib

/lib64

/usr/lib64

$ readlink /bin
$ ls -l / | grep -E 'bin|lib'

/boot#

Files needed to bring up the kernel. Kernel image, initramfs, and bootloader configuration such as GRUB or systemd-boot. Often a small separate partition mounted only at boot, so corruption of the rest of the disk does not prevent the system from starting up and recovering. On UEFI systems the EFI System Partition is mounted at /boot/efi.

Path

Purpose

/boot/vmlinuz-*

Compressed kernel image

/boot/initramfs-*.img

Initial ramdisk (Debian uses initrd.img-*)

/boot/config-*

Kernel build configuration

/boot/System.map-*

Kernel symbol map

/boot/grub/

GRUB bootloader files

/boot/grub/grub.cfg

GRUB configuration (regenerated by update-grub)

/boot/efi/

EFI System Partition mount point (UEFI systems)

/boot/efi/EFI/

Per-OS EFI bootloaders

/boot/loader/

systemd-boot configuration

$ ls /boot
$ sudo update-grub
$ uname -r

/dev#

Device nodes. Character devices, block devices, and pseudo-devices the kernel exposes. Populated dynamically by udev / systemd-udevd at boot and on hotplug events, replacing the old static /dev tarballs distributions used to ship with thousands of pre-created nodes. Today the tree only contains hardware actually present.

Path

Purpose

/dev/sda

First SATA / SCSI / USB block device

/dev/sdb

Second SATA / SCSI / USB block device

/dev/sda1

First partition on /dev/sda

/dev/nvme0n1

First NVMe namespace

/dev/nvme0n1p1

First partition of first NVMe namespace

/dev/null

Discards writes; reads return EOF

/dev/zero

Endless stream of zero bytes

/dev/full

Always returns ENOSPC on write

/dev/random

Blocking cryptographic randomness

/dev/urandom

Non-blocking randomness (use this)

/dev/tty

Controlling terminal of the calling process

/dev/console

System console

/dev/pts/

Pseudo-terminal slaves (per SSH / terminal session)

/dev/shm/

POSIX shared memory (tmpfs)

/dev/disk/by-uuid/

Disks indexed by filesystem UUID

/dev/disk/by-label/

Disks indexed by filesystem label

/dev/disk/by-id/

Disks indexed by stable hardware ID

/dev/disk/by-path/

Disks indexed by physical bus path

/dev/loop0

Loop device for mounting a file as a block device

/dev/mapper/

Device-mapper nodes (LUKS, LVM, multipath)

/dev/md0

Software-RAID array (mdadm)

/dev/input/

Input devices (keyboards, mice)

$ ls /dev/disk/by-uuid/
$ head -c 32 /dev/urandom | base64
$ command > /dev/null 2>&1

/etc#

System-wide configuration. Plain text, version-controllable, and the single source of truth for system identity, accounts, services, networking, and boot-time behavior. Per-package config typically lives in a package-named subdirectory; drop-in fragments under *.d/ directories are the modern convention for layering site overrides on top of distribution defaults.

Path

Purpose

/etc/passwd

User accounts (no passwords; identity only)

/etc/shadow

Password hashes (root-readable only)

/etc/group

Groups and members

/etc/gshadow

Group password hashes

/etc/hosts

Static hostname → IP mappings (consulted before DNS)

/etc/hostname

System hostname

/etc/resolv.conf

DNS resolver config

/etc/nsswitch.conf

Order of name-service sources

/etc/fstab

Persistent mount config

/etc/mtab

Currently-mounted FS (often → /proc/self/mounts)

/etc/sudoers

Sudo policy (edit with visudo)

/etc/sudoers.d/

Sudo policy fragments

/etc/ssh/

SSH client and server config

/etc/systemd/

systemd configuration

/etc/cron.d/

System cron job fragments

/etc/cron.daily/

Scripts run daily

/etc/cron.hourly/

Scripts run hourly

/etc/cron.weekly/

Scripts run weekly

/etc/cron.monthly/

Scripts run monthly

/etc/crontab

System crontab

/etc/apt/

APT sources and config (Debian / Ubuntu)

/etc/yum.repos.d/

yum / dnf repos (RHEL family)

/etc/os-release

Distribution identity

/etc/profile

System-wide login-shell init

/etc/profile.d/

Drop-in scripts sourced by /etc/profile

/etc/bash.bashrc

System-wide interactive bash init

/etc/sysctl.conf

Kernel-parameter overrides applied at boot

/etc/sysctl.d/

Drop-in sysctl fragments

/etc/security/

PAM limits and security configuration

/etc/pam.d/

Per-service PAM config

/etc/network/

ifupdown network config (Debian)

/etc/netplan/

Netplan YAML (modern Ubuntu)

/etc/NetworkManager/

NetworkManager profiles

/etc/iptables/

Persistent iptables rules

/etc/nftables.conf

nftables ruleset

/etc/timezone

Timezone name (Debian)

/etc/localtime

Timezone binary (symlink under /usr/share/zoneinfo)

/etc/default/

Defaults for init / package scripts

$ cat /etc/os-release
$ sudo visudo
$ sudo systemctl reload sshd

/etc/ssh/#

SSH client and server configuration. Daemon settings, host key pairs, drop-in config fragments, and the moduli file used during Diffie-Hellman key exchange. Editing files here changes how the system authenticates inbound and outbound SSH sessions for every user on the host, so changes are typically version-controlled and reviewed.

Path

Purpose

/etc/ssh/sshd_config

SSH daemon configuration

/etc/ssh/ssh_config

System-wide SSH client defaults

/etc/ssh/sshd_config.d/

Drop-in daemon config fragments

/etc/ssh/ssh_host_rsa_key

Host RSA private key

/etc/ssh/ssh_host_ed25519_key

Host Ed25519 private key

/etc/ssh/ssh_host_*_key.pub

Corresponding public keys

/etc/ssh/moduli

DH group exchange parameters

$ sudo sshd -t
$ ssh-keyscan -t ed25519 localhost

/etc/systemd/#

systemd configuration root. Holds local unit files and overrides, manager-wide settings, and per-service configuration for journald, logind, resolved, networkd, and timesyncd. Anything written here takes precedence over the distribution-shipped equivalents under /usr/lib/systemd/, which is the recommended place to keep local customizations isolated from package upgrades.

Path

Purpose

/etc/systemd/system/

Local unit files and overrides

/etc/systemd/system.conf

Manager-wide systemd configuration

/etc/systemd/user.conf

Per-user manager configuration

/etc/systemd/journald.conf

Journal (logging) configuration

/etc/systemd/logind.conf

logind configuration

/etc/systemd/resolved.conf

resolved configuration

/etc/systemd/networkd.conf

networkd configuration

$ systemctl list-unit-files | head
$ sudo systemctl edit nginx.service

/home#

User home directories, one subdirectory per user account. Per-user configuration lives in dotfiles (filenames starting with ., hidden from default ls). Modern systems also follow the XDG base-directory spec, splitting state across .config, .cache, .local/share, and .local/state.

Path

Purpose

/home/<user>/

Individual user’s home

/home/<user>/.bashrc

Interactive Bash init

/home/<user>/.bash_profile

Login-shell init (Bash)

/home/<user>/.profile

POSIX login-shell environment

/home/<user>/.zshrc

Zsh init

/home/<user>/.ssh/

Per-user SSH config and keys

/home/<user>/.gnupg/

GnuPG keyring and config

/home/<user>/.config/

User-level app config (XDG_CONFIG_HOME)

/home/<user>/.cache/

User-level cache (XDG_CACHE_HOME)

/home/<user>/.local/share/

User-installed app data (XDG_DATA_HOME)

/home/<user>/.local/bin/

User-installed binaries (added to PATH)

/home/<user>/Documents/

Standard XDG Documents directory

/home/<user>/Downloads/

Standard XDG Downloads directory

/home/<user>/Pictures/

Standard XDG Pictures directory

/home/<user>/Videos/

Standard XDG Videos directory

$ echo "$HOME"
$ getent passwd $(id -un) | cut -d: -f6

~/.ssh/#

Per-user SSH configuration and keys. Contains the user’s key pairs, the list of host fingerprints they trust, the list of public keys allowed to log in to this account, and any per-host client options. Critically permission-sensitive. Most files require mode 0600 and the directory itself 0700, or sshd will refuse the login.

Path

Purpose

~/.ssh/id_ed25519

Private key (mode 0600)

~/.ssh/id_ed25519.pub

Public key

~/.ssh/authorized_keys

Public keys allowed to log in (mode 0600)

~/.ssh/known_hosts

Remembered host fingerprints

~/.ssh/config

Per-host client options

$ ssh-keygen -t ed25519 -C "me@host"
$ ssh-copy-id user@host

/media#

Auto-mount points for removable media (USB sticks, optical disks, phones, SD cards). Most desktop environments populate /media/<user>/<label> when media is inserted. udisks2 together with polkit arbitrates which logged-in user is allowed to mount what, so users without console sessions cannot silently access plugged-in devices.

Path

Purpose

/media/<user>/

Per-user mount root

/media/<user>/<label>

Auto-mounted volume by filesystem label

$ ls /media/$USER

/mnt#

Mount points for filesystems mounted manually or temporarily by an administrator. No standard subdirectory layout. Conventions vary by site (/mnt/data, /mnt/backup, /mnt/usb). Distinct from /media (which is reserved for desktop auto-mounts) by long-standing FHS convention. Admins reach for /mnt when scripting one-off mounts during recovery or migration.

Path

Purpose

/mnt/data

Conventional manual data mount

/mnt/backup

Conventional backup mount

/mnt/usb

Conventional USB mount

$ sudo mkdir -p /mnt/usb
$ sudo mount /dev/sdb1 /mnt/usb
$ sudo umount /mnt/usb

/opt#

Self-contained third-party software, installed outside the distribution’s package manager. Each vendor gets its own subdirectory holding its complete tree of binaries, libraries, and data, which keeps proprietary applications isolated from the rest of the system. Common for closed-source bundles such as Chrome, Zoom, and various IDEs that ship as a single drop-in archive.

Path

Purpose

/opt/<vendor>/

Vendor’s complete install

/opt/<vendor>/bin/

Vendor binaries (often added to PATH)

/opt/<vendor>/lib/

Vendor libraries

/opt/google/

Common real-world example, Google Chrome

/opt/zoom/

Common real-world example, Zoom client

$ ls /opt
$ /opt/google/chrome/google-chrome --version

/proc#

Kernel virtual filesystem (procfs). Each running process has a numbered subdirectory; the top level also exposes kernel state and tunables. Reads are evaluated by the kernel on each access, so the contents reflect live system state rather than anything stored on disk.

Path

Purpose

/proc/<pid>/

One directory per running process

/proc/self/

Symlink to the caller’s own /proc/<pid>

/proc/cpuinfo

CPU topology and flags

/proc/meminfo

Memory statistics

/proc/loadavg

Load average

/proc/uptime

System uptime

/proc/version

Kernel version

/proc/cmdline

Kernel boot command line

/proc/modules

Loaded kernel modules

/proc/interrupts

Per-IRQ counters

/proc/mounts

Currently mounted filesystems

/proc/net/

Per-protocol network tables

/proc/sys/

Tunable kernel parameters (sysctl)

$ nproc
$ awk '/MemTotal/ {print $2}' /proc/meminfo
$ uptime

/proc/<pid>/#

Per-process kernel-exposed state. Each running process has a numbered directory whose virtual files describe everything the kernel knows about it. Open file descriptors, memory map, environment, command line, namespaces, threads, scheduling stats, and resource limits. Reads return live values evaluated by the kernel at the moment of access.

Path

Purpose

/proc/<pid>/status

Human-readable process state

/proc/<pid>/cmdline

Launch command (NUL-separated)

/proc/<pid>/environ

Environment variables (NUL-separated)

/proc/<pid>/fd/

Open file descriptors (symlinks to targets)

/proc/<pid>/maps

Memory regions

/proc/<pid>/exe

Symlink to the executable file

/proc/<pid>/cwd

Symlink to the working directory

/proc/<pid>/ns/

Namespace handles

$ ls -l /proc/$$/fd
$ tr '\0' '\n' < /proc/self/cmdline
$ readlink /proc/$(pidof sshd)/exe

/proc/sys/#

Tunable kernel parameters, the backing store for sysctl. Each file maps one-to-one with a setting. Writing into the file changes kernel behavior immediately for the running system, while /etc/sysctl.conf and the /etc/sysctl.d/ drop-in directory make those changes persistent across reboots by re-applying them at start.

Path

Purpose

/proc/sys/net/ipv4/

IPv4 stack tunables

/proc/sys/net/ipv6/

IPv6 stack tunables

/proc/sys/kernel/

Kernel-wide tunables

/proc/sys/vm/

Virtual-memory tunables

/proc/sys/fs/

Filesystem tunables (e.g. file-max)

$ cat /proc/sys/net/ipv4/ip_forward
$ sudo sysctl -w net.ipv4.ip_forward=1

/root#

The root user’s home directory, not the same as /. It lives on the root partition rather than under /home so that root can still log in even when /home is on a separate volume that fails to mount during boot.

$ sudo ls -la /root

/run#

Volatile runtime state, recreated at every boot. Replaces the older practice of putting PID files and sockets under /var/run; /var/run and /var/lock now exist only as compatibility symlinks. Backed by a tmpfs so the directory starts empty after each reboot, which keeps stale PID files and lock files from confusing daemons across power-cycles.

Path

Purpose

/run/*.pid

PID files for daemons

/run/systemd/

systemd runtime state

/run/user/<uid>/

Per-user runtime dir (XDG_RUNTIME_DIR)

/run/lock/

Lock files

/run/log/journal/

Volatile systemd journal (when persistent storage is off)

/run/udev/

udev runtime state

/run/dbus/

D-Bus system socket

/run/NetworkManager/

NetworkManager runtime

$ ls /run/*.pid
$ echo "$XDG_RUNTIME_DIR"

/srv#

Data served by services this host provides (web roots, FTP shares, hosted git, NFS exports). Less universally adopted than other FHS directories. Some sites use it heavily, others keep service data in /var/lib or /opt instead.

Path

Purpose

/srv/http/

Web service data (some distros)

/srv/www/

Web service data (other distros)

/srv/ftp/

FTP service data

/srv/git/

Hosted git repositories

/srv/nfs/

Exported NFS roots

$ ls /srv 2>/dev/null

/sys#

Kernel object filesystem (sysfs). Exposes devices, drivers, and kernel internals as a tree of files. Writable entries here change kernel state directly, which is how userspace tools toggle module parameters, reset PCI devices, or tune the scheduler without a reboot.

Path

Purpose

/sys/block/

Block devices and their queues

/sys/class/

Device classes (net, tty, leds, …)

/sys/devices/

Physical device tree

/sys/bus/

Buses (PCI, USB, I2C, …) and bound drivers

/sys/fs/

Filesystem-specific tunables

/sys/fs/cgroup/

cgroup v2 hierarchy

/sys/kernel/

Kernel internals (debug, security, mm)

/sys/module/

Loaded kernel modules and their parameters

/sys/firmware/

Firmware-exposed data (ACPI, EFI, device tree)

/sys/power/

Power management (state, mem_sleep)

$ cat /sys/class/net/eth0/address
$ echo mem | sudo tee /sys/power/state

/sys/class/#

Devices grouped by their kernel-exposed class (network interfaces, block devices, terminals, batteries, thermal zones, LEDs, input devices, and so on). Each entry is a symlink into /sys/devices/ with a uniform set of attribute files specific to that class, so tooling can iterate one directory and discover every device of a given kind.

Path

Purpose

/sys/class/net/

Network interfaces

/sys/class/block/

Block devices

/sys/class/tty/

Serial / terminal devices

/sys/class/power_supply/

Battery / AC adapter state

/sys/class/thermal/

Thermal zones and cooling devices

/sys/class/leds/

LED devices

$ cat /sys/class/power_supply/BAT0/capacity
$ ls /sys/class/net/

/tmp#

World-writable temporary storage with the sticky bit set (only the file’s owner, or root, can delete it). Often a tmpfs mount, so contents are lost at reboot. Treat it as scratch space and never store anything important there.

$ tmp=$(mktemp /tmp/myapp.XXXXXX)
$ tmpd=$(mktemp -d /tmp/myapp.XXXXXX)
$ ls -ld /tmp

/usr#

The bulk of the distribution. Programs, libraries, headers, docs, and shared data installed by the package manager. Considered read-only from the OS’s perspective. Package upgrades write here, local administrators don’t.

Path

Purpose

/usr/bin/

User binaries (most commands live here)

/usr/sbin/

System binaries (administrative commands)

/usr/lib/

Shared libraries and per-package data

/usr/lib64/

64-bit libraries on multi-arch systems

/usr/libexec/

Helper binaries not intended for direct invocation

/usr/include/

C / C++ header files

/usr/share/

Architecture-independent shared data

/usr/local/

Local installs outside the package manager

/usr/src/

Kernel headers / source (when installed)

$ which ls
$ ls /usr/lib | head

/usr/local/#

Local installs outside the package manager. Has its own FHS-shaped sub-tree (bin, sbin, lib, etc, share, include), so software built from source via ./configure --prefix=/usr/local slots in cleanly without colliding with distribution packages under /usr. Distribution upgrades will not touch anything below this directory.

Path

Purpose

/usr/local/bin/

Locally-installed user binaries

/usr/local/sbin/

Locally-installed system binaries

/usr/local/lib/

Locally-installed libraries

/usr/local/etc/

Configuration for software under /usr/local

/usr/local/share/

Local architecture-independent shared data

/usr/local/include/

Locally-installed headers

$ ls /usr/local/bin
$ echo "$PATH" | tr : '\n' | grep local

/usr/share/#

Architecture-independent shared data. Man pages, package documentation, icon themes, translations, desktop entry files, and the timezone database. Files here are valid on any CPU architecture, so the same content can be served from a single network mount and shared across mixed x86, ARM, and RISC-V hosts without per-machine copies.

Path

Purpose

/usr/share/man/

Man pages

/usr/share/doc/

Per-package documentation

/usr/share/icons/

Icon themes

/usr/share/themes/

UI themes

/usr/share/locale/

Translations

/usr/share/applications/

Desktop entry files (.desktop)

/usr/share/zoneinfo/

Timezone database

$ man -w ls
$ ls /usr/share/zoneinfo | head

/var#

Variable data that grows during normal operation. Logs, package databases, service state, queued jobs, and per-service caches. Often a separate partition so that runaway logs or growing service state don’t fill the root filesystem and take the whole machine down.

Path

Purpose

/var/log/

System and service logs

/var/cache/

Regenerable application caches

/var/lib/

Persistent service state

/var/spool/

Queued work

/var/tmp/

Temp files preserved across reboots

/var/run

Symlink → /run on modern distros

/var/lock

Symlink → /run/lock on modern distros

/var/www/

Legacy web root

$ du -sh /var/* 2>/dev/null | sort -h
$ sudo journalctl --disk-usage

/var/log/#

System and service logs. The default destination for rsyslog, journald (when persistent storage is configured), and most application loggers. Rotated and compressed by logrotate to bound disk usage. Failure to bound this directory is a classic root cause of unexpected service outages on long-lived hosts.

Path

Purpose

/var/log/syslog

General log (Debian / Ubuntu)

/var/log/messages

General log (RHEL family)

/var/log/kern.log

Kernel log

/var/log/auth.log

Authentication log (Debian)

/var/log/secure

Authentication log (RHEL)

/var/log/journal/

Persistent systemd journal

/var/log/audit/

auditd log (when enabled)

/var/log/apt/

APT history (Debian)

/var/log/dpkg.log

dpkg install / remove events

$ sudo tail -f /var/log/syslog
$ sudo journalctl -u sshd --since "1 hour ago"

/var/lib/#

Persistent service state. Database files, package-manager metadata, container images and volumes, systemd state, and any other data that must survive reboots but is not user-editable configuration. Backup-critical. Losing /var/lib means losing what services know about the world, which is generally harder to recover than the config under /etc.

Path

Purpose

/var/lib/postgresql/

PostgreSQL data directory

/var/lib/mysql/

MySQL / MariaDB data

/var/lib/docker/

Docker images, volumes, containers

/var/lib/containerd/

containerd state

/var/lib/dpkg/

Debian package database

/var/lib/rpm/

RPM package database

/var/lib/systemd/

systemd persistent state

$ sudo du -sh /var/lib/docker
$ dpkg -l | wc -l

/var/spool/#

Queued work waiting to be processed (mail in flight, cron at-jobs, print jobs, package-manager transactions in progress). Each subdirectory belongs to a specific service whose daemon drains the queue as work completes. Sustained size growth here usually indicates a stalled processor (mail server down, print spooler blocked) rather than runaway producers.

Path

Purpose

/var/spool/mail/

Mail queue

/var/spool/cron/

Per-user cron tables

/var/spool/cups/

Print jobs

/var/spool/postfix/

Postfix queue (when running Postfix)

$ sudo ls /var/spool/cron/crontabs
$ lpstat -o

References#

  • man hier (filesystem hierarchy overview).

  • man 5 proc, man 5 sysfs (kernel virtual filesystems).

  • man 5 passwd, man 5 shadow, man 5 fstab, man 5 sudoers (system identity and mount config).

  • man 5 nsswitch.conf, man 5 sysctl.conf (name-service and kernel-tunable config).

  • man udev, man 7 random, man null (device nodes and randomness).

  • man sshd_config, man ssh_config, man ssh, man ssh-keygen (OpenSSH config and keys).

  • man systemd, man systemd.unit, man systemd.service (systemd unit model).

  • man udisksctl (removable-media mounts).

  • man mount, man umount, man fstab (mounting filesystems).

  • man 7 namespaces (per-process namespaces under /proc/<pid>/ns/).

  • man sysctl, man sysctl.conf (runtime and persistent kernel tunables).

  • man pid_namespaces (PID-file conventions and namespaces).

  • man mktemp, man tmpfs (temporary storage primitives).

  • man 5 manpath, man 1 desktop-file-validate (shared data under /usr/share).

  • man journalctl, man rsyslog.conf, man logrotate (system logging and rotation).

  • man dpkg, man rpm (package databases under /var/lib).

  • man crontab, man cups (queued work under /var/spool).

  • man grub-mkconfig, man update-grub (bootloader configuration).

  • Permissions for users, groups, sudo, PAM, and capabilities.

  • Processes for /proc/<pid> and process inspection.

  • Packages for package manager state under /var/lib.

  • Services for the systemd unit lifecycle.

  • SSH for the SSH section.

  • Filesystems for the comparison of ext4, XFS, Btrfs, ZFS, and others.

  • Signals and Exit Codes for signal numbers seen in /proc/<pid>/status.

  • Ports for common service ports referenced in /etc/services.

  • Bash for shell startup-file ordering and shortcuts.

  • Bash for common Bash snippets.

  • Linux for the Linux command quick reference.

  • FHS 3.0

  • FHS § /etc

  • FHS § /media

  • FHS § /opt

  • FHS § /run

  • FHS § /root

  • FHS § /srv

  • FHS § /usr

  • FHS § /usr/local

  • FHS § /var

  • The /usr Merge (Fedora)

  • Debian /usr-merge

  • GRUB manual

  • systemd-boot

  • kernel.org: udev

  • kernel.org: sysctl docs

  • kernel.org: sysfs

  • OpenSSH manual pages

  • XDG Base Directory Specification

  • IANA tz database

  • systemd-tmpfiles