Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 2 章 文件系统结构和维护

文件系统结构是操作系统中最基本的组织级别。操作系统与其用户、应用程序和安全模型交互的方式几乎始终取决于操作系统如何在存储设备上组织文件。提供通用文件系统结构可确保用户和程序能够访问和写文件。
文件系统将文件划分为两个逻辑类别:
可共享和不可取的文件
可以在本地和远程主机访问 可共享 文件。Unsharable 文件仅在本地可用。
变量和静态文件
变量文件 (如文档)可以随时更改。静态文件 (如二进制文件)不会在没有系统管理员的操作的情况下改变。
以这种方式分类文件有助于将每个文件的功能与分配给保存它们的目录的权限相关联。操作系统及其用户与文件交互的方式决定了放置文件的目录、该目录是以只读还是读写权限挂载的,以及每个用户对该文件的访问级别。该组织的最高层至关重要;对底层目录的访问可能会受到限制,否则,如果从最高层向下的访问规则不遵循严格的结构,就会出现安全问题。

2.1. 文件系统层次结构标准(FHS)概述.

Red Hat Enterprise Linux 使用 文件系统层次结构标准 (FHS)文件系统结构,它定义了许多文件类型和目录的名称、位置和权限。
FHS 文档是任何符合 FHS 的文件系统的权威参考,,但该标准留下了许多未定义或可扩展的领域。本节概述了该标准,并描述了该标准未涵盖的文件系统部分。
FHS 合规的两个最重要的元素是:
  • 与其他符合 FHS 的系统兼容
  • 能够以只读形式挂载 /usr/ 分区。这很重要,因为 /usr/ 包含常见的可执行文件,用户不应更改。此外,由于 /usr/ 以只读形式挂载,它应该可以从 CD-ROM 驱动器或通过只读 NFS 挂载从另一台机器挂载。

2.1.1. FHS 组织

此处记下的目录和文件是 FHS 文档指定的目录和文件的一个子集。有关最完整的信息,请查看最新的 FHS 文档 http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf; file-hierarchy(7) man page 还提供了概述。
注意
可用的目录取决于任意给定系统上安装的内容。以下列表只能是可以找到的内容的示例。

2.1.1.1. 收集文件系统信息

df 命令
df 命令报告系统的磁盘空间使用情况。其输出类似如下:

例 2.1. df 命令输出

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 以 1 KB 块为单位显示分区大小,以及以 KB 为单位的已用和可用磁盘空间。要以 MB 和 GB 为单位查看信息,请使用命令 df -hh 参数代表"人类可读的"格式。df -h 的输出类似如下:

例 2.2. df -h 命令输出

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
注意
在给定示例中,挂载的分区 /dev/shm 代表系统的虚拟内存文件系统。
DU 命令
du 命令显示目录中文件使用的总空间量,显示每个子目录的磁盘使用情况。du 输出中的最后一行显示目录的总磁盘使用情况。要仅查看目录的总磁盘使用情况(以人类可读的格式),请使用 du -hs。有关更多选项,请参阅 man du
GNOME 系统监控器
要以图形格式查看系统的分区和磁盘空间使用情况,请点击 ApplicationsTools System Monitor 或使用 gnome-system-monitor 命令,使用 Gnome System Monitor。选择 File Systems 选项卡来查看系统的分区。下图展示了 File Systems 选项卡。

图 2.1. GNOME 系统监控器中的文件系统选项卡

GNOME 系统监控器中的文件系统选项卡

2.1.1.2. /boot/ 目录

/boot/ 目录包含引导系统所需的静态文件,例如 Linux 内核。这些文件对于系统正常启动至关重要。
警告
不要删除 /boot/ 目录。这样做会使系统无法启动。

2.1.1.3. /dev/ 目录

/dev/ 目录包含代表以下设备类型的设备节点:
  • 连接到系统的设备;
  • 内核提供的虚拟设备.
这些设备节点对于系统正常工作至关重要。udevd 守护进程根据需要在 /dev/ 中创建和删除设备节点。
/dev/ 目录和子目录中的设备定义为 字符 (仅提供输入和输出的串行流,如鼠标或键盘)或 (随机访问,如硬盘驱动器或软盘驱动器)。如果安装了 GNOME 或 KDE,则连接(如使用 USB)或插入(如 CD 或者 DVD 驱动器)时会自动检测一些存储设备,并显示其内容的弹出窗口。

表 2.1. /dev 目录中通用文件的示例

File 描述
/dev/hda 主 IDE 通道上的主设备。
/dev/hdb 主 IDE 通道上的从设备.
/dev/tty0 第一个虚拟控制台.
/dev/tty1 第二个虚拟控制台.
/dev/sda 主 SCSI 或 SATA 通道中的第一个设备。
/dev/lp0 第一个并行端口。
有效的块设备可以是两种类型的条目之一:
映射设备
卷组中的逻辑卷,例如 /dev/mapper/VolGroup00-LogVol02
静态设备
传统存储卷,例如 /dev/sdbX,其中 sdb 是存储设备名称,X 是分区号。/dev/sdbX 也可以是 /dev/disk/by-id/WWID,或 /dev/disk/by-uuid/UUID。如需更多信息,请参阅 第 25.8 节 “持久性命名”

2.1.1.4. /etc/ 目录

/etc/ 目录保留机器本地的配置文件。它不应包含任何二进制文件;如果存在二进制文件,请将其移到 /usr/bin//usr/sbin/
例如,/etc/skel/ 目录存储"框架"用户文件,这些文件用于在首次创建用户时填充主目录。应用也将其配置文件存储在此目录中,并且在执行时可能会引用这些文件。/etc/exports 文件控制哪些文件系统导出到远程主机。

2.1.1.5. /mnt/ 目录

为临时挂载的文件系统保留 /mnt/ 目录,如 NFS 文件系统挂载。对于所有可移动存储介质,请使用 /media/ 目录。自动检测到的可移动介质挂载在 /media 目录中。
重要
安装程序不能使用 /mnt 目录。

2.1.1.6. /opt/ 目录

/opt/ 目录通常为不属于默认安装的软件和附加软件包保留。安装到 /opt/ 的软件包会创建一个目录,例如,/opt/packagename/。在大多数情况下,此类软件包遵循可预测的子目录结构;大多数软件包将其二进制文件存储在 /opt/packagename/bin/ 中,其 man page 存储在 /opt/packagename/man/ 中。

2.1.1.7. /proc/ 目录

/proc/ 目录包含从内核中提取信息或向其发送信息的特殊文件。此类信息的示例包括系统内存、CPU 信息和硬件配置。有关 /proc/ 的详情,请参考 第 2.3 节 “/proc 虚拟文件系统”

2.1.1.8. /srv/ 目录

/srv/ 目录包含 Red Hat Enterprise Linux 系统提供的特定于站点的数据。此目录为用户提供特定服务(如 FTP、WWW 或 CVS)的数据文件的位置。仅与特定用户相关的数据应位于 /home/ 目录中。

2.1.1.9. /sys/ 目录

/sys/ 目录利用特定于内核的新 sysfs 虚拟文件系统。随着对内核中热插硬件设备的支持,/sys/ 目录包含与 /proc/ 持有的信息相似,但显示特定于热插拔设备的设备信息的层次结构视图。

2.1.1.10. /usr/ 目录

/usr/ 目录用于可在多台机器之间共享的文件。/usr/ 目录通常位于其自己的分区上,并以只读形式挂载。至少,/usr/ 应该包含以下子目录:
/usr/bin
此目录用于二进制文件。
/usr/etc
此目录用于系统范围的配置文件。
/usr/games
此目录存储游戏。
/usr/include
此目录用于 C 头文件。
/usr/kerberos
此目录用于与 Kerberos 相关的二进制文件和文件。
/usr/lib
此目录用于设计不是由 shell 脚本或用户直接使用的对象文件和库。
从 Red Hat Enterprise Linux 7.0 开始,/lib/ 目录已与 /usr/lib 合并。现在,它还包含在 /usr/bin/ 和 /usr/ sbin/ 中执行二进制文件所需的库。这些共享库镜像用于引导系统或执行根文件系统中的命令。
/usr/libexec
此目录包含其他程序调用的小型帮助程序。
/usr/sbin
从 Red Hat Enterprise Linux 7.0 开始,/sbin 已移到 /usr/sbin 中。这意味着它包含所有系统管理二进制文件,包括启动、恢复、恢复或修复系统所必需的。/usr/sbin/ 中的二进制文件需要 root 特权才能使用。
/usr/share
此目录存储不特定于架构的文件。
/usr/src
此目录存储源代码。
/usr/tmp 链接到 /var/tmp
此目录存储临时文件。
/usr/ 目录还应包含 /local/ 子目录。根据 FHS,系统管理员在本地安装软件时会使用这个子目录,在系统更新时应该不会被覆盖。/usr/local 目录的结构与 /usr/ 类似,包含以下子目录:
  • /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 对 /usr/local/ 的使用与 FHS 稍有不同。FHS 指出 /usr/local/ 应该用于存储系统软件升级安全的软件。由于 RPM Package Manager 可以安全地执行软件升级,因此不需要通过将文件存储在 /usr/local/ 中来保护文件。
相反,Red Hat Enterprise Linux 将 /usr/local/ 用于机器本地的软件。例如,如果 /usr/ 目录作为只读 NFS 共享从远程主机挂载,那么仍然可以将软件包或程序安装到 /usr/local/ 目录下。

2.1.1.11. /var/ 目录

由于 FHS 要求 Linux 将 /usr/ 挂载为只读,因此任何写入日志文件或需要 spool/lock/ 目录的程序都应将它们写入 /var/ 目录。FHS 指出 /var/ 用于变量数据,其中包括 spool 目录和文件、日志记录数据、临时和临时文件。
以下是在 /var/ 目录中找到的一些目录:
  • /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/spool/mail//var/mail
  • /var/mailman/
  • /var/named/
  • /var/nis/
  • /var/opt/
  • /var/preserve/
  • /var/run/
  • /var/spool/
  • /var/tmp/
  • /var/tux/
  • /var/www/
  • /var/yp/
重要
/var/run/media/user 目录包含用作可移动介质挂载点的子目录,如 USB 存储介质、DVD、CD-ROM 和 Zip 磁盘。请注意,/media/ 目录用于此目的。
系统日志文件(如 messageslastlog )位于 /var/log/ 目录中。/var/lib/rpm/ 目录包含 RPM 系统数据库。锁定文件位于 /var/lock/ 目录中,通常位于使用该文件的程序的目录中。/var/spool/ 目录有存储某些程序数据文件的子目录。这些子目录包括:
  • /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/