5.2. Overview of File System Hierarchy Standard (FHS)
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.
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 at
https://www.pathname.com/fhs/.
5.2.1.1. Gathering File System Information
The df
command reports the system's disk space usage. Its output looks similar to the following:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
11675568 6272120 4810348 57% / /dev/sda1
100691 9281 86211 10% /boot
none 322856 0 322856 0% /dev/shm
By default, df
shows the partition size in 1 kilobyte blocks and the amount of used/available disk space in kilobytes. To view the information in megabytes and gigabytes, use the command df -h
. The -h
argument stands for "human-readable" format. The output for df -h
looks similar to the following:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
12G 6.0G 4.6G 57% / /dev/sda1
99M 9.1M 85M 10% /boot
none 316M 0 316M 0% /dev/shm
The mounted partition /dev/shm
represents the system's virtual memory file system.
The du
command displays the estimated amount of space being used by files in a directory, displaying the disk usage of each subdirectory. The last line in the output of du
shows the total disk usage of the directory; to see only the total disk usage of a directory in human-readable format, use du -hs
. For more options, refer to man du
.
To view the system's partitions and disk space usage in a graphical format, use the Gnome System Monitor by clicking on > > or using the command gnome-system-monitor
. Select the File Systems tab to view the system's partitions. The figure below illustrates the File Systems tab.
5.2.1.2. The /boot/
Directory
The /boot/
directory contains static files required to boot the system, e.g. 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.
5.2.1.3. The /dev/
Directory
The /dev/
directory contains device nodes that represent the following device types:
These device nodes are essential for the system to function properly. The udevd
daemon creates and removes device nodes in /dev/
as needed.
Devices in the /dev/
directory and subdirectories are either character (providing only a serial stream of input/output, e.g. mouse or keyboard) or block (accessible randomly, e.g. hard drive, floppy drive). If you have GNOME or KDE installed, some storage devices are automatically detected when connected (e.g via USB) or inserted (e.g via CD or DVD drive), and a popup window displaying the contents appears.
Table 5.1. Examples of common files in the /dev
File |
Description |
/dev/hda |
The master device on primary IDE channel. |
/dev/hdb |
The slave device on primary IDE channel. |
/dev/tty0 |
The first virtual console. |
/dev/tty1 |
The second virtual console. |
/dev/sda |
The first device on primary SCSI or SATA channel. |
/dev/lp0 |
The first parallel port. |
5.2.1.4. The /etc/
Directory
The /etc/
directory is reserved for configuration files that are local to the machine. It should contain no binaries; any binaries should be moved to /bin/
or /sbin/
.
For example, the /etc/skel/
directory stores "skeleton" user files, which are used to populate a home directory when a user is first created. Applications also store their configuration files in this directory and may reference them when executed. The /etc/exports
file controls which file systems to export to remote hosts.
5.2.1.5. The /lib/
Directory
The /lib/
directory should only contain libraries needed to execute the binaries in /bin/
and /sbin/
. These shared library images are used to boot the system or execute commands within the root file system.
5.2.1.7. The /mnt/
Directory
The /mnt/
directory is reserved for temporarily mounted file systems, such as NFS file system mounts. For all removeable storage media, use the /media/
directory. Automatically detected removeable media will be mounted in the /media
directory.
The /mnt
directory must not be used by installation programs.
5.2.1.8. The /opt/
Directory
The /opt/
directory is normally reserved for software and add-on packages that are not part of the default installation. A package that installs to /opt/
creates a directory bearing its name, e.g. /opt/packagename
/
. In most cases, such packages follow a predictable subdirectory structure; most store their binaries in /opt/packagename
/bin/
and their man
pages in /opt/packagename
/man/
, and so on.
5.2.1.9. The /proc/
Directory
The
/proc/
directory contains special files that either extract information from the kernel or send information to it. Examples of such information include system memory, cpu information, and hardware configuration. For more information about
/proc/
, refer to
Section 5.4, “The /proc Virtual File System”.
5.2.1.10. The /sbin/
Directory
The /sbin/
directory stores binaries essential for booting, restoring, recovering, or repairing the system. The binaries in /sbin/
require root privileges to use. In addition, /sbin/
contains binaries used by the system before the /usr/
directory is mounted; any system utilities used after /usr/
is mounted is typically placed in /usr/sbin/
.
At a minimum, the following programs should be stored in /sbin/
:
-
arp
-
clock
-
halt
-
init
-
fsck.*
-
grub
-
ifconfig
-
mingetty
-
mkfs.*
-
mkswap
-
reboot
-
route
-
shutdown
-
swapoff
-
swapon
5.2.1.11. The /srv/
Directory
The /srv/
directory contains site-specific data served by a Red Hat Enterprise Linux system. 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.
5.2.1.12. The /sys/
Directory
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 similar to that held by /proc/
, but displays a hierarchical view device information specific to hot plug devices.
5.2.1.13. The /usr/
Directory
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, /usr/
should contain the following subdirectories:
-
/usr/bin
, used for binaries
-
/usr/etc
, used for system-wide configuration files
-
/usr/games
-
/usr/include
, used for C header files
-
/usr/kerberos
, used for Kerberos-related binaries and files
-
/usr/lib
, used for object files and libraries that are not designed to be directly utilized by shell scripts or users
-
/usr/libexec
, contains small helper programs called by other programs
-
/usr/sbin
, stores system administration binaries that do not belong to /sbin/
-
/usr/share
, stores files that are not architecture-specific
-
/usr/src
, stores source code
-
/usr/tmp
-> /var/tmp
The /usr/
directory should also contain a /local/
subdirectory. As per the FHS, this subdirectory is used by the system administrator when installing software locally, and should be safe from being overwritten during system updates. The /usr/local
directory has a structure similar to /usr/
, and contains the following subdirectories:
-
/usr/local/bin
-
/usr/local/etc
-
/usr/local/games
-
/usr/local/include
-
/usr/local/lib
-
/usr/local/libexec
-
/usr/local/sbin
-
/usr/local/share
-
/usr/local/src
Red Hat Enterprise Linux's usage of /usr/local/
differs slightly from the FHS. The FHS states that /usr/local/
should be used to store software that should remain safe from system software upgrades. Since the RPM Package Manager can perform software upgrades safely, it is not necessary to protect files by storing them in /usr/local/
.
Instead, Red Hat Enterprise Linux uses /usr/local/
for software 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.
5.2.1.14. The /var/
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, which include spool directories/files, logging data, transient/temporary files, and the like.
Below are some of the directories found within the /var/
directory:
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 that store data files for some programs. These subdirectories include:
-
/var/spool/at/
-
/var/spool/clientmqueue/
-
/var/spool/cron/
-
/var/spool/cups/
-
/var/spool/exim/
-
/var/spool/lpd/
-
/var/spool/mail/
-
/var/spool/mailman/
-
/var/spool/mqueue/
-
/var/spool/news/
-
/var/spool/postfix/
-
/var/spool/repackage/
-
/var/spool/rwho/
-
/var/spool/samba/
-
/var/spool/squid/
-
/var/spool/squirrelmail/
-
/var/spool/up2date/
-
/var/spool/uucp
-
/var/spool/uucppublic/
-
/var/spool/vbox/