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 mount.
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 https://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
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
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 first created.
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/
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
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
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
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 /usr/local/sbin.
At a minimum, the following programs should be in /sbin/:
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 /home/ directory.
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 /usr/:
|- 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 /usr.
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 /usr/local/ directory.
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 temporary
Below are some of the directories found within the /var/ directory:
|- 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.