Chapter 2. File System Structure and Maintenance
- Shareable and unsharable files
- Shareable files can be accessed locally and by remote hosts. Unsharable files are only available locally.
- Variable and static files
- Variable files, such as documents, can be changed at any time. Static files, such as binaries, do not change without an action from the system administrator.
2.1. Overview of Filesystem Hierarchy Standard (FHS)
- Compatibility with other FHS-compliant systems
- The ability to mount a
/usr/
partition as read-only. This is crucial, since/usr/
contains common executables and should not be changed by users. In addition, since/usr/
is mounted as read-only, it should be mountable from the CD-ROM drive or from another machine via a read-only NFS mount.
2.1.1. FHS Organization
Note
2.1.1.1. Gathering File System Information
df
Command
df
command reports the system's disk space usage. Its output looks similar to the following:
Example 2.1. df
Command Output
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
df
shows the partition size in 1 kilobyte blocks and the amount of used and 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:
Example 2.2. df -h
Command Output
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
Note
/dev/shm
represents the system's virtual memory file system.
du
Command
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, see man du
.
Gnome System Monitor
gnome-system-monitor
. Select the File Systems tab to view the system's partitions. The following figure illustrates the File Systems tab.

Figure 2.1. File Systems Tab in GNOME System Monitor
2.1.1.2. The /boot/
Directory
/boot/
directory contains static files required to boot the system, for example, the Linux kernel. These files are essential for the system to boot properly.
Warning
/boot/
directory. Doing so renders the system unbootable.
2.1.1.3. The /dev/
Directory
/dev/
directory contains device nodes that represent the following device types:
- devices attached to the system;
- virtual devices provided by the kernel.
udevd
daemon creates and removes device nodes in /dev/
as needed.
/dev/
directory and subdirectories are defined as either character (providing only a serial stream of input and output, for example, mouse or keyboard) or block (accessible randomly, such as a hard drive or a floppy drive). If GNOME or KDE is installed, some storage devices are automatically detected when connected (such as with USB) or inserted (such as a CD or DVD drive), and a pop-up window displaying the contents appears.
Table 2.1. Examples of Common Files in the /dev
Directory
File | Description |
---|---|
/dev/hda | The master device on the primary IDE channel. |
/dev/hdb | The slave device on the primary IDE channel. |
/dev/tty0 | The first virtual console. |
/dev/tty1 | The second virtual console. |
/dev/sda | The first device on the primary SCSI or SATA channel. |
/dev/lp0 | The first parallel port. |
- Mapped device
- A logical volume in a volume group, for example,
/dev/mapper/VolGroup00-LogVol02
. - Static device
- A traditional storage volume, for example,
/dev/sdbX
, where sdb is a storage device name and X is the partition number./dev/sdbX
can also be/dev/disk/by-id/WWID
, or/dev/disk/by-uuid/UUID
. For more information, see Section 25.7, “Persistent Naming”.
2.1.1.4. The /etc/
Directory
/etc/
directory is reserved for configuration files that are local to the machine. It should not contain any binaries; if there are any binaries, move them to /usr/bin/
or /usr/sbin/
.
/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 export to remote hosts.
2.1.1.5. The /mnt/
Directory
/mnt/
directory is reserved for temporarily mounted file systems, such as NFS file system mounts. For all removable storage media, use the /media/
directory. Automatically detected removable media is mounted in the /media
directory.
Important
/mnt
directory must not be used by installation programs.
2.1.1.6. The /opt/
Directory
/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, for example, /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/
.
2.1.1.7. The /proc/
Directory
/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/
, see Section 2.3, “The /proc Virtual File System”.
2.1.1.8. The /srv/
Directory
/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.
2.1.1.9. The /sys/
Directory
/sys/
directory utilizes the new sysfs
virtual file system specific to the kernel. With the increased support for hot plug hardware devices in the kernel, the /sys/
directory contains information similar to that held by /proc/
, but displays a hierarchical view of device information specific to hot plug devices.
2.1.1.10. The /usr/
Directory
/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
- This directory is used for binaries.
/usr/etc
- This directory is used for system-wide configuration files.
/usr/games
- This directory stores games.
/usr/include
- This directory is used for C header files.
/usr/kerberos
- This directory is used for Kerberos-related binaries and files.
/usr/lib
- This directory is used for object files and libraries that are not designed to be directly utilized by shell scripts or users.As of Red Hat Enterprise Linux 7.0, the
/lib/
directory has been merged with/usr/lib
. Now it also contains libraries needed to execute the binaries in/usr/bin/
and/usr/sbin/
. These shared library images are used to boot the system or execute commands within the root file system. /usr/libexec
- This directory contains small helper programs called by other programs.
/usr/sbin
- As of Red Hat Enterprise Linux 7.0,
/sbin
has been moved to/usr/sbin
. This means that it contains all system administration binaries, including those essential for booting, restoring, recovering, or repairing the system. The binaries in/usr/sbin/
require root privileges to use. /usr/share
- This directory stores files that are not architecture-specific.
/usr/src
- This directory stores source code.
/usr/tmp
linked to/var/tmp
- This directory stores temporary files.
/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
/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/
.
/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.
2.1.1.11. The /var/
Directory
/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, which includes spool directories and files, logging data, transient and temporary files.
/var/
directory:
/var/account/
/var/arpwatch/
/var/cache/
/var/crash/
/var/db/
/var/empty/
/var/ftp/
/var/gdm/
/var/kerberos/
/var/lib/
/var/local/
/var/lock/
/var/log/
/var/mail
linked to/var/spool/mail/
/var/mailman/
/var/named/
/var/nis/
/var/opt/
/var/preserve/
/var/run/
/var/spool/
/var/tmp/
/var/tux/
/var/www/
/var/yp/
Important
/var/run/media/user
directory contains subdirectories used as mount points for removable media such as USB storage media, DVDs, CD-ROMs, and Zip disks. Note that previously, the /media/
directory was used for this purpose.
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/
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.