The file system structure is the most basic level of organization in an operating system. The way an operating system interacts with its users, applications, and security model nearly always depends on how the operating system organizes files on storage devices. Providing a common file system structure ensures users and programs can access and write files. Show File systems break files down into two logical categories:
Shareable files can be accessed locally and by remote hosts; unshareable files are only available locally. Variable files, such as log files, can be changed at any time; static files, such as binaries, do not change without an action from the system administrator. Categorizing files in this manner helps correlate the function of each file with the permissions assigned to the directories which hold them. How the operating system and its users interact with a file determines the directory in which it is placed, whether that directory is mounted with read-only or read/write permissions, and the level of access each user has to that file. The top level of this organization is crucial; access to the underlying directories can be restricted, otherwise security problems could arise if, from the top level down, access rules do not adhere to a rigid structure. 2.1. Overview of Filesystem Hierarchy Standard (FHS)Red Hat Enterprise Linux uses the Filesystem Hierarchy Standard (FHS) file system structure, which defines the names, locations, and permissions for many file types and directories. 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 two most important elements of FHS compliance are:
2.1.1. FHS OrganizationThe directories and files noted here are a small subset of those specified by the FHS document. Refer to the latest FHS documentation for the most complete information at http://www.pathname.com/fhs/.
2.1.1.1. Gathering File System Information The Example 2.1. 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, Example 2.2. 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 In the above examples, the mounted partition The 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 Figure 2.1. GNOME System Monitor File Systems tab 2.1.1.2. The |
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. |
/dev/ttyS0 | Serial port. |
2.1.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 export to remote hosts.
2.1.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.
2.1.1.7. The /mnt/
Directory
The /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 will be mounted in the /media
directory.
The /mnt
directory must not be used by installation programs.
2.1.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, 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.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 2.3, “The /proc Virtual File System”.
2.1.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 are 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
2.1.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.
The default httpd install uses /var/www/html
for served content.
2.1.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 of device information specific to hot plug devices.
2.1.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. The /usr/
directory usually contains 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. This directory is for 32-bit systems.
/usr/lib64
This directory is used for object files and libraries that are not designed to be directly utilized by shell scripts or users. This directory is for 64-bit systems.
/usr/libexec
This directory contains small helper programs called by other programs.
/usr/sbin
This directory stores system administration binaries that do not belong to /sbin/
.
/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.
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.
2.1.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, which includes spool directories and files, logging data, transient and temporary files.
Below are some of the directories found within the /var/
directory depending on what is installed on the system:
/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/
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 may 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/