The FHS document is the authoritative reference to any FHS-compliant
file system, but the standard leaves many areas undefined or
extensible. This section is an overview of the standard and a
description of the parts of the file system not covered by the standard.
Compliance with the standard means many things, but the two most
important are compatibility with other compliant systems and the ability
to mount a /usr/ partition as read-only. This
second point is important because the directory contains common
executables and should not be changed by users. Also, since the
/usr/ directory is mounted as read-only, it can be
mounted from the CD-ROM or from another machine via a read-only NFS
The directories and files noted here are a small subset of those
specified by the FHS document. Refer to the latest FHS document for
the most complete information.
The complete standard is available online at http://www.pathname.com/fhs/.
The /boot/ directory contains static files
required to boot the system, such as the Linux kernel. These files
are essential for the system to boot properly.
Do not remove the /boot/ directory. Doing
so renders the system unbootable.
The /dev/ directory contains file system entries
which represent devices that are attached to the system. These files
are essential for the system to function properly.
The /etc/ directory is reserved for
configuration files that are local to the machine. No binaries are
to be placed in /etc/. Any binaries that were once
located in /etc/ should be placed into
/sbin/ or /bin/.
The X11/ and skel/
directories are subdirectories of the /etc/
The /etc/X11/ directory is for X Window System
configuration files, such as xorg.conf. The
/etc/skel/ directory is for "skeleton" user
files, which are used to populate a home directory when a user is
The /lib/ directory should contain only those
libraries needed to execute the binaries in
/bin/ and /sbin/. These
shared library images are particularly important for booting the
system and executing commands within the root file system.
The /media/ directory contains subdirectories
used as mount points for removeable media, such as 3.5 diskettes,
CD-ROMs, and Zip disks.
The /mnt/ directory is reserved for temporarily
mounted file systems, such as NFS file system mounts. For all
removeable media, use the /media/ directory.
This directory must not be used by installation programs.
The /opt/ directory provides storage for large,
static application software packages.
A package placing files in the /opt/ directory
creates a directory bearing the same name as the package. This
directory, in turn, holds files that otherwise would be scattered
throughout the file system, giving the system administrator an easy
way to determine the role of each file within a particular package.
For example, if sample is the name of a
particular software package located within the
/opt/ directory, then all of its files are
placed in directories inside the /opt/sample/
directory, such as /opt/sample/bin/ for
binaries and /opt/sample/man/ for manual pages.
Large packages that encompass many different sub-packages, each of
which accomplish a particular task, are also located in the
/opt/ directory, giving that large package a
way to organize itself. In this way, our sample
package may have different tools that each go in their own
sub-directories, such as /opt/sample/tool1/ and
/opt/sample/tool2/, each of which can have
their own bin/, man/, and
other similar directories.
The /proc/ directory contains special files
that either extract information from or send information to the
Due to the great variety of data available within
/proc/ and the many ways this directory can be
used to communicate with the kernel, an entire chapter has been
devoted to the subject. For more information, refer to Chapter 5 The proc File System.
The /sbin/ directory stores executables used by
the root user. The executables in /sbin/ are
only used at boot time and perform system recovery operations. Of
this directory, the FHS says:
/sbin contains binaries essential for
booting, restoring, recovering, and/or repairing the system in
addition to the binaries in /bin. Programs
executed after /usr/ is known to be mounted
(when there are no problems) are generally placed into
/usr/sbin. Locally-installed system
administration programs should be placed into
At a minimum, the following programs should be in
init, fsck.*, grub,
ifconfig, mingetty, mkfs.*,
mkswap, reboot, route,
shutdown, swapoff, swapon
The /srv/ directory contains site-specific data
served by your system running Red Hat Enterprise Linux. This directory gives users the
location of data files for a particular service, such as FTP, WWW,
or CVS. Data that only pertains to a specific user should go in the
Please be aware that data files currently located in
/var/ may move to
/srv/ in future releases.
The /sys/ directory utilizes the new
sysfs virtual file system specific to the 2.6
kernel. With the increased support for hot plug hardware devices in
the 2.6 kernel, the /sys/ directory contains
information similarly held in /proc/, but
displays a hierarchical view of specific device information in
regards to hot plug devices.
To see how certain USB and FireWire devices are actually mounted,
refer to the /sbin/hotplug and
/sbin/udev man pages.
The /usr/ directory is for files that can be
shared across multiple machines. The /usr/
directory is often on its own partition and is mounted read-only.
At a minimum, the following directories should be subdirectories of
|- tmp -> ../var/tmp/
Under the /usr/ directory, the
bin/ subdirectory contains executables,
etc/ contains system-wide configuration
files, games is for games,
include/ contains C header files,
kerberos/ contains binaries and other
Kerberos-related files, and lib/ contains
object files and libraries that are not designed to be directly
utilized by users or shell scripts. The
libexec/ directory contains small helper
programs called by other programs, sbin/ is for
system administration binaries (those that do not belong in the
/sbin/ directory), share/
contains files that are not architecture-specific,
src/ is for source code, and
X11R6/ is for the X Window System (XFree86 on
Red Hat Enterprise Linux).
The FHS says:
The /usr/local hierarchy is for use by the
system administrator when installing software locally. It needs
to be safe from being overwritten when the system software is
updated. It may be used for programs and data that are
shareable among a group of hosts, but not found in
The /usr/local/ directory is similar in
structure to the /usr/ directory. It has the
following subdirectories, which are similar in purpose to those in
the /usr/ directory:
In Red Hat Enterprise Linux, the intended use for the /usr/local/
directory is slightly different from that specified by the FHS. The
FHS says that /usr/local/ should be where
software that is to remain safe from system software upgrades is
stored. Since software upgrades can be performed safely with
RPM Package Manager
(RPM), it is not necessary to protect files by
putting them in /usr/local/. Instead, the
/usr/local/ directory is used for software that
is local to the machine.
For instance, if the /usr/ directory is mounted
as a read-only NFS share from a remote host, it is still possible to
install a package or program under the
Since the FHS requires Linux to mount /usr/ as
read-only, any programs that write log files or need
spool/ or lock/
directories should write them to the /var/
directory. The FHS states /var/ is for:
...variable data files. This includes spool directories
and files, administrative and logging data, and transient and
Below are some of the directories found within the
|- mail -> spool/mail/
System log files, such as messages/ and
lastlog/, go in the
/var/log/ directory. The
/var/lib/rpm/ directory contains RPM system
databases. Lock files go in the /var/lock/
directory, usually in directories for the program using the file.
The /var/spool/ directory has subdirectories
for programs in which data files are stored.