Filesystem Hierarchy Standard
Developed by | Linux Foundation |
---|---|
Initial release | 14 February 1994 |
Latest release |
2.3 (29 January 2004 ) |
Website |
Official website Official website (Historical) |
The Filesystem Hierarchy Standard (FHS) defines the directory structure and directory contents in Unix and Unix-like operating systems, maintained by the Linux Foundation. The current version is 2.3, announced on 29 January 2004.[1]
Directory structure
In the FHS all files and directories appear under the root directory /
, even if they are stored on different physical or virtual devices. Note however that some of these directories may or may not be present on a Unix system depending on whether certain subsystems, such as the X Window System, are installed.
The majority of these directories exist in all UNIX 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.
Directory | Description |
---|---|
|
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. |
|
Essential devices, e.g., /dev/null . |
|
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, /etc is referred to as the etcetera directory,[2] as this directory historically held everything that did not belong elsewhere (however, the FHS restricts /etc to static configuration files and may not contain binaries).[3] Since the publication of early documentation, the directory name has been re-explained in various ways. Recent interpretations include backronyms such as "Editable Text Configuration" or "Extended Tool Chest".[4] |
|
Configuration files for add-on packages that are stored in /opt/ . |
|
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 /bin/ and /sbin/ . |
|
Alternate 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). |
|
Temporarily mounted filesystems. |
|
Optional application software packages.[5] |
|
Virtual filesystem providing process and kernel information as files. In Linux, corresponds to a procfs mount. |
|
Home directory for the root user. |
|
Essential system binaries, e.g., init, ip, mount. |
|
Site-specific data which are served by the system. |
|
Temporary files (see also /var/tmp ). Often not preserved between system reboots, and may be severely size restricted. |
|
Secondary hierarchy for read-only user data; contains the majority of (multi-)user utilities and applications.[6] |
|
Non-essential command binaries (not needed in single user mode); for all users. |
|
Standard include files. |
|
Libraries for the binaries in /usr/bin/ and /usr/sbin/ . |
|
Alternate format libraries (optional). |
|
Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin/ , lib/ , share/ .[7] |
|
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. |
|
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. |
|
Users' mailboxes. |
|
Variable data from add-on packages that are stored in /opt/ . |
|
Information about the running system since last boot, e.g., currently logged-in users and running daemons. |
|
Spool for tasks waiting to be processed, e.g., print queues and outgoing mail queue. |
|
Deprecated location for users' mailboxes.[8] |
|
Temporary files to be preserved between reboots. |
FHS compliance
Most Linux distributions follow the Filesystem Hierarchy Standard and declare it their own policy to maintain FHS compliance.[9][10][11][12] GoboLinux is an example of an intentionally non-compliant filesystem implementation.[13]
Some distributions that generally follow the standard deviate from it in some areas. 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 and Unix-like operating systems use/sys
as a symbolic link to the kernel source tree. - Modern Linux distributions include a
/run
directory as a temporary filesystem (tmpfs) which stores volatile runtime data, and which is being considered for the next version of the FHS.[14] According to the FHS version 2.3, this data should be stored in/var/run
but this was a problem in some cases because this directory isn't always available at early boot. As a result, these programs have had to resort to trickery, such as using/dev/.udev
,/dev/.mdadm
,/dev/.systemd
or/dev/.mount
directories, even though the device directory isn't intended for such data.[15] Among other advantages, this makes the system easier to use normally with the root filesystem mounted read-only. - Many modern UNIX systems (like FreeBSD via its ports system) install third party packages into
/usr/local
while keeping locally developed code in/usr
. - Some Linux distributions no longer differentiate between
/lib
versus/usr/lib
and have/lib
symlinked to/usr/lib
.[17] - Some Linux distributions no longer differentiate between
/bin
versus/usr/bin
and/sbin
versus/usr/sbin
. They symlink/bin
to/usr/bin
and/sbin
to/usr/sbin
. And/usr/sbin
may get symlinked to/usr/bin
.[18]
History
When the FHS was created, other UNIX and Unix-like operating systems already had their own standards. Notable examples are these: the hier(7) description of file system layout,[19] which has existed since the release of Version 7 Unix (in 1979); the SunOS filesystem(7)[20] and its successor, the Solaris filesystem(5).[21][22]
Release history
Meaning | |
---|---|
Red | Old Standard/Draft; not supported |
Yellow | Old Standard; still supported |
Green | Current Standard |
Blue | Future Draft |
Version | Release Date | Notes |
---|---|---|
v1.0 | 1994-02-14 | FSSTND[23] |
v1.1 | 1994-10-09 | FSSTND[24] |
v1.2 | 1995-03-28 | FSSTND[25] |
v2.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.[26][27][28] |
v2.1 | 2000-04-12 | FHS[29][30][31] |
v2.2 | 2001-05-23 | FHS[32] |
v2.3 | 2004-01-29 | FHS[33] |
v3.0 | under development |
FHS[34] |
See also
- Unix directory structure
- hier(7) - Linux man page : The Linux manual page that describes the hierarchy
References
- ↑ (ANNOUNCE) FHS 2.3 Released, From: Christopher Yeoh - 2004-01-29, Email Archive: freestandards-fhs-discuss (read-only), Free Standards Group, SourceForge.net
- ↑ J. DeFelicc (1972-03-17). "E.0". Preliminary Release of UNIX Implementation Document (D). p. 8. IMO.1-1.
- ↑ "/etc : Host-specific system configuration". Filesystem Hierarchy Standard. Retrieved 18 October 2012.
- ↑ Define - /etc?, Posted by Cliff, 3 March 2007 - Slashdot
- ↑ "/opt : Add-on application software packages". Filesystem Hierarchy Standard. Retrieved 18 October 2012.
- ↑ 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/local/
is 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/local/
is used for installing software/data that are not part of the standard operating system distribution (in such case,/usr/
would 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). - ↑ "File System Standard". 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 2008-03-17.
- ↑ https://bugs.linuxfoundation.org/show_bug.cgi?id=718
- ↑ http://lwn.net/Articles/436012/
- ↑ http://wiki.debian.org/ReleaseGoals/RunDirectory
- ↑ 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.
- ↑ – 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) [1997], "FHS 2.0 Announcement", BSD, Linux and Unix Information - Research by Kenneth R. Saborio (San Jose, Costa Rica: Kenneth R. Saborio), retrieved 18 October 2012
- ↑ "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". 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". Filesystem Hierarchy Standard. Retrieved 18 October 2012.
- ↑ Russell, Rusty; Quinlan, Daniel; Yeoh, Christopher, eds. (28 January 2004). "Filesystem Hierarchy Standard - Filesystem Hierarchy Standard Group". Retrieved 2014-11-29.
- ↑ Licquia, Jeff (27 April 2011). "FHS". The Linux Foundation. Retrieved 2012-10-16.
External links
- 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
- Fortune Cookies through the /proc Filesystem at the Wayback Machine (archived 12 June 2008)
- The Dotted Standard Filename Hierarchy, yet another very different hierarchy (used in cLIeNUX) (mirror)
- Linux Filesystem Hierarchy Version 0.65
|