Posted on ::

翻译自 MiniMax,点此查看文章源

Filesystem Hierarchy Standard (FHS) 3.0

版本 3.0
发布日期:2015 年 3 月 19 日
LSB 工作组, Linux 基金会


目录

  1. 引言 (Introduction)
  2. 文件系统 (The Filesystem)
  3. 根文件系统 (The Root Filesystem)
  4. /usr 层次结构 (The /usr Hierarchy)
  5. /var 层次结构 (The /var Hierarchy)
  6. 操作系统特定附录 (Operating System Specific Annex)
  7. 附录 (Appendix)

摘要 (Abstract)

本标准包含了一系列针对类UNIX操作系统文件和目录放置的要求和指南。这些指南旨在支持应用程序、系统管理工具、开发工具和脚本的互操作性,以及提高这些系统的文档一致性。


致谢 (Dedication)

本版本谨以此纪念克里斯托弗·杨(Christopher Yeoh),他既是我们的老朋友和同事,也是 FHS 的创始编辑之一。若非他的倾力付出,这项工作便无法完成。


1. Introduction

1.1 目的 (Purpose)

本标准使以下成为可能:

  • 软件能够预测已安装文件和目录的位置
  • 用户能够预测已安装文件和目录的位置

我们通过以下方式实现这一目标:

  • 为文件系统的每个区域指定指导原则
  • 指定所需的最小文件和目录
  • 列举原则的例外情况
  • 列举存在历史冲突的具体案例

FHS 文档的使用者:

  • 独立软件供应商创建符合 FHS 的应用程序
  • 操作系统创建者提供符合 FHS 的系统
  • 用户理解和维护系统的 FHS 合规性

FHS 文档的作用域有限:

  • 本地文件的本地放置是本地问题,FHS 不试图取代系统管理员
  • FHS 处理需要多方协调的问题,如本地站点、发行版、应用程序、文档等

1.2 约定 (Conventions)

建议阅读排版版本而非纯文本版本。在排版版本中,文件和目录名称以等宽字体显示。

文件名约定:

  • 可变部分用 <> 包围,如:<thus>
  • 电子邮件地址也用 <> 包围
  • 可选组件用 [] 包围,如:[.<extension>]
  • 目录名和文件名的可变子串用 * 表示

注意:标记为 "Rationale" 的部分是解释性的,属于非规范性内容。


2. The Filesystem

本标准假定支持 FHS 合规文件系统的操作系统具有大多数 UNIX 文件系统中发现的基本安全功能。

可以定义两个独立的文件区分:可共享 vs 不可共享可变 vs 静态。一般来说,在这些方面不同的文件应位于不同的目录中,这样可以更容易地将具有不同使用特性的文件存储在不同的文件系统上。

特性说明
可共享 (Shareable)可以存储在一台主机上并在其他主机上使用的文件。例如用户主目录中的文件
不可共享 (Unshareable)不可共享的文件。例如设备锁文件
静态 (Static)包括二进制文件、库、文档文件和其他不需要系统管理员干预就不会更改的文件
可变 (Variable)非静态的文件

rationale 理由

  • 可共享文件可以存储在一台主机上供多台主机使用。通常,文件系统层次结构中并非所有文件都是可共享的,因此每个系统都有本地存储,至少包含其不可共享的文件。方便的是,外国主机上存储的所有文件可以通过从外国主机挂载一个或几个目录来获取。
  • 静态和可变文件应分开存放,因为静态文件(与可变文件不同)可以存储在只读媒体上,不需要按照与可变文件相同的计划备份。
  • 历史上,类 UNIX 文件系统层次结构在 /usr/etc 下都包含静态和可变文件。为了实现上述优势,创建了 /var 层次结构,所有可变文件都从 /usr 转移到 /var。因此 /usr 现在可以只读挂载(如果它是单独的文件系统)。可变文件从 /etc/var 的转移随着技术的允许而逐步完成。

FHS 合规系统示例

              shareable        unshareable
static       /usr             /etc
              /opt             /boot
variable     /var/mail        /var/run
              /var/spool/news  /var/lock

3. The Root Filesystem

3.1 目的 (Purpose)

根文件系统内容必须足以引导、恢复、修复和/或修复系统。

  • 引导系统:足够的软件和数据必须存在于根分区上以挂载其他文件系统。这包括工具、配置、引导加载程序信息和其他重要的启动数据。/usr/opt/var 可以位于其他分区或文件系统上。
  • 恢复和/或修复系统:有经验的维护人员诊断和重建受损系统所需的工具必须存在于根文件系统上。
  • 恢复系统:从系统备份(如软盘、磁带等)恢复所需的工具必须存在于根文件系统上。

3.2 要求 (Requirements)

根文件系统的最小要求应尽可能小,但不小。保持根文件系统较小的原因:

  • 偶尔从非常小的媒体挂载
  • 根文件系统包含许多特定于系统的配置文件(如特定内核、特定主机名等),这意味着根文件系统并不总是在网络系统之间可共享。在网络系统服务器上保持较小可以最小化不可共享文件区域的空间损失。这也允许具有较小本地硬盘的工作站。

3.3 特定选项 (Specific Options)


3.4 /bin : 供所有用户使用的必需用户命令二进制文件

路径: /bin
描述: Essential user command binaries (for use by all users)

3.4.1 目的 (Purpose)

包含必需的命令二进制文件,这些文件在单用户模式下也需要可供用户使用。

3.4.2 要求 (Requirements)

以下文件或目录必须存在于 /bin 中:

类型路径说明
[RP]/bin/cat检索文件内容
[RP]/bin/chmod改变文件模式
[RP]/bin/chown改变文件所有者和组
[RP]/bin/date打印或设置系统日期和时间
[RP]/bin/dd转换和复制文件
[RP]/bin/df报告文件系统磁盘空间使用情况
[RP]/bin/echo显示一行文本
[RP]/bin/false不执行任何操作,总是返回失败
[RP]/bin/kill发送信号到进程
[RP]/bin/ls列出目录内容
[RP]/bin/mkdir创建目录
[RP]/bin/mknod创建设备节点
[RP]/bin/more分页浏览文本
[RP]/bin/mount挂载文件系统
[RP]/bin/mv移动/重命名文件
[RP]/bin/pwd打印当前工作目录名称
[RP]/bin/readlink显示符号链接的值
[RP]/bin/rm删除文件或目录
[RP]/bin/rmdir删除空目录
[RP]/bin/sed流编辑器
[RP]/bin/sh命令解释器(Bourne shell)
[RP]/bin/stty设置或打印终端行设置
[RP]/bin/sync刷新文件系统缓冲区
[RP]/bin/test比较值或检查文件类型
[RP]/bin/true不执行任何操作,总是返回成功
[RP]/bin/uname打印系统信息

[RP] = Required File (必需文件), [CP] = Conditional File (条件文件)

3.4.3 特定选项 (Specific Options)

如果存在以下命令,必须位于指定位置:

路径说明
/bin/eded 行编辑器
/bin/cshC shell (仅当 /bin/sh 不是符合 POSIX 的 shell 时必需)

3.5 /boot : 引导加载程序的静态文件

路径: /boot
描述: Static files of the boot loader

3.5.1 目的 (Purpose)

包含引导加载程序所需的静态文件。这包括引导加载程序、副本和备用内核。

3.5.2 特定选项 (Specific Options)

  • /boot/config-<kernel-version> - 内核配置信息
  • /boot/System.map-<kernel-version> - 内核符号表

3.6 /dev : 设备文件

路径: /dev
描述: Device files

3.6.1 目的 (Purpose)

包含设备节点。

3.6.2 特定选项 (Specific Options)

  • /dev/null - 黑洞设备
  • /dev/zero - 零字节源设备

3.7 /etc : 主机特定的系统配置

路径: /etc
描述: Host-specific system configuration

3.7.1 目的 (Purpose)

包含只读的主机配置文件。这意味着 /etc 下的目录结构可以在不同主机之间共享,但文件不行。

3.7.2 要求 (Requirements)

以下目录或文件必须存在于 /etc 中:

路径说明
/etc/X11X Window System 配置 (可选)
/etc/opt/opt 的配置文件
/etc/sgmlSGML 配置 (可选)
/etc/xmlXML 配置 (可选)

必须存在的配置文件:

文件说明
/etc/group用户组列表
/etc/inittabinit 的默认运行级别
/etc/issue登录前显示的问题
/etc/ld.so.conf搜索路径配置
/etc/motd登录后的消息
/etc/mtab当前挂载的文件系统
/etc/passwd用户密码数据库
/etc/profile系统范围的默认环境
/etc/shadow阴影密码文件
/etc/hosts网络配置信息
/etc/networks网络名称
/etc/protocols协议定义
/etc/services服务名称和端口号映射

3.7.3 特定选项 (Specific Options)

可选配置文件:

文件说明
/etc/csh.loginC shell 登录脚本
/etc/host.conf主机名解析配置
/etc/hosts.allowTCP wrapper 允许规则
/etc/hosts.denyTCP wrapper 拒绝规则
/etc/hosts.equiv受信任主机列表
/etc/ld.so.cache共享库缓存
/etc/login.defslogin 命令配置
/etc/printcap打印机功能
/etc/resolv.confDNS 解析配置
/etc/rpcRPC 协议定义
/etc/securetty允许 root 登录的 TTY
/etc/shells有效 shell 列表
/etc/syslog.confsyslogd 配置

3.7.4 /etc/opt : /opt 的配置文件

/etc/opt 下的结构应镜像 /opt 下软件包的结构。

3.7.5 /etc/X11 : X Window System 配置 (可选)

X Window System 的配置文件:

文件说明
XconfigX 服务器配置
XF86ConfigXFree86 配置
Xmodmap键盘映射

3.7.6 /etc/sgml : SGML 配置 (可选)

SGML 配置文件位置。

3.7.7 /etc/xml : XML 配置 (可选)

XML 配置文件位置。


3.8 /home : 用户主目录 (可选)

路径: /home
描述: User home directories (optional)

3.8.1 目的 (Purpose)

用户主目录的层次结构。通常,/home 是可共享和可变的。

3.8.2 要求 (Requirements)

  • 目录名应为 /home/<username>
  • 符合 POSIX 的系统应支持包含用户主目录的 ~ 功能

3.8.3 主目录规范和约定

用户主目录应具有以下特征:

  • 主目录所有权归属于用户
  • 组成员具有读/执行权限
  • 其他用户具有读/执行权限(无写权限)

3.9 /lib : 必需共享库和内核模块

路径: /lib
描述: Essential shared libraries and kernel modules

3.9.1 目的 (Purpose)

包含 /bin/sbin 中程序所需的共享库。

3.9.2 要求 (Requirements)

必须存在:

路径说明
/lib/libc.so.*C 库
/lib/ld*动态链接器/加载器

3.9.3 特定选项 (Specific Options)

  • /lib/modules - 内核模块目录
  • /lib/libcurses.so.* - curses 库(如果存在)

3.10 /lib : 替代格式的必需共享库 (可选)

路径: /lib<qual>
描述: Alternate format essential shared libraries (optional)

3.10.1 目的 (Purpose)

支持多架构的系统上,替代格式的共享库存放位置。

3.10.2 要求 (Requirements)

  • /lib32/lib64 是常见变体
  • 如果存在,与 /lib 内容相同

3.11 /media : 可移动介质的挂载点

路径: /media
描述: Mount point for removable media

3.11.1 目的 (Purpose)

用于挂载可移动介质的目录。

3.11.2 特定选项 (Specific Options)

目录说明
/media/cdromCD-ROM 挂载点
/media/floppy软盘挂载点
/media/zipZip 磁盘挂载点

3.12 /mnt : 临时挂载文件系统的挂载点

路径: /mnt
描述: Mount point for a temporarily mounted filesystem

3.12.1 目的 (Purpose)

系统管理员临时挂载文件系统的目录。


3.13 /opt : 附加应用软件包

路径: /opt
描述: Add-on application software packages

3.13.1 目的 (Purpose)

用于安装静态附加软件包的目录。

3.13.2 要求 (Requirements)

目录结构:

/opt/<package>/bin     # 可执行文件
/opt/<package>/lib     # 库文件
/opt/<package>/man     # 手册页
/opt/<package>/share   # 共享数据

3.14 /root : root 用户的主目录 (可选)

路径: /root
描述: Home directory for the root user (optional)

3.14.1 目的 (Purpose)

root 用户的主目录。


3.15 /run : 运行时可变数据

路径: /run
描述: Run-time variable data

3.15.1 目的 (Purpose)

包含可变数据的目录,这些数据从系统启动开始就存在。系统关闭后,该目录应该为空。

3.15.2 要求 (Requirements)

  • /run/lock - 锁文件目录
  • /run/log - 日志目录

3.16 /sbin : 系统二进制文件

路径: /sbin
描述: System binaries

3.16.1 目的 (Purpose)

包含系统管理所需的二进制文件。

3.16.2 要求 (Requirements)

路径说明
/sbin/activate激活交换文件
/sbin/ifconfig配置网络接口
/sbin/init系统初始化
/sbin/modprobe模块加载器
/sbin/reboot重新启动系统
/sbin/route路由表管理
/sbin/shutdown关闭系统

3.16.3 特定选项 (Specific Options)

  • /sbin/ctrlaltdel - Ctrl+Alt+Del 处理
  • /sbin/kexec - 内核执行

3.17 /srv : 系统提供的服务数据

路径: /srv
描述: Data for services provided by this system

3.17.1 目的 (Purpose)

包含由本系统提供的服务的数据。


3.18 /tmp : 临时文件

路径: /tmp
描述: Temporary files

3.18.1 目的 (Purpose)

临时文件目录。系统重启后可以删除。


4. The /usr Hierarchy

4.1 目的 (Purpose)

/usr 层次结构是第二级数据层次结构,仅包含可共享的、只读的数据。

4.2 要求 (Requirements)

  • /usr 应该是可共享的
  • /usr 应该是只读的
  • 任何程序或脚本都不应将本地数据写入 /usr

4.3 特定选项 (Specific Options)


4.4 /usr/bin : 大多数用户命令

路径: /usr/bin
描述: Most user commands

4.4.1 目的 (Purpose)

包含大多数用户可执行命令。

4.4.2 要求 (Requirements)

/bin 中的所有命令(除了特定于系统的)都应在 /usr/bin 中有对应的链接或副本。

4.4.3 特定选项 (Specific Options)

  • /usr/bin/X11 - X11 二进制文件(可选)

4.5 /usr/include : 标准头文件目录

路径: /usr/include
描述: Directory for standard include files

4.5.1 目的 (Purpose)

包含 C 编程语言的头文件。

4.5.2 特定选项 (Specific Options)

  • /usr/include/gtk-* - GTK+ 头文件

4.6 /usr/lib : 编程和包用库

路径: /usr/lib
描述: Libraries for programming and packages

4.6.1 目的 (Purpose)

包含目标文件和库。

4.6.2 特定选项 (Specific Options)

  • /usr/lib32 - 32位库
  • /usr/lib64 - 64位库

4.7 /usr/libexec : 由其他程序运行的二进制文件 (可选)

路径: /usr/libexec
描述: Binaries run by other programs (optional)

4.7.1 目的 (Purpose)

包含由其他程序调用的二进制文件。


4.8 /usr/lib : 替代格式库 (可选)

路径: /usr/lib<qual>
描述: Alternate format libraries (optional)

4.8.1 目的 (Purpose)

支持多架构系统。


4.9 /usr/local : 本地层次结构

路径: /usr/local
描述: Local hierarchy

4.9.1 目的 (Purpose)

本地安装软件的位置。

4.9.2 要求 (Requirements)

  • /usr/local 应该由系统软件包管理器管理
  • /usr/local 下不应存在 FHS 规定的必需文件

4.9.3 特定选项 (Specific Options)

目录结构:

/usr/local/bin     # 本地二进制文件
/usr/local/etc     # 本地配置文件
/usr/local/games   # 本地游戏数据
/usr/local/include # 本地头文件
/usr/local/lib     # 本地库
/usr/local/man     # 本地手册页
/usr/local/sbin    # 本地系统二进制
/usr/local/share   # 本地共享数据
/usr/local/src     # 本地源代码

4.9.4 /usr/local/share : 本地架构无关层次结构


4.10 /usr/sbin : 非必需标准系统二进制文件

路径: /usr/sbin
描述: Non-essential standard system binaries

4.10.1 目的 (Purpose)

包含非必需的系统管理二进制文件。

4.10.2 要求 (Requirements)

包含系统管理工具和守护进程。


4.11 /usr/share : 架构无关数据

路径: /usr/share
描述: Architecture-independent data

4.11.1 目的 (Purpose)

包含可以在不同架构之间共享的数据。

4.11.2 要求 (Requirements)

  • /usr/share 必须在不同架构之间完全相同

4.11.3 特定选项 (Specific Options)

目录结构:

/usr/share/color           # 颜色管理信息
/usr/share/dict           # 单词列表
/usr/share/man            # 手册页
/usr/share/misc           # 各种架构无关数据
/usr/share/ppd            # 打印机定义
/usr/share/sgml           # SGML 数据
/usr/share/xml            # XML 数据

4.11.4 /usr/share/color : 颜色管理信息 (可选)

4.11.5 /usr/share/dict : 单词列表 (可选)

4.11.6 /usr/share/man : 手册页

手册页结构:

/usr/share/man/man1/  # 手册页第1节(用户命令)
/usr/share/man/man2/  # 手册页第2节(系统调用)
/usr/share/man/man3/  # 手册页第3节(C库函数)
/usr/share/man/man4/  # 手册页第4节(设备文件)
/usr/share/man/man5/  # 手册页第5节(文件格式)
/usr/share/man/man6/  # 手册页第6节(游戏)
/usr/share/man/man7/  # 手册页第7节(约定等)
/usr/share/man/man8/  # 手册页第8节(系统管理)
/usr/share/man/man9/  # 手册页第9节(内核)
/usr/share/man/mann/  # 手册页第n节(本地)

4.11.7 /usr/share/misc : 各种架构无关数据

4.11.8 /usr/share/ppd : 打印机定义 (可选)

4.11.9 /usr/share/sgml : SGML 数据 (可选)

4.11.10 /usr/share/xml : XML 数据 (可选)


4.12 /usr/src : 源代码 (可选)

路径: /usr/src
描述: Source code (optional)

4.12.1 目的 (Purpose)

包含源代码文件(通常仅为内核源码)。


5. The /var Hierarchy

5.1 目的 (Purpose)

/var 包含可变数据文件。这包括 spool 目录和文件、管理和日志数据,以及临时文件。

5.2 要求 (Requirements)

  • /var 必须是可写的
  • /var 的内容不应在重启后删除
  • 应用程序不应将临时文件写入 /var

5.3 特定选项 (Specific Options)


5.4 /var/account : 进程 accounting 日志 (可选)

路径: /var/account
描述: Process accounting logs (optional)

5.4.1 目的 (Purpose)

包含进程 accounting 日志。


5.5 /var/cache : 应用程序缓存数据

路径: /var/cache
描述: Application cache data

5.5.1 目的 (Purpose)

包含应用程序的缓存数据。

5.5.2 特定选项 (Specific Options)

  • /var/cache/fonts - 本地生成的字体
  • /var/cache/man - 本地格式化的手册页

5.6 /var/crash : 系统崩溃转储 (可选)

路径: /var/crash
描述: System crash dumps (optional)

5.6.1 目的 (Purpose)

包含系统崩溃转储文件。


5.7 /var/games : 可变游戏数据 (可选)

路径: /var/games
描述: Variable game data (optional)

5.7.1 目的 (Purpose)

包含游戏的可变数据。


5.8 /var/lib : 可变状态信息

路径: /var/lib
描述: Variable state information

5.8.1 目的 (Purpose)

包含应用程序状态信息。

5.8.2 要求 (Requirements)

  • /var/lib/<name> 目录由对应的子系统管理
  • /var/lib/color 不应存在(已弃用)

5.8.3 特定选项 (Specific Options)

  • /var/lib/<editor> - 编辑器备份和状态
  • /var/lib/hwclock - hwclock 状态目录
  • /var/lib/misc - 各种可变数据

5.9 /var/lock : 锁文件

路径: /var/lock
描述: Lock files

5.9.1 目的 (Purpose)

包含锁文件,确保资源只能被一个程序访问。


5.10 /var/log : 日志文件和目录

路径: /var/log
描述: Log files and directories

5.10.1 目的 (Purpose)

包含系统和应用程序日志文件。

5.10.2 特定选项 (Specific Options)

文件说明
/var/log/btmp失败的登录记录
/var/log/lastlog最后登录记录
/var/log/messages系统消息
/var/log/wtmp登录/登出记录

5.11 /var/mail : 用户邮箱文件 (可选)

路径: /var/mail
描述: User mailbox files (optional)

5.11.1 目的 (Purpose)

包含用户邮箱文件。


5.12 /var/opt : /opt 的可变数据

路径: /var/opt
描述: Variable data for /opt

5.12.1 目的 (Purpose)

/opt 中安装软件的可变数据。


5.13 /var/run : 运行时可变数据

路径: /var/run
描述: Run-time variable data

5.13.1 目的 (Purpose)

包含标识当前运行系统的信息。

5.13.2 要求 (Requirements)

  • /var/run 在系统重启后应为空
  • /var/run/utmp - 当前登录用户信息

5.14 /var/spool : 应用程序 spool 数据

路径: /var/spool
描述: Application spool data

5.14.1 目的 (Purpose)

包含等待处理的 spool 数据。

5.14.2 特定选项 (Specific Options)

  • /var/spool/lpd - 行式打印机守护进程打印队列
  • /var/spool/rwho - rwhod 文件

5.15 /var/tmp : 在系统重启之间保留的临时文件

路径: /var/tmp
描述: Temporary files preserved between system reboots

5.15.1 目的 (Purpose)

临时文件目录,内容在重启后保留。


5.16 /var/yp : NIS 数据库文件 (可选)

路径: /var/yp
描述: Network Information Service (NIS) database files (optional)

5.16.1 目的 (Purpose)

包含 NIS 数据库文件。


6. Operating System Specific Annex

6.1 Linux

6.1.1 / : 根目录

6.1.2 /bin : 供所有用户使用的必需用户命令二进制文件

6.1.3 /dev : 设备和特殊文件

6.1.4 /etc : 主机特定的系统配置

Linux 特定文件:

文件说明
/etc/csh.loginC shell 登录脚本
/etc/ld.so.conf共享库搜索路径
/etc/profile系统默认环境

6.1.5 /proc : 内核和进程信息虚拟文件系统

路径: /proc
描述: Kernel and process information virtual filesystem

/proc 是 Linux 特有的虚拟文件系统,提供内核和进程信息。

6.1.6 /sbin : 必需系统二进制文件

Linux 特定文件:

文件说明
/sbin/ctrlaltdelCtrl+Alt+Del 处理
/sbin/getty终端登录程序
/sbin/init系统初始化
/sbin/kexec内核执行
/sbin/ldconfig动态链接器配置
/sbin/modprobe模块加载器
/sbin/rmmod模块卸载
/sbin/runlevel运行级别查询
/sbin/setconsole控制台设置
/sbin/sulogin单用户登录
/sbin/swapon启用交换
/sbin/swapoff禁用交换

6.1.7 /sys : 内核和系统信息虚拟文件系统

路径: /sys
描述: Kernel and system information virtual filesystem

6.1.8 /usr/include : C 程序包含的头文件

Linux 特定目录:

目录说明
/usr/include/asm汇编头文件
/usr/include/linuxLinux 内核头文件
/usr/include/net网络相关头文件

6.1.9 /usr/src : 源代码

Linux 内核源代码位置:

路径说明
/usr/src/linuxLinux 内核源代码
/usr/src/linux-headers内核头文件

6.1.10 /var/spool/cron : cron 和 at 作业

路径: /var/spool/cron
描述: cron and at jobs

7. Appendix

7.1 FHS 邮件列表

7.2 FHS 背景

7.3 通用指南

7.4 范围

7.5 致谢

7.6 贡献者

  • Daniel Quinlan (1994-2004)
  • Paul 'Rusty' Russell (2001-2004)
  • Christopher Yeoh (2003-2004)

附录:文件类型标记说明

标记含义
[RP]Required File - 必需文件
[CP]Conditional File - 条件文件(满足条件时必需)
[DR]Directory Required - 必需目录
[DC]Directory Conditional - 条件目录
[OP]Optional - 可选

本文档基于 Filesystem Hierarchy Standard Version 3.0 (2015年3月19日)
原文版权 © 2015 The Linux Foundation

Table of Contents