- Chapter 2. File System Structure and Maintenance
- 2.1. Overview of Filesystem Hierarchy Standard (FHS)
- 2.1.1. FHS Organization
- 2.1.1.1. Gathering File System Information
- 2.1.1.2. The /boot/ Directory
- 2.1.1.3. The /dev/ Directory
- 2.1.1.4. The /etc/ Directory
- 2.1.1.5. The /lib/ Directory
- 2.1.1.6. The /media/ Directory
- 2.1.1.7. The /mnt/ Directory
- 2.1.1.8. The /opt/ Directory
- 2.1.1.9. The /proc/ Directory
- 2.1.1.10. The /sbin/ Directory
Chapter 2. File System Structure and Maintenance
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.
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 ability to mount a /usr/ partition as read-only. This is especially 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
The 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
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
By default, 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
In the above examples, 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 Applications → System Tools → System Monitor 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.
Figure 2.1. GNOME System Monitor File Systems tab
2.1.1.2. The /boot/ Directory
The /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.
2.1.1.3. The /dev/ Directory
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 defined as either character (providing only a serial stream of input and output, for example, mouse or keyboard) or block (accessible randomly, for example, a hard drive or a floppy drive). If GNOME or KDE is installed, some storage devices are automatically detected when connected (such as with a 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. |
/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.6. The /media/ Directory
The /media/ directory contains subdirectories used as mount points for removable media, such as USB storage media, DVDs, and CD-ROMs.
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.
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/ .