Jump to content

Filesystem Hierarchy Standard

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Randomizer3 (talk | contribs) at 00:29, 6 June 2015 (Undid revision 665691013 by Randomizer3 (talk) - I'm an idiot - those were subdirectories. Sorry.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Filesystem Hierarchy Standard
Developed byLinux Foundation
Initial release14 February 1994; 31 years ago (1994-02-14)
Latest release
3.0
3 June 2015; 10 years ago (2015-06-03)
WebsiteOfficial website
Official website (Historical)

The Filesystem Hierarchy Standard (FHS) defines the directory structure and directory contents in Unix[citation needed] and Unix-like operating systems. It is maintained by the Linux Foundation. The current version is 3.0, released on 3 June 2015. [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.
/bin
Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/boot
Boot loader files, e.g., kernels, initrd.
/dev
Essential devices, e.g., /dev/null.
/etc
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]

/opt
Configuration files for add-on packages that are stored in /opt/.
/sgml
Configuration files, such as catalogs, for software that processes SGML.
/X11
Configuration files for the X Window System, version 11.
/xml
Configuration files, such as catalogs, for software that processes XML.
/home
Users' home directories, containing saved files, personal settings, etc.
/lib
Libraries essential for the binaries in /bin/ and /sbin/.
/lib<qual>
Alternate format essential libraries. Such directories are optional, but if they exist, they have some requirements.
/media
Mount points for removable media such as CD-ROMs (appeared in FHS-2.3).
/mnt
Temporarily mounted filesystems.
/opt
Optional application software packages.[5]
/proc
Virtual filesystem providing process and kernel information as files. In Linux, corresponds to a procfs mount.
/root
Home directory for the root user.
/sbin
Essential system binaries, e.g., init, ip, mount.
/srv
Site-specific data which are served by the system.
/tmp
Temporary files (see also /var/tmp). Often not preserved between system reboots, and may be severely size restricted.
/usr
Secondary hierarchy for read-only user data; contains the majority of (multi-)user utilities and applications.[6]
/bin
Non-essential command binaries (not needed in single user mode); for all users.
/include
Standard include files.
/lib
Libraries for the binaries in /usr/bin/ and /usr/sbin/.
/lib<qual>
Alternate format libraries (optional).
/local
Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin/, lib/, share/.[7]
/sbin
Non-essential system binaries, e.g., daemons for various network-services.
/share
Architecture-independent (shared) data.
/src
Source code, e.g., the kernel source code with its header files.
/X11R6
X Window System, Version 11, Release 6.
/var
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.
/cache
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.
/lib
State information. Persistent data modified by programs as they run, e.g., databases, packaging system metadata, etc.
/lock
Lock files. Files keeping track of resources currently in use.
/log
Log files. Various logs.
/mail
Users' mailboxes.
/opt
Variable data from add-on packages that are stored in /opt/.
/run
Information about the running system since last boot, e.g., currently logged-in users and running daemons.
/spool
Spool for tasks waiting to be processed, e.g., print queues and outgoing mail queue.
/mail
Deprecated location for users' mailboxes.[8]
/tmp
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.[citation needed]
  • 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.
    • For example, below are the changes Debian made in its 2013 Wheezy release:[16]
      • /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
  • 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 2015-05-18 FHS[34]

See also

References

  1. ^ "Filesystem Hierarchy Standard Specifications Archive". Retrieved 3 June 2015.
  2. ^ J. DeFelicc (17 March 1972). "E.0". Preliminary Release of UNIX Implementation Document (PDF). p. 8. IMO.1-1.
  3. ^ "/etc : Host-specific system configuration". Filesystem Hierarchy Standard. Retrieved 18 October 2012. {{cite web}}: External link in |work= (help)
  4. ^ Define - /etc?, Posted by Cliff, 3 March 2007 - Slashdot
  5. ^ "/opt : Add-on application software packages". Filesystem Hierarchy Standard. Retrieved 18 October 2012. {{cite web}}: External link in |work= (help)
  6. ^ Should be shareable and read-only, cf. http://www.pathname.com/fhs/pub/fhs-2.3.html.
  7. ^ 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).
  8. ^ "File System Standard" (PDF). Linux Foundation. p. 5.11.1.
  9. ^ Red Hat reference guide on file system structure
  10. ^ 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
  11. ^ Debian policy on FHS compliance
  12. ^ Ubuntu Linux File system Tree Overview - Community Ubuntu Documentation
  13. ^ Hisham Muhammad (9 May 2003). "The Unix tree rethought: an introduction to GoboLinux". Retrieved 17 March 2008.
  14. ^ https://bugs.linuxfoundation.org/show_bug.cgi?id=718
  15. ^ http://lwn.net/Articles/436012/
  16. ^ http://wiki.debian.org/ReleaseGoals/RunDirectory
  17. ^ 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.
  18. ^ 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.
  19. ^ hier(7) – FreeBSD Miscellaneous Information Manual
  20. ^ SunOS 4.1.3 manual page for filesystem(7), dated 10 January 1988 (from the FreeBSD Man Pages library)
  21. ^ filesystem(5) – Solaris 11.4 File Formats Reference Manual
  22. ^ "filesystem man page - Solaris 10 11/06 Man Pages". Retrieved 15 October 2011.
  23. ^ "Index of /pub/Linux/docs/fsstnd/old/fsstnd-1.0/". Ibiblio.org. Retrieved 16 October 2012.
  24. ^ "Index of /pub/Linux/docs/fsstnd/old/fsstnd-1.1/". Ibiblio.org. Retrieved 16 October 2012.
  25. ^ "Index of /pub/Linux/docs/fsstnd/old/". Ibiblio.org. Retrieved 16 October 2012.
  26. ^ "FHS 2.0 Announcement". Pathname.com. Retrieved 16 October 2012.
  27. ^ 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 {{citation}}: External link in |work= (help)
  28. ^ "Index of /pub/Linux/docs/fsstnd/". Ibiblio.org. Retrieved 16 October 2012.
  29. ^ "FHS 2.1 Announcement". Pathname.com. Retrieved 16 October 2012.
  30. ^ "FHS 2.1 is released". Lists.debian.org. 13 April 2000. Retrieved 16 October 2012.
  31. ^ 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. {{cite web}}: External link in |work= (help)
  32. ^ 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 October 2012. {{cite web}}: External link in |work= (help)
  33. ^ Russell, Rusty; Quinlan, Daniel; Yeoh, Christopher, eds. (28 January 2004). "Filesystem Hierarchy Standard - Filesystem Hierarchy Standard Group" (PDF). Retrieved 29 November 2014.
  34. ^ Yeoh, Christopher; Russell, Rusty; Quinlan, Daniel, eds. (19 March 2015). "Filesystem Hierarchy Standard" (PDF). The Linux Foundation. Retrieved 20 May 2015.