The Filesystem Hierarchy Standard (FHS) defines the directory structure and directory contents in Linux distributions. It is maintained by the Linux Foundation. The latest version is 3.0, released on 3 June 2015.
In the FHS, all files and directories appear under the root directory
/, even if they are stored on different physical or virtual devices. Some of these directories only exist on a particular system if certain subsystems, such as the X Window System, are installed.
Most of these directories exist in all Unix-like operating systems and are generally used in much the same way; however, the descriptions here are those used specifically for the FHS, and are not considered authoritative for platforms other than Linux.
||Primary hierarchy root and root directory of the entire file system hierarchy.|
||Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.|
|Boot loader files, e.g., kernels, initrd.|
|device files, e.g., |
||Host-specific system-wide configuration files|
There has been controversy over the meaning of the name itself. In early versions of the UNIX Implementation Document from Bell labs,
||Configuration files for add-on packages that are stored in |
||Configuration files, such as catalogs, for software that processes SGML.|
||Configuration files for the X Window System, version 11.|
||Configuration files, such as catalogs, for software that processes XML.|
||Users' home directories, containing saved files, personal settings, etc.|
||Libraries essential for the binaries in |
||Alternative format essential libraries. Such directories are optional, but if they exist, they have some requirements.|
||Mount points for removable media such as CD-ROMs (appeared in FHS-2.3 in 2004).|
||Temporarily mounted filesystems.|
||Optional application software packages.|
|Virtual filesystem providing process and kernel information as files. In Linux, corresponds to a procfs mount. Generally automatically generated and populated by the system, on the fly.|
||Home directory for the root user.|
||Run-time variable data: Information about the running system since last boot, e.g., currently logged-in users and running daemons. Files under this directory must be either removed or truncated at the beginning of the boot process; but this is not necessary on systems that provide this directory as a temporary filesystem (tmpfs).|
||Essential system binaries, e.g., fsck, init, route.|
||Site-specific data served by this system, such as data and scripts for web servers, data offered by FTP servers, and repositories for version control systems (appeared in FHS-2.3 in 2004).|
||Contains information about devices, drivers, and some kernel features.|
||Temporary files (see also |
||Secondary hierarchy for read-only user data; contains the majority of (multi-)user utilities and applications.|
||Non-essential command binaries (not needed in single user mode); for all users.|
||Standard include files.|
||Libraries for the binaries in |
||Alternative format libraries, e.g. |
||Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., |
||Non-essential system binaries, e.g., daemons for various network-services.|
||Architecture-independent (shared) data.|
||Source code, e.g., the kernel source code with its header files.|
||X Window System, Version 11, Release 6 (up to FHS-2.3, optional).|
||Variable files—files whose content is expected to continually change during normal operation of the system—such as logs, spool files, and temporary e-mail files.|
||Application cache data. Such data are locally generated as a result of time-consuming I/O or calculation. The application must be able to regenerate or restore the data. The cached files can be deleted without loss of data.|
||State information. Persistent data modified by programs as they run, e.g., databases, packaging system metadata, etc.|
||Lock files. Files keeping track of resources currently in use.|
||Log files. Various logs.|
||Mailbox files. In some distributions, these files may be located in the deprecated |
||Variable data from add-on packages that are stored in |
||Run-time variable data. This directory contains system information data describing the system since it was booted.|
In FHS 3.0,
||Spool for tasks waiting to be processed, e.g., print queues and outgoing mail queue.|
||Deprecated location for users' mailboxes.|
||Temporary files to be preserved between reboots.|
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. Times of course change, and distribution goals and needs call for experimentation. Some common deviations include:
- Modern Linux distributions include a
/sysdirectory 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
/sysas a symbolic link to the kernel source tree.
- Many modern Unix-like systems (like FreeBSD via its ports system) install third party packages into
/usr/localwhile keeping code considered part of the operating system in
- Some Linux distributions no longer differentiate between
- Some Linux distributions no longer differentiate between
/usr/sbin. They may symlink
/usr/sbin. Other distributions choose to consolidate all four, symlinking them to
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 trickery, such as using
/dev/.mount directories, even though the device directory isn't 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:
/etc/*(writeable files) →
FHS was created as the FSSTND (short for "Filesystem Standard"), largely based on similar standards for other Unix-like operating systems. Notable examples are these: the hier(7) description of file system layout, which has existed since the release of Version 7 Unix (in 1979); the SunOS filesystem(7) and its successor, the Solaris filesystem(5).
|Old version, no longer supported: 1.0||1994-02-14||FSSTND|
|Old version, no longer supported: 1.1||1994-10-09||FSSTND|
|Old version, no longer supported: 1.2||1995-03-28||FSSTND|
|Old version, no longer supported: 2.0||1997-10-26||FHS 2.0 is the direct successor for FSSTND 1.2. Name of the standard was changed to Filesystem Hierarchy Standard.|
|Old version, no longer supported: 2.1||2000-04-12||FHS|
|Old version, no longer supported: 2.2||2001-05-23||FHS|
|Older version, yet still supported: 2.3||2004-01-29||FHS|
|Current stable version: 3.0||2015-05-18||FHS|
Older version, still supported
Latest preview version
- Unix directory structure
- Intel Binary Compatibility Standard (iBCS)
- Linux Programmer's Manual – Overview, Conventions and Miscellanea –
- "FilesystemHierarchyStandard - Debian Wiki". wiki.debian.org. Retrieved 2016-07-06.
- "FHS 3.0 Released". June 3, 2015.
- J. DeFelicc (1972-03-17). "E.0". Preliminary Release of UNIX Implementation Document (PDF). p. 8. IMO.1-1.
- "/etc : Host-specific system configuration". Filesystem Hierarchy Standard. Retrieved 18 February 2016.
- Define - /etc?, Posted by Cliff, 3 March 2007 - Slashdot
- "/opt : Add-on application software packages". Filesystem Hierarchy Standard. Retrieved 18 February 2016.
- "/sys : Kernel and system information virtual filesystem". Filesystem Hierarchy Standard. Retrieved 4 June 2017.
- Should be shareable and read-only, cf. http://www.pathname.com/fhs/pub/fhs-2.3.html.
- Historically and strictly according to the standard,
/usr/localis for data that must be stored on the local host (as opposed to
/usr, which may be mounted across a network). Most of the time
/usr/localis used for installing software/data that are not part of the standard operating system distribution (in such case,
/usrwould only contain software/data that are part of the standard operating system distribution). It is possible that the FHS standard may in the future be changed to reflect this de facto convention.
- "Filesystem Hierarchy Standard". FHS 2.3. Section /var/run : Run-time variable data.
- "5.13. /var/run : Run-time variable data". FHS 3.0.
- "File System Standard" (PDF). Linux Foundation. p. 5.11.1.
- Red Hat reference guide on file system structure
- SuSE Linux Enterprise Server Administration, Novell authorized courseware, by Jason W. Eckert, Novell; Course Technology, 2006; ISBN 1-4188-3731-8, ISBN 978-1-4188-3731-0
- Debian policy on FHS compliance
- Ubuntu Linux File system Tree Overview - Community Ubuntu Documentation
- Hisham Muhammad (9 May 2003). "The Unix tree rethought: an introduction to GoboLinux". Retrieved 2016-10-04.
- Dolstra, E. and Löh, A. "NixOS: A Purely Functional Linux Distribution." In ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming, pages 367–378, Victoria, British Columbia, Canada. September 2008.
- "5.3 About the /sys Virtual File System". docs.oracle.com. Oracle. Archived from the original on 8 July 2016. Retrieved 8 July 2016.
- Lehey, Greg (May 2003). The Complete FreeBSD: Documentation from the Source (Fourth ed.). O'Reilly Media, Incorporated. pp. 188, 609. ISBN 9780596005160. Retrieved 8 July 2016.
- Allan McRae. "Arch Linux - News: The /lib directory becomes a symlink". archlinux.org. Archived from the original on 9 September 2014. Retrieved 28 December 2014.
- Allan McRae. "Arch Linux - News: Binaries move to /usr/bin requiring update intervention". archlinux.org. Archived from the original on 10 September 2014. Retrieved 28 December 2014.
- "FSSTND FAQ page". Retrieved 2016-05-10.
- FreeBSD Miscellaneous Information Manual –
- SunOS 4.1.3 manual page for filesystem(7), dated 10 January 1988 (from the FreeBSD Man Pages library)
- Solaris 10 Standards, Environments and Macros Reference Manual –
- "filesystem man page - Solaris 10 11/06 Man Pages". Retrieved 2011-10-15.
- "Index of /pub/Linux/docs/fsstnd/old/fsstnd-1.0/". Ibiblio.org. Retrieved 2012-10-16.
- "Index of /pub/Linux/docs/fsstnd/old/fsstnd-1.1/". Ibiblio.org. Retrieved 2012-10-16.
- "Index of /pub/Linux/docs/fsstnd/old/". Ibiblio.org. Retrieved 2012-10-16.
- "FHS 2.0 Announcement". Pathname.com. Retrieved 2012-10-16.
- Quinlan, Daniel (14 March 2012) , "FHS 2.0 Announcement", BSD, Linux, Unix and The Internet - Research by Kenneth R. Saborio, San Jose, Costa Rica: Kenneth R. Saborio, retrieved 18 February 2016
- "Index of /pub/Linux/docs/fsstnd/". Ibiblio.org. Retrieved 2012-10-16.
- "FHS 2.1 Announcement". Pathname.com. Retrieved 2012-10-16.
- "FHS 2.1 is released". Lists.debian.org. 2000-04-13. Retrieved 2012-10-16.
- Quinlan, Daniel (12 April 2000). "Filesystem Hierarchy Standard — Version 2.1, Filesystem Hierarchy Standard Group" (PDF). Acadia Linux Tutorials. Wolfville, Nova Scotia, Canada: Jodrey School of Computer Science, Acadia University. Retrieved 18 October 2012.
- Russell, Rusty; Quinlan, Daniel, eds. (23 May 2001). "Filesystem Hierarchy Standard — Version 2.2 final Filesystem Hierarchy Standard Group" (PDF). Filesystem Hierarchy Standard. Retrieved 18 February 2016.
- Russell, Rusty; Quinlan, Daniel; Yeoh, Christopher, eds. (28 January 2004). "Filesystem Hierarchy Standard - Filesystem Hierarchy Standard Group" (PDF). Retrieved 2014-11-29.
- Yeoh, Christopher; Russell, Rusty; Quinlan, Daniel, eds. (19 March 2015). "Filesystem Hierarchy Standard" (PDF). The Linux Foundation. Retrieved 2015-05-20.
- Official Home of the Filesystem Hierarchy Standard (FHS) at The Linux Foundation
- objectroot – a proposal for a new filesystem hierarchy, based on object-oriented design principles
- The Dotted Standard Filename Hierarchy, yet another very different hierarchy (used in cLIeNUX) (mirror)