unix/linux文件系统结构标准

Filesystem Hierarchy Standard

Filesystem Hierarchy Standard Group

Edited by

Rusty Russell

Daniel Quinlan

Christopher Yeoh

This standard consists of a set of requirements and guidelines for fileand directory placement under UNIX-like operating systems. Theguidelines are intended to support interoperability of applications,system administration tools, development tools, and scripts as well asgreater uniformity of documentation for these systems.

All trademarks and copyrights are owned by their owners, unlessspecifically noted otherwise. Use of a term in this document should notbe regarded as affecting the validity of any trademark or servicemark.

Permission is granted to make and distribute verbatim copies ofthis standard provided the copyright and this permission notice arepreserved on all copies.

Permission is granted to copy and distribute modified versions of thisstandard under the conditions for verbatim copying, provided also thatthe title page is labeled as modified including a reference to theoriginal standard, provided that information on retrieving the originalstandard is included, and provided that the entire resulting derivedwork is distributed under the terms of a permission notice identical tothis one.

Permission is granted to copy and distribute translations of thisstandard into another language, under the above conditions for modifiedversions, except that this permission notice may be stated in atranslation approved by the copyright holder.


Table of Contents 1. Introduction
Purpose Conventions
2. The Filesystem 3. The Root Filesystem
Purpose Requirements Specific Options /bin : Essential user command binaries (for use by all users)
Purpose Requirements Specific Options
/boot : Static files of the boot loader
Purpose Specific Options
/dev : Device files
Purpose Specific Options
/etc : Host-specific system configuration
Purpose Requirements Specific Options /etc/opt : Configuration files for /opt /etc/X11 : Configuration for the X Window System (optional) /etc/sgml : Configuration files for SGML (optional) /etc/xml : Configuration files for XML (optional)
/home : User home directories (optional)
Purpose Requirements
/lib : Essential shared libraries and kernel modules
Purpose Requirements Specific Options
/lib : Alternate format essential shared libraries (optional)
Purpose Requirements
/media : Mount point for removeable media
Purpose Specific Options
/mnt : Mount point for a temporarily mounted filesystem
Purpose
/opt : Add-on application software packages
Purpose Requirements
/root : Home directory for the root user (optional)
Purpose
/sbin : System binaries
Purpose Requirements Specific Options
/srv : Data for services provided by this system
Purpose
/tmp : Temporary files
Purpose
4. The /usr Hierarchy
Purpose Requirements Specific Options /usr/X11R6 : X Window System, Version 11 Release 6 (optional)
Purpose Specific Options
/usr/bin : Most user commands
Purpose Specific Options
/usr/include : Directory for standard include files.
Purpose Specific Options
/usr/lib : Libraries for programming and packages
Purpose Specific Options
/usr/lib : Alternate format libraries (optional)
Purpose /usr/local : Local hierarchy
/usr/local/share /usr/sbin : Non-essential standard system binaries
Purpose
/usr/share : Architecture-independent data
Purpose Requirements Specific Options /usr/share/dict : Word lists (optional) /usr/share/man : Manual pages /usr/share/misc : Miscellaneous architecture-independent data /usr/share/sgml : SGML data (optional) /usr/share/xml : XML data (optional)
/usr/src : Source code (optional)
Purpose
5. The /var Hierarchy
Purpose Requirements Specific Options /var/account : Process accounting logs (optional)
Purpose
/var/cache : Application cache data
Purpose Specific Options /var/cache/fonts : Locally-generated fonts (optional) /var/cache/man : Locally-formatted manual pages (optional)
/var/crash : System crash dumps (optional)
Purpose
/var/games : Variable game data (optional)
Purpose
/var/lib : Variable state information
Purpose Requirements Specific Options /var/lib/ : Editor backup files and state (optional) /var/lib/hwclock : State directory for hwclock (optional) /var/lib/misc : Miscellaneous variable data
/var/lock : Lock files
Purpose
/var/log : Log files and directories
Purpose Specific Options
/var/mail : User mailbox files (optional)
Purpose
/var/opt : Variable data for /opt
Purpose
/var/run : Run-time variable data
Purpose Requirements
/var/spool : Application spool data
Purpose Specific Options /var/spool/lpd : Line-printer daemon print queues (optional) /var/spool/rwho : Rwhod files (optional)
/var/tmp : Temporary files preserved between system reboots
Purpose
/var/yp : Network Information Service (NIS) database files (optional)
Purpose
6. Operating System Specific Annex
Linux
/ : Root directory /bin : Essential user command binaries (for use by all users) /dev : Devices and special files /etc : Host-specific system configuration /lib64 and /lib32 : 64/32-bit libraries (architecture dependent) /proc : Kernel and process information virtual filesystem /sbin : Essential system binaries /usr/include : Header files included by C programs /usr/src : Source code /var/spool/cron : cron and at jobs
7. Appendix
The FHS mailing list Background of the FHS General Guidelines Scope Acknowledgments Contributors

Chapter 1. Introduction

Purpose

This standard enables:

  • Software to predict the location of installed files anddirectories, and

  • Users to predict the location of installed files anddirectories.

We do this by:

  • Specifying guiding principles for each area of the filesystem,

  • Specifying the minimum files and directories required,

  • Enumerating exceptions to the principles, and

  • Enumerating specific cases where there has been historical conflict.

The FHS document is used by:

  • Independent software suppliers to create applications which are FHScompliant, and work with distributions which are FHS complaint,

  • OS creators to provide systems which are FHS compliant, and

  • Users to understand and maintain the FHS compliance of a system.

The FHS document has a limited scope:

  • Local placement of local files is a local issue, so FHS does notattempt to usurp system administrators.

  • FHS addresses issues where file placements need to be coordinatedbetween multiple parties such as local sites, distributions,applications, documentation, etc.


Conventions

We recommend that you read a typeset version of this document ratherthan the plain text version. In the typeset version, the names of filesand directories are displayed in a constant-width font.

Components of filenames that vary are represented by a descriptionof the contents enclosed in "<" and">" characters, . Electronic mail addresses are alsoenclosed in "<" and ">" but are shown in the usualtypeface.

Optional components of filenames are enclosed in"[" and "]" characters and maybe combined with the "<" and">" convention. For example, if a filename isallowed to occur either with or without an extension, it might berepresented by[.].

Variable substrings of directory names and filenames are indicatedby "*".

The sections of the text marked asRationale are explanatory and arenon-normative.


Chapter 2. The Filesystem

This standard assumes that the operating system underlying anFHS-compliant file system supports the same basic security featuresfound in most UNIX filesystems.

It is possible to define two independent distinctions amongfiles: shareable vs. unshareable and variable vs. static. In general,files that differ in either of these respects should be located indifferent directories. This makes it easy to store files withdifferent usage characteristics on different filesystems.

"Shareable" files are those that can be stored on one hostand used on others. "Unshareable" files are those that are notshareable. For example, the files in user home directories areshareable whereas device lock files are not.

"Static" files include binaries, libraries, documentationfiles and other files that do not change without system administratorintervention. "Variable" files are files that are not static.

Tip Rationale
 

Shareable files can be stored on one host and used on severalothers. Typically, however, not all files in the filesystemhierarchy are shareable and so each system has local storagecontaining at least its unshareable files. It is convenient if allthe files a system requires that are stored on a foreign host can bemade available by mounting one or a few directories from the foreignhost.

Static and variable files should be segregated because staticfiles, unlike variable files, can be stored on read-only media anddo not need to be backed up on the same schedule as variablefiles.

Historical UNIX-like filesystem hierarchies contained bothstatic and variable files under both /usr and/etc. In order to realize the advantagesmentioned above, the /var hierarchy wascreated and all variable files were transferred from/usr to /var.Consequently /usr can now be mounted read-only(if it is a separate filesystem). Variable files have beentransferred from /etc to/var over a longer period as technology haspermitted.

Here is an example of a FHS-compliant system.(Other FHS-compliant layouts are possible.)


shareable unshareable
static /usr /etc
  /opt /boot
variable /var/mail /var/run
  /var/spool/news /var/lock

Chapter 3. The Root Filesystem

Purpose

The contents of the root filesystem must be adequate to boot,restore, recover, and/or repair the system.

  • To boot a system, enough must be present on the root partitionto mount other filesystems. This includes utilities, configuration,boot loader information, and other essential start-up data./usr, /opt, and/var are designed such that they may be locatedon other partitions or filesystems.

  • To enable recovery and/or repair of a system, those utilitiesneeded by an experienced maintainer to diagnose and reconstruct adamaged system must be present on the root filesystem.

  • To restore a system, those utilities needed to restore fromsystem backups (on floppy, tape, etc.) must be present on the rootfilesystem.

Tip Rationale
 

The primary concern used to balance these considerations, whichfavor placing many things on the root filesystem, is the goal ofkeeping root as small as reasonably possible. For several reasons, itis desirable to keep the root filesystem small:

  • It is occasionally mounted from very small media.

  • The root filesystem contains many system-specific configurationfiles. Possible examples include a kernel that is specific to thesystem, a specific hostname, etc. This means that the root filesystemisn't always shareable between networked systems. Keeping it small onservers in networked systems minimizes the amount of lost space forareas of unshareable files. It also allows workstations with smallerlocal hard drives.

  • While you may have the root filesystem on a large partition, andmay be able to fill it to your heart's content, there will be peoplewith smaller partitions. If you have more files installed, you mayfind incompatibilities with other systems using root filesystems onsmaller partitions. If you are a developer then you may be turningyour assumption into a problem for a large number of users.

  • Disk errors that corrupt data on the root filesystem are agreater problem than errors on any other partition. A small rootfilesystem is less prone to corruption as the result of a systemcrash.

Applications must never create or require special files orsubdirectories in the root directory. Other locations in the FHShierarchy provide more than enough flexibility for any package.

Tip Rationale
 

There are several reasons why creating a new subdirectory ofthe root filesystem is prohibited:

  • It demands space on a root partition which the systemadministrator may want kept small and simple for either performance orsecurity reasons.

  • It evades whatever discipline the system administrator may haveset up for distributing standard file hierarchies across mountablevolumes.

Distributions should not create new directories in the roothierarchy without extremely careful consideration of the consequencesincluding for application portability.


Requirements

The following directories, or symbolic links to directories, arerequired in /.

Directory Description
bin Essential command binaries
boot Static files of the boot loader
dev Device files
etc Host-specific system configuration
lib Essential shared libraries and kernel modules
media Mount point for removeable media
mnt Mount point for mounting a filesystem temporarily
opt Add-on application software packages
sbin Essential system binaries
srv Data for services provided by this system
tmp Temporary files
usr Secondary hierarchy
var Variable data

Each directory listed above is specified in detail in separatesubsections below. /usr and/var each have a complete section in thisdocument due to the complexity of those directories.


Specific Options

The following directories, or symbolic links to directories,must be in /, if the corresponding subsystem isinstalled:

Directory Description
home User home directories (optional)
lib Alternate format essential shared libraries (optional)
root Home directory for the root user (optional)

Each directory listed above is specified in detail in separatesubsections below.


/bin : Essential user command binaries (for use by all users)

Purpose

/bin contains commands that may be used byboth the system administrator and by users, but which are requiredwhen no other filesystems are mounted (e.g. in single user mode). Itmay also contain commands which are used indirectly by scripts.[1]


Requirements

There must be no subdirectories in/bin.

The following commands, or symbolic links to commands, arerequired in /bin.

Command Description
cat Utility to concatenate files to standard output
chgrp Utility to change file group ownership
chmod Utility to change file access permissions
chown Utility to change file owner and group
cp Utility to copy files and directories
date Utility to print or set the system data and time
dd Utility to convert and copy a file
df Utility to report filesystem disk space usage
dmesg Utility to print or control the kernel message buffer
echo Utility to display a line of text
false Utility to do nothing, unsuccessfully
hostname Utility to show or set the system's host name
kill Utility to send signals to processes
ln Utility to make links between files
login Utility to begin a session on the system
ls Utility to list directory contents
mkdir Utility to make directories
mknod Utility to make block or character special files
more Utility to page through text
mount Utility to mount a filesystem
mv Utility to move/rename files
ps Utility to report process status
pwd Utility to print name of current working directory
rm Utility to remove files or directories
rmdir Utility to remove empty directories
sed The `sed' stream editor
sh The Bourne command shell
stty Utility to change and print terminal line settings
su Utility to change user ID
sync Utility to flush filesystem buffers
true Utility to do nothing, successfully
umount Utility to unmount file systems
uname Utility to print system information

If /bin/sh is not a true Bourne shell, itmust be a hard or symbolic link to the real shell command.

The [ and testcommands must be placed together in either /binor /usr/bin.

Tip Rationale
 

For example bash behaves differently when called assh or bash. The use of asymbolic link also allows users to easily see that/bin/sh is not a true Bourne shell.

The requirement for the [ andtest commands to be included as binaries (even ifimplemented internally by the shell) is shared with the POSIX.2standard.


Specific Options

The following programs, or symbolic links to programs, must bein /bin if the corresponding subsystem isinstalled:

Command Description
csh The C shell (optional)
ed The `ed' editor (optional)
tar The tar archiving utility (optional)
cpio The cpio archiving utility (optional)
gzip The GNU compression utility (optional)
gunzip The GNU uncompression utility (optional)
zcat The GNU uncompression utility (optional)
netstat The network statistics utility (optional)
ping The ICMP network test utility (optional)

If the gunzip and zcatprograms exist, they must be symbolic or hard links togzip. /bin/csh may be a symbolic link to/bin/tcsh or/usr/bin/tcsh.

Tip Rationale
 

The tar, gzip and cpio commands have been added to make restoration of asystem possible (provided that / is intact).

Conversely, if no restoration from the root partition is everexpected, then these binaries might be omitted (e.g., a ROM chip root,mounting /usr through NFS). If restoration of asystem is planned through the network, then ftpor tftp (along with everything necessary to getan ftp connection) must be available on the root partition.


/boot : Static files of the boot loader

Purpose

This directory contains everything required for the boot processexcept configuration files not needed at boot time and the mapinstaller. Thus /boot stores data that is used before the kernelbegins executing user-mode programs. This may include saved masterboot sectors and sector map files.[2]


Specific Options

The operating system kernel must be located in either/ or /boot.[3]


/dev : Device files

Purpose

The /dev directory is the location ofspecial or device files.


Specific Options

If it is possible that devices in /dev willneed to be manually created, /dev must contain acommand named MAKEDEV, which can create devicesas needed. It may also contain a MAKEDEV.localfor any local devices.

If required, MAKEDEV must have provisionsfor creating any device that may be found on the system, not justthose that a particular implementation installs.


/etc : Host-specific system configuration

Purpose

The /etc hierarchy contains configurationfiles. A "configuration file" is a local file used to control theoperation of a program; it must be static and cannot be an executablebinary.[4]


Requirements

No binaries may be located under /etc.[5]

The following directories, or symbolic links to directories arerequired in /etc:

Directory Description
opt Configuration for /opt
X11 Configuration for the X Window system (optional)
sgml Configuration for SGML (optional)
xml Configuration for XML (optional)

Specific Options

The following directories, or symbolic links to directories mustbe in /etc, if the corresponding subsystem isinstalled:

Directory Description
opt Configuration for /opt

The following files, or symbolic links to files, must be in/etc if the corresponding subsystem isinstalled:[6]

File Description
csh.login Systemwide initialization file for C shell logins (optional)
exports NFS filesystem access control list (optional)
fstab Static information about filesystems (optional)
ftpusers FTP daemon user access control list (optional)
gateways File which lists gateways for routed (optional)
gettydefs Speed and terminal settings used by getty (optional)
group User group file (optional)
host.conf Resolver configuration file (optional)
hosts Static information about host names (optional)
hosts.allow Host access file for TCP wrappers (optional)
hosts.deny Host access file for TCP wrappers (optional)
hosts.equiv List of trusted hosts for rlogin, rsh, rcp (optional)
hosts.lpd List of trusted hosts for lpd (optional)
inetd.conf Configuration file for inetd (optional)
inittab Configuration file for init (optional)
issue Pre-login message and identification file (optional)
ld.so.conf List of extra directories to search for shared libraries (optional)
motd Post-login message of the day file (optional)
mtab Dynamic information about filesystems (optional)
mtools.conf Configuration file for mtools (optional)
networks Static information about network names (optional)
passwd The password file (optional)
printcap The lpd printer capability database (optional)
profile Systemwide initialization file for sh shell logins (optional)
protocols IP protocol listing (optional)
resolv.conf Resolver configuration file (optional)
rpc RPC protocol listing (optional)
securetty TTY access control for root login (optional)
services Port names for network services (optional)
shells Pathnames of valid login shells (optional)
syslog.conf Configuration file for syslogd (optional)

mtab does not fit the static nature of/etc: it is excepted for historical reasons.[7]


/etc/opt : Configuration files for /opt

Purpose

Host-specific configuration files for add-on applicationsoftware packages must be installed within the directory/etc/opt/, where is the name of the subtree in/opt where the static data from that package isstored.


Requirements

No structure is imposed on the internal arrangement of/etc/opt/.

If a configuration file must reside in a different location inorder for the package or system to function properly, it may be placedin a location other than/etc/opt/.

Tip Rationale
 

Refer to the rationale for /opt.


/etc/X11 : Configuration for the X Window System (optional)

Purpose

/etc/X11 is the location for all X11host-specific configuration. This directory is necessary to allowlocal control if /usr is mounted readonly.


Specific Options

The following files, or symbolic links to files, must be in/etc/X11 if the corresponding subsystem isinstalled:

File Description
Xconfig The configuration file for early versions of XFree86 (optional)
XF86Config The configuration file for XFree86 versions 3 and 4 (optional)
Xmodmap Global X11 keyboard modification file (optional)

Subdirectories of /etc/X11 may includethose for xdm and for any other programs (somewindow managers, for example) that need them.[8]We recommend that window managers with only one configuration filewhich is a default .*wmrc file must name itsystem.*wmrc (unless there is a widely-acceptedalternative name) and not use a subdirectory. Any window managersubdirectories must be identically named to the actual window managerbinary.


/etc/sgml : Configuration files for SGML (optional)

Purpose

Generic configuration files defining high-level parameters ofthe SGML systems are installed here. Files with names*.conf indicate generic configuration files.File with names *.cat are the DTD-specificcentralized catalogs, containing references to all other catalogsneeded to use the given DTD. The super catalog filecatalog references all the centralizedcatalogs.


/etc/xml : Configuration files for XML (optional)

Purpose

Generic configuration files defining high-level parameters ofthe XML systems are installed here. Files with names*.conf indicate generic configuration files.The super catalog filecatalog references all the centralizedcatalogs.


/home : User home directories (optional)

Purpose

/home is a fairly standard concept, but itis clearly a site-specific filesystem.[9]The setup will differ from host to host. Therefore, no program shouldrely on this location.[10]


Requirements

User specific configuration files for applications are stored in theuser's home directory in a file that starts with the '.' character (a"dot file"). If an application needs to create more than one dot filethen they should be placed in a subdirectory with a name starting witha '.' character, (a "dot directory"). In this case the configurationfiles should not start with the '.' character.[11]


/lib : Essential shared libraries and kernel modules

Purpose

The /lib directory contains those sharedlibrary images needed to boot the system and run the commands in theroot filesystem, ie. by binaries in /bin and/sbin.[12]


Requirements

At least one of each of the following filename patterns arerequired (they may be files, or symbolic links):

File Description
libc.so.* The dynamically-linked C library (optional)
ld* The execution time linker/loader (optional)

If a C preprocessor is installed, /lib/cppmust be a reference to it, for historical reasons.[13]


Specific Options

The following directories, or symbolic links to directories,must be in /lib, if the corresponding subsystemis installed:

Directory Description
modules Loadable kernel modules (optional)

/lib : Alternate format essential shared libraries (optional)

Purpose

There may be one or more variants of the/lib directory on systems which support more thanone binary format requiring separate libraries.[14]


Requirements

If one or more of these directories exist, the requirements fortheir contents are the same as the normal /libdirectory, except that /lib/cpp isnot required.[15]


/media : Mount point for removeable media

Purpose

This directory contains subdirectories which are used as mountpoints for removeable media such as floppy disks, cdroms and zipdisks.

Tip Rationale
 

Historically there have been a number of other different placesused to mount removeable media such as /cdrom,/mnt or /mnt/cdrom. Placingthe mount points for all removeable media directly in the rootdirectory would potentially result in a large number of extradirectories in /. Although the use ofsubdirectories in /mnt as a mount point hasrecently been common, it conflicts with a much older tradition ofusing /mnt directly as a temporary mount point.


Specific Options

The following directories, or symbolic links to directories,must be in /media, if the corresponding subsystemis installed:

Directory Description
floppy Floppy drive (optional)
cdrom CD-ROM drive (optional)
cdrecorder CD writer (optional)
zip Zip drive (optional)

On systems where more than one device exists for mounting acertain type of media, mount directories can be created by appending adigit to the name of those available above starting with '0', but theunqualified name must also exist.[16]


/mnt : Mount point for a temporarily mounted filesystem

Purpose

This directory is provided so that the system administrator maytemporarily mount a filesystem as needed. The content of thisdirectory is a local issue and should not affect the manner in whichany program is run.

This directory must not be used by installation programs: asuitable temporary directory not in use by the system must be usedinstead.


/opt : Add-on application software packages

Purpose

/opt is reserved for the installation ofadd-on application software packages.

A package to be installed in /opt mustlocate its static files in a separate/opt/ or/opt/ directorytree, where is a name thatdescribes the software package and is the provider's LANANAregistered name.


Requirements

Directory Description
Static package objects
LANANA registered provider name

The directories /opt/bin,/opt/doc, /opt/include,/opt/info, /opt/lib, and/opt/man are reserved for local systemadministrator use. Packages may provide "front-end" files intended tobe placed in (by linking or copying) these reserved directories by thelocal system administrator, but must function normally in the absenceof these reserved directories.

Programs to be invoked by users must be located in the directory/opt//bin or under the/opt/ hierarchy. If the packageincludes UNIX manual pages, they must be located in/opt//share/man or under the/opt/ hierarchy, and the samesubstructure as /usr/share/man must beused.

Package files that are variable (change in normal operation)must be installed in /var/opt. See the sectionon /var/opt for more information.

Host-specific configuration files must be installed in/etc/opt. See the section on/etc for more information.

No other package files may exist outside the/opt, /var/opt, and/etc/opt hierarchies except for those packagefiles that must reside in specific locations within the filesystemtree in order to function properly. For example, device lock filesmust be placed in /var/lock and devices must belocated in /dev.

Distributions may install software in /opt,but must not modify or delete software installed by the local systemadministrator without the assent of the local systemadministrator.

Tip Rationale
 

The use of /opt for add-on software is awell-established practice in the UNIX community. The System VApplication Binary Interface [AT&T 1990], based on the System VInterface Definition (Third Edition), provides for an/opt structure very similar to the one definedhere.

The Intel Binary Compatibility Standard v. 2 (iBCS2) alsoprovides a similar structure for /opt.

Generally, all data required to support a package on a systemmust be present within /opt/,including files intended to be copied into/etc/opt/ and/var/opt/ as well as reserveddirectories in /opt.

The minor restrictions on distributions using/opt are necessary because conflicts are possiblebetween distribution-installed and locally-installed software,especially in the case of fixed pathnames found in some binarysoftware.

The structure of the directories below/opt/ is left up to the packagerof the software, though it is recommended that packages are installedin /opt// andfollow a similar structure to the guidelines for/opt/package. A valid reason for diverging fromthis structure is for support packages which may have files installedin /opt//lib or/opt//bin.


/root : Home directory for the root user (optional)

Purpose

The root account's home directory may be determined by developeror local preference, but this is the recommended defaultlocation.[17]


/sbin : System binaries

Purpose

Utilities used for system administration (and other root-onlycommands) are stored in /sbin,/usr/sbin, and/usr/local/sbin. /sbincontains binaries essential for booting, restoring, recovering, and/orrepairing the system in addition to the binaries in/bin.[18] Programs executed after/usr is known to be mounted (when there are noproblems) are generally placed into /usr/sbin.Locally-installed system administration programs should be placed into/usr/local/sbin.[19]


Requirements

The following commands, or symbolic links to commands, arerequired in /sbin.

Command Description
shutdown Command to bring the system down.

Specific Options

The following files, or symbolic links to files, must be in/sbin if the corresponding subsystem isinstalled:

Command Description
fastboot Reboot the system without checking the disks (optional)
fasthalt Stop the system without checking the disks (optional)
fdisk Partition table manipulator (optional)
fsck File system check and repair utility (optional)
fsck.* File system check and repair utility for a specific filesystem (optional)
getty The getty program (optional)
halt Command to stop the system (optional)
ifconfig Configure a network interface (optional)
init Initial process (optional)
mkfs Command to build a filesystem (optional)
mkfs.* Command to build a specific filesystem (optional)
mkswap Command to set up a swap area (optional)
reboot Command to reboot the system (optional)
route IP routing table utility (optional)
swapon Enable paging and swapping (optional)
swapoff Disable paging and swapping (optional)
update Daemon to periodically flush filesystem buffers (optional)

/srv : Data for services provided by this system

Purpose

/srv contains site-specific data which isserved by this system.

Tip Rationale
 

This main purpose of specifying this is so that users may find thelocation of the data files for particular service, and so thatservices which require a single tree for readonly data, writable dataand scripts (such as cgi scripts) can be reasonably placed. Data thatis only of interest to a specific user should go in that users' homedirectory.

The methodology used to name subdirectories of/srv is unspecified as there is currently noconsensus on how this should be done. One method for structuring dataunder /srv is by protocol,eg. ftp, rsync,www, and cvs. On largesystems it can be useful to structure /srv byadministrative context, such as /srv/physics/www,/srv/compsci/cvs, etc. This setup will differfrom host to host. Therefore, no program should rely on a specificsubdirectory structure of /srv existing or datanecessarily being stored in /srv. However/srv should always exist on FHS compliant systemsand should be used as the default location for such data.

Distributions must take care not to remove locally placed files inthese directories without administrator permission.[20]


/tmp : Temporary files

Purpose

The /tmp directory must be made availablefor programs that require temporary files.

Programs must not assume that any files or directories in/tmp are preserved between invocations of theprogram.

Tip Rationale
 

IEEE standard P1003.2 (POSIX, part 2) makes requirements thatare similar to the above section.

Although data stored in /tmp may be deletedin a site-specific manner, it is recommended that files anddirectories located in /tmp be deleted wheneverthe system is booted.

FHS added this recommendation on the basis of historicalprecedent and common practice, but did not make it a requirementbecause system administration is not within the scope of thisstandard.


Chapter 4. The /usr Hierarchy

Purpose

/usr is the second major section of thefilesystem. /usr is shareable, read-only data.That means that /usr should be shareable betweenvarious FHS-compliant hosts and must not be written to. Anyinformation that is host-specific or varies with time is storedelsewhere.

Large software packages must not use a direct subdirectory underthe /usr hierarchy.


Requirements

The following directories, or symbolic links to directories, arerequired in /usr.

Directory Description
bin Most user commands
include Header files included by C programs
lib Libraries
local Local hierarchy (empty after main installation)
sbin Non-vital system binaries
share Architecture-independent data

Specific Options

Directory Description
X11R6 XWindow System, version 11 release 6 (optional)
games Games and educational binaries (optional)
lib Alternate Format Libraries (optional)
src Source code (optional)

An exception is made for the X Window System because ofconsiderable precedent and widely-accepted practice.

The following symbolic links to directories may be present. Thispossibility is based on the need to preserve compatibility with oldersystems until all implementations can be assumed to use the/var hierarchy.

    /usr/spool -> /var/spool
    /usr/tmp -> /var/tmp
    /usr/spool/locks -> /var/lock

Once a system no longer requires any one of the above symbolic links,the link may be removed, if desired.


/usr/X11R6 : X Window System, Version 11 Release 6 (optional)

Purpose

This hierarchy is reserved for the X Window System, version 11release 6, and related files.

To simplify matters and make XFree86 more compatible with the XWindow System on other systems, the following symbolic links must bepresent if /usr/X11R6 exists:

    /usr/bin/X11 -> /usr/X11R6/bin
    /usr/lib/X11 -> /usr/X11R6/lib/X11
    /usr/include/X11 -> /usr/X11R6/include/X11

In general, software must not be installed or managed via the abovesymbolic links. They are intended for utilization by users only. Thedifficulty is related to the release version of the X Window System —in transitional periods, it is impossible to know what release of X11 isin use.


Specific Options

Host-specific data in /usr/X11R6/lib/X11 should be interpretedas a demonstration file. Applications requiring information about thecurrent host must reference a configuration file in /etc/X11,which may be linked to a file in /usr/X11R6/lib.[21]


/usr/bin : Most user commands

Purpose

This is the primary directory of executable commands on thesystem.


Specific Options

The following directories, or symbolic links to directories,must be in /usr/bin, if the correspondingsubsystem is installed:

Directory Description
mh Commands for the MH mail handling system (optional)

/usr/bin/X11 must be a symlink to/usr/X11R6/bin if the latter exists.

The following files, or symbolic links to files, must be in/usr/bin, if the corresponding subsystem isinstalled:

Command Description
perl The Practical Extraction and Report Language (optional)
python The Python interpreted language (optional)
tclsh Simple shell containing Tcl interpreter (optional)
wish Simple Tcl/Tk windowing shell (optional)
expect Program for interactive dialog (optional)
Tip Rationale
 

Because shell script interpreters (invoked with#! on the first line of a shellscript) cannot rely on a path, it is advantageous to standardize theirlocations. The Bourne shell and C-shell interpreters are alreadyfixed in /bin, but Perl, Python, and Tcl areoften found in many different places. They may be symlinks to thephysical location of the shell interpreters.


/usr/include : Directory for standard include files.

Purpose

This is where all of the system's general-use include files for the Cprogramming language should be placed.


Specific Options

The following directories, or symbolic links to directories,must be in /usr/include, if the correspondingsubsystem is installed:

Directory Description
bsd BSD compatibility include files (optional)

The symbolic link /usr/include/X11 mustlink to /usr/X11R6/include/X11 if the latterexists.


/usr/lib : Libraries for programming and packages

Purpose

/usr/lib includes object files, libraries,and internal binaries that are not intended to be executed directly byusers or shell scripts.[22]

Applications may use a single subdirectory under/usr/lib. If an application uses a subdirectory,all architecture-dependent data exclusively used by the applicationmust be placed within that subdirectory. [23]


Specific Options

For historical reasons, /usr/lib/sendmailmust be a symbolic link to /usr/sbin/sendmail ifthe latter exists.[24]

If /lib/X11 exists,/usr/lib/X11 must be a symbolic link to/lib/X11, or to whatever/lib/X11 is a symbolic link to.[25]


/usr/lib : Alternate format libraries (optional)

Purpose

/usr/lib performs the same role as /usr/lib for analternate binary format, except that the symbolic links/usr/lib/sendmail and /usr/lib/X11 are not required.[26]


/usr/local : Local hierarchy

Purpose

The /usr/local hierarchy is for use by thesystem administrator when installing software locally. It needs to besafe from being overwritten when the system software is updated. Itmay be used for programs and data that are shareable amongst a groupof hosts, but not found in /usr.

Locally installed software must be placed within/usr/local rather than /usrunless it is being installed to replace or upgrade software in/usr.[27]


Requirements

The following directories, or symbolic links to directories,must be in /usr/local

Directory Description
bin Local binaries
etc Host-specific system configuration for local binaries
games Local game binaries
include Local C header files
lib Local libraries
man Local online manuals
sbin Local system binaries
share Local architecture-independent hierarchy
src Local source code

No other directories, except those listed below, may be in/usr/local after first installing a FHS-compliantsystem.


Specific Options

If directories /lib or/usr/lib exist, the equivalentdirectories must also exist in /usr/local.

/usr/local/etc may be a symbolic link to/etc/local.

Tip Rationale
 

The consistency of /usr/local/etc isbeneficial to installers, and is already used in other systems. Asall of /usr/local needs to be backed up toreproduce a system, it introduces no additional maintenance overhead,but a symlink to /etc/local is suitable ifsystems want alltheir configuration under one hierarchy.

Note that /usr/etc is still not allowed: programsin /usr should place configuration files in/etc.


/usr/local/share

The requirements for the contents of this directory are the sameas /usr/share. The only additional constraint isthat /usr/local/share/man and/usr/local/man directories must be synonomous(usually this means that one of them must be a symbolic link).[28]


/usr/sbin : Non-essential standard system binaries

Purpose

This directory contains any non-essential binaries usedexclusively by the system administrator. System administrationprograms that are required for system repair, system recovery,mounting /usr, or other essential functions mustbe placed in /sbin instead.[29]


/usr/share : Architecture-independent data

Purpose

The /usr/share hierarchy is for allread-only architecture independent data files.[30]

This hierarchy is intended to be shareable among allarchitecture platforms of a given OS; thus, for example, a site withi386, Alpha, and PPC platforms might maintain a single/usr/share directory that is centrally-mounted.Note, however, that /usr/share is generally notintended to be shared by different OSes or by different releases ofthe same OS.

Any program or package which contains or requires data thatdoesn't need to be modified should store that data in/usr/share (or/usr/local/share, if installed locally). It isrecommended that a subdirectory be used in/usr/share for this purpose.

Game data stored in /usr/share/games mustbe purely static data. Any modifiable files, such as score files,game play logs, and so forth, should be placed in/var/games.


Requirements

The following directories, or symbolic links to directories,must be in /usr/share

Directory Description
man Online manuals
misc Miscellaneous architecture-independent data

Specific Options

The following directories, or symbolic links to directories, must be in /usr/share, if the correspondingsubsystem is installed:

Directory Description
dict Word lists (optional)
doc Miscellaneous documentation (optional)
games Static data files for /usr/games (optional)
info GNU Info system s primary directory (optional)
locale Locale information (optional)
nls Message catalogs for Native language support (optional)
sgml SGML data (optional)
terminfo Directories for terminfo database (optional)
tmac troff macros not distributed with groff (optional)
xml XML data (optional)
zoneinfo Timezone information and configuration (optional)

It is recommended that application-specific,architecture-independent directories be placed here. Such directoriesinclude groff, perl,ghostscript, texmf, andkbd (Linux) or syscons(BSD). They may, however, be placed in /usr/libfor backwards compatibility, at the distributor's discretion.Similarly, a /usr/lib/games hierarchy may be usedin addition to the /usr/share/games hierarchy ifthe distributor wishes to place some game data there.


/usr/share/dict : Word lists (optional)

Purpose

This directory is the home for word lists on the system;Traditionally this directory contains only the Englishwords file, which is used bylook(1) and various spelling programs.words may use either American or Britishspelling.

Tip Rationale
 

The reason that only word lists are located here is that theyare the only files common to all spell checkers.


Specific Options

The following files, or symbolic links to files, must be in/usr/share/dict, if the corresponding subsystemis installed:

File Description
words List of English words (optional)

Sites that require both American and British spelling may linkwords to­/usr/share/dict/american-english or­/usr/share/dict/british-english.

Word lists for other languages may be added using the Englishname for that language, e.g.,/usr/share/dict/french,/usr/share/dict/danish, etc. These should, ifpossible, use an ISO 8859 character set which is appropriate for thelanguage in question; if possible the Latin1 (ISO 8859-1) characterset should be used (this is often not possible).

Other word lists must be included here, if present.


/usr/share/man : Manual pages

Purpose

This section details the organization for manual pagesthroughout the system, including /usr/share/man.Also refer to the section on/var/cache/man.

The primary of the system is/usr/share/man./usr/share/man contains manual information forcommands and data under the / and/usr filesystems.[31]

Manual pages are stored in//man

/.An explanation of ,,
, and is given below.

A description of each section follows:

  • man1: User programsManual pages that describe publicly accessible commands are contained inthis chapter. Most program documentation that a user will need to useis located here.

  • man2: System callsThis section describes all of the system calls (requests for thekernel to perform operations).

  • man3: Library functions and subroutinesSection 3 describes program library routines that are not direct callsto kernel services. This and chapter 2 are only really of interest toprogrammers.

  • man4: Special filesSection 4 describes the special files, related driver functions, andnetworking support available in the system. Typically, this includesthe device files found in /dev and the kernel interface tonetworking protocol support.

  • man5: File formatsThe formats for many data files are documented in thesection 5. This includes various include files, program output files,and system files.

  • man6: GamesThis chapter documents games, demos, and generally trivial programs.Different people have various notions about how essential this is.

  • man7: MiscellaneousManual pages that are difficult to classify are designated as beingsection 7. The troff and other text processing macro packages are foundhere.

  • man8: System administrationPrograms used by system administrators for system operation andmaintenance are documented here. Some of these programs are alsooccasionally useful for normal users.


Specific Options

The following directories, or symbolic links to directories,must be in/usr/share//, unlessthey are empty:[32]

Directory Description
man1 User programs (optional)
man2 System calls (optional)
man3 Library calls (optional)
man4 Special files (optional)
man5 File formats (optional)
man6 Games (optional)
man7 Miscellaneous (optional)
man8 System administration (optional)

The component

describes themanual section.

Provisions must be made in the structure of/usr/share/man to support manual pages which arewritten in different (or multiple) languages. These provisions musttake into account the storage and reference of these manual pages.Relevant factors include language (including geographical-baseddifferences), and character code set.

This naming of language subdirectories of/usr/share/man is based on Appendix E of thePOSIX 1003.1 standard which describes the locale identification string— the most well-accepted method to describe a culturalenvironment. The stringis:

[_][.][,]

The field must be takenfrom ISO 639 (a code for the representation of names of languages).It must be two characters wide and specified with lowercase lettersonly.

The field must be thetwo-letter code of ISO 3166 (a specification of representations ofcountries), if possible. (Most people are familiar with thetwo-letter codes used for the country codes in email addresses.) Itmust be two characters wide and specified with uppercase lettersonly.[33]

The field mustrepresent the standard describing the character set. If the­ field is just anumeric specification, the number represents the number of theinternational standard describing the character set. It isrecommended that this be a numeric representation if possible (ISOstandards, especially), not include additional punctuation symbols,and that any letters be in lowercase.

A parameter specifying a ofthe profile may be placed after the­ field, delimited by acomma. This may be used to discriminate between different culturalneeds; for instance, dictionary order versus a more systems-orientedcollating order. This standard recommends not using the field, unless it isnecessary.

Systems which use a unique language and code set for all manualpages may omit the substring andstore all manual pages in . Forexample, systems which only have English manual pages coded withASCII, may store manual pages (theman

directories) directly in/usr/share/man. (That is the traditionalcircumstance and arrangement, in fact.)

Countries for which there is a well-accepted standard charactercode set may omit the ­field, but it is strongly recommended that it be included, especiallyfor countries with several competing standards.

Various examples:

Language Territory Character Set Directory
English ASCII /usr/share/man/en
English United Kingdom ISO 8859-15 /usr/share/man/en_GB
English United States ASCII /usr/share/man/en_US
French Canada ISO 8859-1 /usr/share/man/fr_CA
French France ISO 8859-1 /usr/share/man/fr_FR
German Germany ISO 646 /usr/share/man/de_DE.646
German Germany ISO 6937 /usr/share/man/de_DE.6937
German Germany ISO 8859-1 /usr/share/man/de_DE.88591
German Switzerland ISO 646 /usr/share/man/de_CH.646
Japanese Japan JIS /usr/share/man/ja_JP.jis
Japanese Japan SJIS /usr/share/man/ja_JP.sjis
Japanese Japan UJIS (or EUC-J) /usr/share/man/ja_JP.ujis

Similarly, provision must be made for manual pages which arearchitecture-dependent, such as documentation on device-drivers orlow-level system administration commands. These must be placed underan directory in the appropriateman

directory; for example, a manpage for the i386 ctrlaltdel(8) command might be placed in/usr/share/man//man8/i386/ctrlaltdel.8.

Manual pages for commands and data under/usr/local are stored in/usr/local/man. Manual pages for X11R6 arestored in /usr/X11R6/man. It follows that allmanual page hierarchies in the system must have the same structure as/usr/share/man.

The cat page sections (cat

)containing formatted manual page entries are also found withinsubdirectories of /,but are not required nor may they be distributed in lieu of nroffsource manual pages.

The numbered sections "1" through "8" are traditionally defined.In general, the file name for manual pages located within a particularsection end with .

.

In addition, some large sets of application-specific manualpages have an additional suffix appended to the manual page filename.For example, the MH mail handling system manual pages must havemh appended to all MH manuals. All X WindowSystem manual pages must have an x appended tothe filename.

The practice of placing various language manual pages inappropriate subdirectories of /usr/share/man alsoapplies to the other manual page hierarchies, such as/usr/local/man and/usr/X11R6/man. (This portion of the standardalso applies later in the section on the optional/var/cache/man structure.)


/usr/share/misc : Miscellaneous architecture-independent data

This directory contains miscellaneous architecture-independentfiles which don't require a separate subdirectory under/usr/share.


Specific Options

The following files, or symbolic links to files, must be in/usr/share/misc, if the corresponding subsystemis installed:

File Description
ascii ASCII character set table (optional)
magic Default list of magic numbers for the file command (optional)
termcap Terminal capability database (optional)
termcap.db Terminal capability database (optional)

Other (application-specific) files may appear here, but a distributormay place them in /usr/lib at their discretion.[34]


/usr/share/sgml : SGML data (optional)

Purpose

/usr/share/sgml containsarchitecture-independent files used by SGML applications, suchas ordinary catalogs (not the centralized ones, see/etc/sgml), DTDs, entities, or stylesheets.


Specific Options

The following directories, or symbolic links to directories,must be in /usr/share/sgml, if the correspondingsubsystem is installed:

Directory Description
docbook docbook DTD (optional)
tei tei DTD (optional)
html html DTD (optional)
mathml mathml DTD (optional)

Other files that are not specific to a given DTD may reside intheir own subdirectory.


/usr/share/xml : XML data (optional)

Purpose

/usr/share/xml containsarchitecture-independent files used by XML applications, suchas ordinary catalogs (not the centralized ones, see/etc/sgml), DTDs, entities, or stylesheets.


Specific Options

The following directories, or symbolic links to directories,must be in /usr/share/xml, if the correspondingsubsystem is installed:

Directory Description
docbook docbook XML DTD (optional)
xhtml XHTML DTD (optional)
mathml MathML DTD (optional)

/usr/src : Source code (optional)

Purpose

Source code may be place placed in thissubdirectory, only for reference purposes.[35]


Chapter 5. The /var Hierarchy

Purpose

/var contains variable data files. Thisincludes spool directories and files, administrative and logging data,and transient and temporary files.

Some portions of /var are not shareablebetween different systems. For instance,/var/log, /var/lock, and/var/run. Other portions may be shared, notably/var/mail, /var/cache/man,/var/cache/fonts, and/var/spool/news.

/var is specified here in order to make itpossible to mount /usr read-only. Everythingthat once went into /usr that is written toduring system operation (as opposed to installation and softwaremaintenance) must be in /var.

If /var cannot be made a separatepartition, it is often preferable to move /varout of the root partition and into the /usrpartition. (This is sometimes done to reduce the size of the rootpartition or when space runs low in the root partition.) However,/var must not be linked to/usr because this makes separation of/usr and /var more difficultand is likely to create a naming conflict. Instead, link/var to /usr/var.

Applications must generally not add directories to the top levelof /var. Such directories should only be addedif they have some system-wide implication, and in consultation withthe FHS mailing list.


Requirements

The following directories, or symbolic links to directories, arerequired in /var.

Directory Description
cache Application cache data
lib Variable state information
local Variable data for /usr/local
lock Lock files
log Log files and directories
opt Variable data for /opt
run Data relevant to running processes
spool Application spool data
tmp Temporary files preserved between system reboots

Several directories are `reserved' in the sense that they mustnot be used arbitrarily by some new application, since they wouldconflict with historical and/or local practice. They are:

    /var/backups
    /var/cron
    /var/msgs
    /var/preserve

Specific Options

The following directories, or symbolic links to directories,must be in /var, if the corresponding subsystemis installed:

Directory Description
account Process accounting logs (optional)
crash System crash dumps (optional)
games Variable game data (optional)
mail User mailbox files (optional)
yp Network Information Service (NIS) database files (optional)

/var/account : Process accounting logs (optional)

Purpose

This directory holds the current active process accounting logand the composite process usage data (as used in some UNIX-likesystems by lastcomm andsa).


/var/cache : Application cache data

Purpose

/var/cache is intended for cached data fromapplications. Such data is locally generated as a result oftime-consuming I/O or calculation. The application must be able toregenerate or restore the data. Unlike/var/spool, the cached files can be deletedwithout data loss. The data must remain valid between invocations ofthe application and rebooting the system.

Files located under /var/cache may beexpired in an application specific manner, by the systemadministrator, or both. The application must always be able torecover from manual deletion of these files (generally because of adisk space shortage). No other requirements are made on the dataformat of the cache directories.

Tip Rationale
 

The existence of a separate directory for cached data allowssystem administrators to set different disk and backup policies fromother directories in /var.


Specific Options

Directory Description
fonts Locally-generated fonts (optional)
man Locally-formatted manual pages (optional)
www WWW proxy or cache data (optional)
Package specific cache data (optional)

/var/cache/fonts : Locally-generated fonts (optional)

Purpose

The directory /var/cache/fonts should be used to store anydynamically-created fonts. In particular, all of the fonts which areautomatically generated by mktexpk must be located inappropriately-named subdirectories of /var/cache/fonts.[36]


Specific Options

Other dynamically created fonts may also be placed in this tree,under appropriately-named subdirectories of/var/cache/fonts.


/var/cache/man : Locally-formatted manual pages (optional)

Purpose

This directory provides a standard location for sites that provide aread-only /usr partition, but wish to allow caching oflocally-formatted man pages. Sites that mount /usr as writable(e.g., single-user installations) may choose not to use/var/cache/man and may write formatted man pages into thecat

directories in /usr/share/man directly. Werecommend that most sites use one of the following options instead:

  • Preformat all manual pages alongside the unformatted versions.

  • Allow no caching of formatted man pages, and require formatting to bedone each time a man page is brought up.

  • Allow local caching of formatted man pages in /var/cache/man.

The structure of /var/cache/man needs toreflect both the fact of multiple man page hierarchies and thepossibility of multiple language support.

Given an unformatted manual page that normally appears in/man//man

,the directory to place formatted man pages in is/var/cache/man///cat
,where is derived from by removing any leadingusr and/or trailing sharepathname components. (Note that the component may be missing.)[37]

Man pages written to /var/cache/man mayeventually be transferred to the appropriate preformatted directoriesin the source man hierarchy or expired; likewiseformatted man pages in the source man hierarchymay be expired if they are not accessed for a period of time.

If preformatted manual pages come with a system on read-onlymedia (a CD-ROM, for instance), they must be installed in the sourceman hierarchy(e.g. /usr/share/man/cat

)./var/cache/man is reserved as a writable cachefor formatted manual pages.

Tip Rationale
 

Release 1.2 of the standard specified/var/catman for this hierarchy. The path hasbeen moved under /var/cache to better reflect thedynamic nature of the formatted man pages. The directory name hasbeen changed to man to allow for enhancing thehierarchy to include post-processed formats other than "cat", such asPostScript, HTML, or DVI.


/var/crash : System crash dumps (optional)

Purpose

This directory holds system crash dumps. As of the date of thisrelease of the standard, system crash dumps were not supported underLinux but may be supported by other systems which may comply with theFHS.


/var/games : Variable game data (optional)

Purpose

Any variable data relating to games in /usrshould be placed here. /var/games should holdthe variable data previously found in /usr;static data, such as help text, level descriptions, and so on, mustremain elsewhere, such as/usr/share/games.

Tip Rationale
 

/var/games has been given a hierarchy ofits own, rather than leaving it merged in with the old/var/lib as in release 1.2. The separationallows local control of backup strategies, permissions, and diskusage, as well as allowing inter-host sharing and reducing clutter in/var/lib. Additionally,/var/games is the path traditionally used by BSD.


/var/lib : Variable state information

Purpose

This hierarchy holds state information pertaining to anapplication or the system. State information is data that programsmodify while they run, and that pertains to one specific host. Usersmust never need to modify files in /var/lib toconfigure a package's operation.

State information is generally used to preserve the condition ofan application (or a group of inter-related applications) betweeninvocations and between different instances of the same application.State information should generally remain valid after a reboot, shouldnot be logging output, and should not be spooled data.

An application (or a group of inter-related applications) mustuse a subdirectory of /var/lib for its data.There is one required subdirectory,/var/lib/misc, which is intended for state filesthat don't need a subdirectory; the other subdirectories should onlybe present if the application in question is included in thedistribution.[38]

/var/lib/ is the location thatmust be used for all distribution packaging support. Differentdistributions may use different names, of course.


Requirements

The following directories, or symbolic links to directories, arerequired in /var/lib:

Directory Description
misc Miscellaneous state data

Specific Options

The following directories, or symbolic links to directories, must be in /var/lib, if thecorresponding subsystem is installed:

Directory Description
Editor backup files and state (optional)
Packaging support files (optional)
State data for packages and subsystems (optional)
hwclock State directory for hwclock (optional)
xdm X display manager variable data (optional)

/var/lib/ : Editor backup files and state (optional)

Purpose

These directories contain saved files generated by anyunexpected termination of an editor (e.g., elvis,jove, nvi).

Other editors may not require a directory for crash-recoveryfiles, but may require a well-defined place to store other informationwhile the editor is running. This information should be stored in asubdirectory under /var/lib (for example, GNUEmacs would place lock files in/var/lib/emacs/lock).

Future editors may require additional state information beyondcrash-recovery files and lock files — this information shouldalso be placed under/var/lib/.

Tip Rationale
 

Previous Linux releases, as well as all commercial vendors, use/var/preserve for vi or its clones. However,each editor uses its own format for these crash-recovery files, so aseparate directory is needed for each editor.

Editor-specific lock files are usually quite different from thedevice or resource lock files that are stored in/var/lock and, hence, are stored under/var/lib.


/var/lib/hwclock : State directory for hwclock (optional)

Purpose

This directory contains the file/var/lib/hwclock/adjtime.

Tip Rationale
 

In FHS 2.1, this file was /etc/adjtime, butas hwclock updates it, that was obviouslyincorrect.


/var/lib/misc : Miscellaneous variable data

Purpose

This directory contains variable data not placed in asubdirectory in /var/lib. An attempt should bemade to use relatively unique names in this directory to avoidnamespace conflicts.[39]


/var/lock : Lock files

Purpose

Lock files should be stored within the/var/lock directory structure.

Lock files for devices and other resources shared by multipleapplications, such as the serial device lock files that wereoriginally found in either /usr/spool/locks or/usr/spool/uucp, must now be stored in/var/lock. The naming convention which must beused is "LCK.." followed by the base name of the device. For example,to lock /dev/ttyS0 the file "LCK..ttyS0" would be created.[40]

The format used for the contents of such lock files must be theHDB UUCP lock file format. The HDB format is to store the processidentifier (PID) as a ten byte ASCII decimal number, with a trailingnewline. For example, if process 1230 holds a lock file, it wouldcontain the eleven characters: space, space, space, space, space,space, one, two, three, zero, and newline.


/var/log : Log files and directories

Purpose

This directory contains miscellaneous log files. Most logs mustbe written to this directory or an appropriate subdirectory.


Specific Options

The following files, or symbolic links to files, must be in/var/log, if the corresponding subsystem isinstalled:

File Description
lastlog record of last login of each user
messages system messages from syslogd
wtmp record of all logins and logouts

/var/mail : User mailbox files (optional)

Purpose

The mail spool must be accessible through/var/mail and the mail spool files must take theform .[41]

User mailbox files in this location must be stored in the standardUNIX mailbox format.

Tip Rationale
 

The logical location for this directory was changed from/var/spool/mail in order to bring FHS in-linewith nearly every UNIX implementation. This change is important forinter-operability since a single /var/mail isoften shared between multiple hosts and multiple UNIX implementations(despite NFS locking issues).

It is important to note that there is no requirement tophysically move the mail spool to this location. However, programsand header files must be changed to use/var/mail.


/var/opt : Variable data for /opt

Purpose

Variable data of the packages in /opt mustbe installed in /var/opt/, where is the name of the subtree in/opt where the static data from an add-onsoftware package is stored, except where superseded by another file in/etc. No structure is imposed on the internalarrangement of /var/opt/.

Tip Rationale
 

Refer to the rationale for /opt.


/var/run : Run-time variable data

Purpose

This directory contains system information data describing thesystem since it was booted. Files under this directory must becleared (removed or truncated as appropriate) at the beginning of theboot process. Programs may have a subdirectory of/var/run; this is encouraged for programs thatuse more than one run-time file.[42]Process identifier (PID) files, which were originally placed in/etc, must be placed in/var/run. The naming convention for PID files is.pid. For example, thecrond PID file is named/var/run/crond.pid.


Requirements

The internal format of PID files remains unchanged. The filemust consist of the process identifier in ASCII-encoded decimal,followed by a newline character. For example, ifcrond was process number 25,/var/run/crond.pid would contain threecharacters: two, five, and newline.

Programs that read PID files should be somewhat flexible in whatthey accept; i.e., they should ignore extra whitespace, leadingzeroes, absence of the trailing newline, or additional lines in thePID file. Programs that create PID files should use the simplespecification located in the above paragraph.

The utmp file, which stores informationabout who is currently using the system, is located in thisdirectory.

System programs that maintain transient UNIX-domain sockets must placethem in this directory.


/var/spool : Application spool data

Purpose

/var/spool contains data which is awaitingsome kind of later processing. Data in/var/spool represents work to be done in thefuture (by a program, user, or administrator); often data is deletedafter it has been processed.[43]


Specific Options

The following directories, or symbolic links to directories,must be in /var/spool, if the correspondingsubsystem is installed:

Directory Description
lpd Printer spool directory (optional)
mqueue Outgoing mail queue (optional)
news News spool directory (optional)
rwho Rwhod files (optional)
uucp Spool directory for UUCP (optional)

/var/spool/lpd : Line-printer daemon print queues (optional)

Purpose

The lock file for lpd,lpd.lock, must be placed in/var/spool/lpd. It is suggested that the lockfile for each printer be placed in the spool directory for thatspecific printer and named lock.


Specific Options
Directory Description
printer Spools for a specific printer (optional)

/var/spool/rwho : Rwhod files (optional)

Purpose

This directory holds the rwhod informationfor other systems on the local net.

Tip Rationale
 

Some BSD releases use /var/rwho for thisdata; given its historical location in /var/spoolon other systems and its approximate fit to the definition of`spooled' data, this location was deemed more appropriate.


/var/tmp : Temporary files preserved between system reboots

Purpose

The /var/tmp directory is made availablefor programs that require temporary files or directories that arepreserved between system reboots. Therefore, data stored in/var/tmp is more persistent than data in/tmp.

Files and directories located in /var/tmpmust not be deleted when the system is booted. Although data storedin /var/tmp is typically deleted in asite-specific manner, it is recommended that deletions occur at a lessfrequent interval than /tmp.


/var/yp : Network Information Service (NIS) database files (optional)

Purpose

Variable data for the Network Information Service (NIS),formerly known as the Sun Yellow Pages (YP), must be placed in thisdirectory.

Tip Rationale
 

/var/yp is the standard directory for NIS(YP) data and is almost exclusively used in NIS documentation andsystems.[44]


Chapter 6. Operating System Specific Annex

This section is for additional requirements and recommendationsthat only apply to a specific operating system. The material in thissection should never conflict with the base standard.


Linux

This is the annex for the Linux operating system.


/ : Root directory

On Linux systems, if the kernel is located in/, we recommend using the namesvmlinux or vmlinuz, whichhave been used in recent Linux kernel source packages.


/bin : Essential user command binaries (for use by all users)

Linux systems which require them place these additional files into/bin:

  • setserial


/dev : Devices and special files

The following devices must exist under /dev.

/dev/null

All data written to this device is discarded. A read from this devicewill return an EOF condition.

/dev/zero

This device is a source of zeroed out data. All data written to thisdevice is discarded. A read from this device will return as many bytescontaining the value zero as was requested.

/dev/tty

This device is a synonym for the controlling terminal of aprocess. Once this device is opened, all reads and writes will behaveas if the actual controlling terminal device had been opened.

Tip Rationale
 

Previous versions of the FHS had stricter requirements for/dev. Other devices may also exist in/dev. Device names may exist as symbolic links to other device nodeslocated in /dev or subdirectories of /dev. There is no requirementconcerning major/minor number values.


/etc : Host-specific system configuration

Linux systems which require them place these additional files into/etc.

  • lilo.conf


/lib64 and /lib32 : 64/32-bit libraries (architecture dependent)

The 64-bit architectures PPC64, s390x, sparc64 and AMD64 must place64-bit libraries in /lib64, and 32-bit(or 31-bit on s390) libraries in /lib.

The 64-bit architecture IA64 must place 64-bit libraries in/lib.

Tip Rationale
 

This is a refinement of the general rules for/lib and/usr/lib. The architectures PPC64,s390x, sparc64 and AMD64 support support both 32-bit (for s390 moreprecise 31-bit) and 64-bit programs. Using libfor 32-bit binaries allows existing binaries from the 32-bit systemsto work without any changes: such binaries are expected to be numerous.IA-64 uses a different scheme, reflecting the deprecation of 32-bitbinaries (and hence libraries) on that architecture.


/proc : Kernel and process information virtual filesystem

The proc filesystem is the de-factostandard Linux method for handling process and system information,rather than /dev/kmem and other similar methods.We strongly encourage this for the storage and retrieval of processinformation as well as other kernel and memory information.


/sbin : Essential system binaries

Linux systems place these additional files into /sbin.

  • Second extended filesystem commands (optional):

    • badblocks

    • dumpe2fs

    • e2fsck

    • mke2fs

    • mklost+found

    • tune2fs

  • Boot-loader map installer (optional):

    • lilo

Optional files for /sbin:

  • Static binaries:

    • ldconfig

    • sln

    • ssync

    Static ln (sln) andstatic sync (ssync) areuseful when things go wrong. The primary use ofsln (to repair incorrect symlinks in/lib after a poorly orchestrated upgrade) is nolonger a major concern now that the ldconfigprogram (usually located in /usr/sbin) exists andcan act as a guiding hand in upgrading the dynamic libraries. Staticsync is useful in some emergency situations.Note that these need not be statically linked versions of the standardln and sync, but maybe.

    The ldconfig binary is optional for/sbin since a site may choose to runldconfig at boot time, rather than only whenupgrading the shared libraries. (It's not clear whether or not it isadvantageous to run ldconfig on each boot.) Evenso, some people like ldconfig around for thefollowing (all too common) situation:

    1. I've just removed /lib/.

    2. I can't find out the name of the library because ls isdynamically linked, I'm using a shell that doesn't have lsbuilt-in, and I don't know about using "echo *" as areplacement.

    3. I have a static sln, but I don't know what to call the link.

  • Miscellaneous:

    • ctrlaltdel

    • kbdrate

    So as to cope with the fact that some keyboards come up withsuch a high repeat rate as to be unusable,kbdrate may be installed in/sbin on some systems.

    Since the default action in the kernel for the Ctrl-Alt-Del keycombination is an instant hard reboot, it is generally advisable todisable the behavior before mounting the root filesystem in read-writemode. Some init suites are able to disableCtrl-Alt-Del, but others may require thectrlaltdel program, which may be installed in/sbin on those systems.


/usr/include : Header files included by C programs

These symbolic links are required if a C or C++ compiler isinstalled and only for systems not based on glibc.

    /usr/include/asm -> /usr/src/linux/include/asm-
    /usr/include/linux -> /usr/src/linux/include/linux

/usr/src : Source code

For systems based on glibc, there are no specific guidelines forthis directory. For systems based on Linux libc revisions prior toglibc, the following guidelines and rationale apply:

The only source code that should be placed in a specificlocation is the Linux kernel source code. It is located in/usr/src/linux.

If a C or C++ compiler is installed, but the complete Linuxkernel source code is not installed, then the include files from thekernel source code must be located in these directories:

    /usr/src/linux/include/asm-
    /usr/src/linux/include/linux

is the name of the systemarchitecture.

Note
 

/usr/src/linuxmay be a symbolic link to a kernel source code tree.

Tip Rationale
 

It is important that the kernel include files be located in/usr/src/linux and not in/usr/include so there are no problems when systemadministrators upgrade their kernel version for the first time.


/var/spool/cron : cron and at jobs

This directory contains the variable data for thecron and at programs.


Chapter 7. Appendix

The FHS mailing list

The FHS mailing list is located at. You cansubscribe to the mailing list at this page http://sourceforge.net/projects/freestandards/.

Thanks to Network Operations at the University of California atSan Diego who allowed us to use their excellent mailing listserver.

As noted in the introduction, please do not send mail to the mailinglist without first contacting the FHS editor or a listed contributor.


Background of the FHS

The process of developing a standard filesystem hierarchy beganin August 1993 with an effort to restructure the file and directorystructure of Linux. The FSSTND, a filesystem hierarchy standardspecific to the Linux operating system, was released on February 14,1994. Subsequent revisions were released on October 9, 1994 and March28, 1995.

In early 1995, the goal of developing a more comprehensiveversion of FSSTND to address not only Linux, but other UNIX-likesystems was adopted with the help of members of the BSD developmentcommunity. As a result, a concerted effort was made to focus onissues that were general to UNIX-like systems. In recognition of thiswidening of scope, the name of the standard was changed to FilesystemHierarchy Standard or FHS for short.

Volunteers who have contributed extensively to this standard arelisted at the end of this document. This standard represents aconsensus view of those and other contributors.


General Guidelines

Here are some of the guidelines that have been used in the developmentof this standard:

  • Solve technical problems while limiting transitional difficulties.

  • Make the specification reasonably stable.

  • Gain the approval of distributors, developers, and other decision-makersin relevant development groups and encourage their participation.

  • Provide a standard that is attractive to the implementors of differentUNIX-like systems.


Scope

This document specifies a standard filesystem hierarchy for FHSfilesystems by specifying the location of files and directories, andthe contents of some system files.

This standard has been designed to be used by systemintegrators, package developers, and system administrators in theconstruction and maintenance of FHS compliant filesystems. It isprimarily intended to be a reference and is not a tutorial on how tomanage a conforming filesystem hierarchy.

The FHS grew out of earlier work on FSSTND, a filesystemorganization standard for the Linux operating system. It builds onFSSTND to address interoperability issues not just in the Linuxcommunity but in a wider arena including 4.4BSD-based operatingsystems. It incorporates lessons learned in the BSD world andelsewhere about multi-architecture support and the demands ofheterogeneous networking.

Although this standard is more comprehensive than previousattempts at filesystem hierarchy standardization, periodic updates maybecome necessary as requirements change in relation to emergingtechnology. It is also possible that better solutions to the problemsaddressed here will be discovered so that our solutions will no longerbe the best possible solutions. Supplementary drafts may be releasedin addition to periodic updates to this document. However, a specificgoal is backwards compatibility from one release of this document tothe next.

Comments related to this standard are welcome. Any comments orsuggestions for changes may be directed to the FHS editor (DanielQuinlan ) or the FHS mailing list.Typographical or grammatical comments should be directed to the FHSeditor.

Before sending mail to the mailing list it is requested that youfirst contact the FHS editor in order to avoid excessive re-discussionof old topics.

Questions about how to interpret items in this document mayoccasionally arise. If you have need for a clarification, pleasecontact the FHS editor. Since this standard represents a consensus ofmany participants, it is important to make certain that anyinterpretation also represents their collective opinion. For thisreason it may not be possible to provide an immediate response unlessthe inquiry has been the subject of previous discussion.


Acknowledgments

The developers of the FHS wish to thank the developers, systemadministrators, and users whose input was essential to this standard.We wish to thank each of the contributors who helped to write,compile, and compose this standard.

The FHS Group also wishes to thank those Linux developers whosupported the FSSTND, the predecessor to this standard. If theyhadn't demonstrated that the FSSTND was beneficial, the FHS couldnever have evolved.


Contributors

Brandon S. Allbery
Keith Bostic
Drew Eckhardt
Rik Faith
Stephen Harris
Ian Jackson
Andreas Jaeger
John A. Martin
Ian McCloghrie
Chris Metcalf
Ian Murdock
David C. Niemi
Daniel Quinlan
Eric S. Raymond
Rusty Russell
Mike Sangrey
David H. Silber
Thomas Sippel-Dau
Theodore Ts'o
Stephen Tweedie
Fred N. van Kempen
Bernd Warken
Christopher Yeoh

Notes

[1]

Command binaries that are not essential enough to place into/bin must be placed in/usr/bin, instead. Items that are required onlyby non-root users (the X Window System, chsh,etc.) are generally not essential enough to be placed into the rootpartition.

[2]

Programs necessary to arrange for the boot loader to beable to boot a file must be placed in /sbin.Configuration files for boot loaders must be placed in/etc.

The GRUB bootloader reads its configurations file beforebooting, so that must be placed in /boot. However, it is aconfiguration file, so should be in /etc. The answer here is asymbolic link such as /etc/grub/menu.lst -> /boot/menu.lst.

[3]

On some i386 machines, it may be necessary for/boot to be located on a separate partitionlocated completely below cylinder 1024 of the boot device due tohardware constraints.

Certain MIPS systems require a /bootpartition that is a mounted MS-DOS filesystem or whatever otherfilesystem type is accessible for the firmware. This may result inrestrictions with respect to usable filenames within/boot (only for affected systems).

[4]

The setup of command scripts invoked at boot time may resemble SystemV, BSD or other models. Further specification in this area may beadded to a future version of this standard.

[5]

It is recommended that files be stored in subdirectories of/etc rather than directly in/etc.

[6]

Systems that use the shadow password suite will have additionalconfiguration files in /etc(/etc/shadow and others) and programs in/usr/sbin (useradd,usermod, and others).

[7]

On some Linux systems, this may be a symbolic link to/proc/mounts, in which case this exception is notrequired.

[8]

/etc/X11/xdm holds the configuration files forxdm. These are most of the files previouslyfound in /usr/lib/X11/xdm. Some local variabledata for xdm is stored in/var/lib/xdm.

[9]

Different people prefer to place user accounts in a variety of places.This section describes only a suggested placement for user homedirectories; nevertheless we recommend that all FHS-compliantdistributions use this as the default location for homedirectories.

On small systems, each user's directory is typically one of themany subdirectories of /home such as/home/smith, /home/torvalds,/home/operator, etc. On large systems(especially when the /home directories are sharedamongst many hosts using NFS) it is useful to subdivide user homedirectories. Subdivision may be accomplished by using subdirectoriessuch as /home/staff,/home/guests,/home/students, etc.

[10]

If you want to find out a user's home directory, you should use thegetpwent(3) library function rather than relyingon /etc/passwd because user information may bestored remotely using systems such as NIS.

[11]

It is recommended that apart from autosave and lock files programsshould refrain from creating non dot files or directories in a homedirectory without user intervention.

[12]

Shared libraries that are only necessary for binaries in/usr (such as any X Window binaries) must not bein /lib. Only the shared libraries required torun binaries in /bin and/sbin may be here. In particular, the librarylibm.so.* may also be placed in/usr/lib if it is not required by anything in/bin or /sbin.

[13]

The usual placement of this binary is /usr/bin/cpp.

[14]

This is commonly used for 64-bit or 32-bit support onsystems which support multiple binary formats, but require librariesof the same name. In this case, /lib32 and/lib64 might be the library directories, and/lib a symlink to one of them.

[15]

/lib/cpp is still permitted: thisallows the case where /lib and/lib are the same (one is a symboliclink to the other).

[16]

A compliant implementation with two CDROM drives might have/media/cdrom0 and/media/cdrom1 with/media/cdrom a symlink to either of these.

[17]

If the home directory of the root account is notstored on the root partition it will be necessary to make certain itwill default to / if it can not belocated.

We recommend against using the root account for tasks that can beperformed as an unprivileged user, and that it be used solely for systemadministration. For this reason, we recommend that subdirectories formail and other applications not appear in the root account's homedirectory, and that mail for administration roles such as root,postmaster, and webmaster be forwarded to an appropriate user.

[18]

Originally, /sbin binaries were kept in/etc.

[19]

Deciding what things go into"sbin" directories is simple: if a normal (not asystem administrator) user will ever run it directly, then it must beplaced in one of the "bin" directories. Ordinaryusers should not have to place any of the sbindirectories in their path.

For example, files such as chfn which usersonly occasionally use must still be placed in/usr/bin. ping, although itis absolutely necessary for root (network recovery and diagnosis) isoften used by users and must live in /bin forthat reason.

We recommend that users have read and execute permission foreverything in /sbin except, perhaps, certainsetuid and setgid programs. The division between/bin and /sbin was notcreated for security reasons or to prevent users from seeing theoperating system, but to provide a good partition between binariesthat everyone uses and ones that are primarily used for administrationtasks. There is no inherent security advantage in making/sbin off-limits for users.

[20]

This is particularly important as these areas will often contain bothfiles initially installed by the distributor, and those added by theadministrator.

[21]

Examples of such configuration files includeXconfig, XF86Config, orsystem.twmrc)

[22]

Miscellaneousarchitecture-independent application-specific static files andsubdirectories must be placed in /usr/share.

[23]

For example, the perl5 subdirectory forPerl 5 modules and libraries.

[24]

Some executable commands such as makewhatis andsendmail have also been traditionally placed in/usr/lib. makewhatis is aninternal binary and must be placed in a binary directory; users accessonly catman. Newer sendmailbinaries are now placed by default in /usr/sbin.Additionally, systems using a sendmail-compatiblemail transfer agent must provide/usr/sbin/sendmail as a symbolic link to theappropriate executable.

[25]

Host-specific data for the X Window System must not be stored in/usr/lib/X11. Host-specific configuration filessuch as Xconfig orXF86Config must be stored in/etc/X11. This includes configuration data suchas system.twmrc even if it is only made asymbolic link to a more global configuration file (probably in/usr/X11R6/lib/X11).

[26]

The case where /usr/lib and /usr/lib are thesame (one is a symbolic link to the other) these files and theper-application subdirectories will exist.

[27]

Software placed in / or/usr may be overwritten by system upgrades(though we recommend that distributions do not overwrite data in/etc under these circumstances). For thisreason, local software must not be placed outside of/usr/local without good reason.

[28]

/usr/local/man may be deprecated in future FHSreleases, so if all else is equal, making that one a symlink seemssensible.

[29]

Locally installed system administration programs should be placed in/usr/local/sbin.

[30]

Much of this data originally lived in /usr(man, doc) or/usr/lib (dict,terminfo, zoneinfo).

[31]

Obviously, there are no manual pages in /because they are not required at boot time nor are they required inemergencies. Really.

[32]

For example, if /usr/local/manhas no manual pages in section 4 (Devices), then/usr/local/man/man4 may be omitted.

[33]

A major exception to this rule is theUnited Kingdom, which is `GB' in the ISO 3166, but `UK' for most emailaddresses.

[34]

Some such files include:airport, birthtoken, eqnchar, getopt, gprof.callg, gprof.flat, inter.phone, ipfw.samp.filters, ipfw.samp.scripts, keycap.pcvt, mail.help, mail.tildehelp, man.template,map3270, mdoc.template,more.help, na.phone,nslookup.help, operator,scsi_modes, sendmail.hf,style, units.lib,vgrindefs, vgrindefs.db,zipcodes

[35]

Generally, source should not be built within this hierarchy.

[36]

This standard does not currently incorporate the TeX DirectoryStructure (a document that describes the layout TeX files anddirectories), but it may be useful reading. It is located atftp://ctan.tug.org/tex/

[37]

For example, /usr/share/man/man1/ls.1 isformatted into /var/cache/man/cat1/ls.1, and/usr/X11R6/man//man3/XtClass.3x into/var/cache/man/X11R6//cat3/XtClass.3x.

[38]

An important difference between this version of this standard andprevious ones is that applications are now required to use asubdirectory of /var/lib.

[39]

This hierarchy should contain files stored in/var/db in current BSD releases. These includelocate.database andmountdtab, and the kernel symbol database(s).

[40]

Then, anything wishing to use /dev/ttyS0can read the lock file and act accordingly (all locks in/var/lock should be world-readable).

[41]

Note that /var/mail may be a symbolic link toanother directory.

[42]

/var/run should be unwritable for unprivilegedusers (root or users running daemons); it is a major security problemif any user can write in this directory.

[43]

UUCP lock files must be placed in /var/lock. Seethe above section on /var/lock.

[44]

NIS should not be confused with Sun NIS+, which uses a differentdirectory, /var/nis.


你可能感兴趣的:(Linux,system,hierarchy,application,file,structure,documentation)