Most
Linux distributions follow the Filesystem Hierarchy Standard and declare it their own policy to maintain FHS compliance.
GoboLinux and
NixOS provide examples of intentionally non-compliant filesystem implementations. Some distributions generally follow the standard but deviate from it in some areas. The FHS is a "trailing standard", and so documents common practices at a point in time. Of course, times change, and distribution goals and needs call for experimentation. Some common deviations include: • Modern Linux distributions include a /sys directory as a
virtual filesystem (
sysfs, comparable to /proc, which is a
procfs), which stores and allows modification of the devices connected to the system, whereas many traditional
Unix-like operating systems use /sys as a
symbolic link to the
kernel source tree. • Many modern Unix-like systems (such as
FreeBSD and
OpenBSD) via their
ports systems install third-party packages into /usr/local, while keeping code considered part of the operating system in /usr. • Some Linux distributions no longer differentiate between /lib and /usr/lib and have /lib symlinked to /usr/lib. • Some Linux distributions no longer differentiate between /bin and /usr/bin and between /sbin and /usr/sbin. They may symlink /bin to /usr/bin and /sbin to /usr/sbin. Other distributions choose to consolidate all four, symlinking them to /usr/bin. Modern Linux distributions include a /run directory as a
temporary filesystem (
tmpfs), which stores volatile runtime data, following the FHS version 3.0. According to the FHS version 2.3, such data were stored in /var/run, but this was a problem in some cases because this directory is not always available at early boot. As a result, these programs have had to resort to workarounds, such as using /dev/.udev, /dev/.mdadm, /dev/.systemd or /dev/.mount directories, even though the device directory is not intended for such data. Among other advantages, this makes the system easier to use normally with the root filesystem mounted read-only. For example, below are the changes
Debian made in its 2013 Wheezy release: • /dev/.* → /run/* • /dev/shm → /run/shm • /dev/shm/* → /run/* • /etc/* (writeable files) → /run/* • /lib/init/rw → /run • /var/lock → /run/lock • /var/run → /run • /tmp → /run/tmp == History ==