Filesystem Hierarchy Standard(FHS)(文件系统层次结构标准)

本文章为基维百科关于FHS的译文,原文见https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

该文件系统层次标准(FHS)定义的目录结构中的目录和内容的Linux分布。它由Linux基金会维护。最新版本是3.0,于2015年6月3日发布。

目录结构

在FHS中,所有文件和目录都显示在根目录下 /,即使它们存储在不同的物理或虚拟设备上也是如此。如果安装了某些子系统(如X Window System),则某些目录仅存在于特定系统上。
大多数这些目录存在于所有类Unix操作系统中,并且通常以大致相同的方式使用; 但是,这里的描述是专门用于FHS的描述,并且对非Linux以外的平台非权威。
/ 整个文件系统层次结构的主层次结构根和根目录。
/bin 所有用户在单用户模式下必须具备的二进制命令文件,例如,cat,ls,cp 。
/boot Boot loader (引导加载程序)文件,例如, kernels(内核), initrd。
/dev device files(设备文件),例如,/dev/null,/dev/disk0。 /dev/sda1,/dev/tty,/dev/random。
/etc 特定于主机 全系统 配置文件。
关于名称本身的含义一直存在争议。在早期由Bell labs所撰写的UNIX实施文档中,/etc被称为etcetera目录,因为历史上这个目录用来保存所有不属于其他地方的东西(但是,FHS限制/etcetc仅用于保存静态配置文件,不能保存二进制文件) 。自早期文档发布以来,这个目录名称已经以各种方式重新解释、定义。最近的解释包如”Editable Text Configuration” 或 “Extended Tool Chest”词源 。
/etc/opt 存储在/opt/中的附加软件包的配置文件。
/etc/sgml 处理SGML的程序(如catalogs)的配置文件。
/etc/X11 X Window System, version 11 的配置文件。
/etc/xml 处理xml的程序(如catalogs)的配置文件。
/home 用户的主目录,包含已保存的文件,个人设置等。
/lib /bin/ 和/sbin/ 中必须的依赖库。
/lib 替代格式必备库。这些目录是可选的,但如果它们存在,则它们有一些要求。
/media 一些可以热拔插的介质(如CD-ROMs)的挂载点 (2004年在FHS-2.3中出现)。
/mnt 临时挂载的文件系统。
/opt 可选的应用程序包。
/proc 将进程和内核信息以文件形式呈现的虚拟文件系统。在Linux中,与procfs mount(进程文件系统)对应。
/root root用户的个人目录
/run 运行时变量数据:自上次启动以来有关正在运行的系统的信息,例如,当前登录的用户和正在运行的守护程序。必须在引导过程开始时删除或截断此目录下的文件; 但是在将此目录作为临时文件系统(tmpfs)提供的系统上的文件非必需。
/sbin 必备的系统可执行文件,例如 fsck,init,route。
/srv 此系统提供的站点特定数据,例如Web服务器的数据和脚本,FTP服务器提供的数据以及版本控制系统的存储库(2004年出现在FHS-2.3中)。
/sys 包含有关设备,驱动程序和某些内核功能的信息。
/tmp 临时文件(另见/var/tmp)。通常在重启后清空,并且受到严格的大小限制。
/usr 只读用户数据的次要层次,包含大部分(多)用户功能和应用。
/usr/bin 所有用户的非必要的二进制可执行文件(在单用户模式中不需要)。
/usr/include Standard include files。
/usr/lib /usr/bin/ 和 /usr/sbin/ 中的二进制文件的依赖库。
/usr/lib 替代格式库,例如 /usr/lib32 64位机器上的32位库(可选)。
/usr/local 仅针对当前主机的 本地数据的第三个层次。一般包含其他的子目录,如 bin/, lib/, share/。
/usr/sbin 非必须的系统二进制文件,如多种网络服务的守护进程。
/usr/share 独立于架构的(共享)数据。
/usr/src 源代码,例如带有头文件的内核源代码。
/usr/X11R6 X Window System, Version 11, Release 6 (up to FHS-2.3, optional)。
/var 变量文件 - 其内容在系统正常运行期间会不断更改的文件(如日志,假脱机文件和临时电子邮件文件)。
/var/cache 应用缓存数据。由于耗时的I / O或计算,这些数据是本地生成的。应用程序必须能够重新生成或恢复数据。可以删除缓存的文件而不会丢失数据。
/var/lib 状态信息。程序运行时会改变的持久化数据,例如数据库,打包系统元数据等。
/var/lock 锁定文件。跟踪当前正在使用的资源的文件。
/var/log Log files. 各种日志。
/var/mail 邮箱文件。在某些发行版中,这些文件可能位于已弃用的文件中/var/spool/mail。
/var/opt 来自保存在/opt 中的插件包的可变数据。
/var/run Run-time variable data. 这个目录包含描述系统的自启动以来的系统信息数据 。在 FHS 3.0中, /var/run 被 /run 替代。系统不应该在使用/var/run 或者提供/var/run 到 /run 的符号连接,防止出现兼容性倒退。
/var/spool 用于等待处理的任务的假脱机,例如,打印队列和外发邮件队列。
/var/spool/mail 不建议使用的用户邮箱位置。
/var/tmp 重新启动之间要保留的临时文件。

FHS约定

大多数Linux发行版遵循文件系统层次结构标准,并声明自己的策略以维护FHS合规性。GoboLinux和NixOS提供了故意不符合文件系统实现的示例。
有些发行版通常遵循标准,但在某些方面偏离它。常见偏差包括:

  • 现代Linux发行版包括一个/sys目录作为虚拟文件系统(sysfs,相当于/proc),它存储并允许修改连接到系统的设备,但是许多UNIX和类UNIX系统使用/sys作为指向 kernel source tree 的符号连接。
  • 许多现代UNIX系统(像FreeBSD ,通过它的端口系统)安装第三方包至/usr/local 然而却将本应是操作系统的代码放在/usr
    中。
  • 一些Linux发行版之间不再区分/lib与/usr/lib,并将/lib 作为指向 /usr/lib 的软连接。
  • 一些Linux发行版不再区分/bin与/usr/bin和/sbin与/usr/sbin。他们将 /bin 作为指向 /usr/bin的软连接, 将/sbin 作为指向/usr/sbin 的软连接。

现代Linux发行版将/run 作为(遵循FHS3.0的)保存不稳定的运行时数据的临时文件系统(tmpfs)。根据FHS2.3,这类数据被保存在/var/run ,但是由于在启动时这个目录并不总是可用,会导致一些问题。所以,这些程序必须借助欺骗的方式,如使用类似 /dev/.udev, /dev/.mdadm, /dev/.systemd 或 /dev/.mount 等并不是用来保存这些数据的设备目录。除其他好处外,这样也会使根目录以只读方式挂载的系统更容易使用。例如,以下是Debian在2013年的Wheezy版本中作出的改变:

  • /dev/.* → /run/*
  • /dev/shm → /run/shm
  • /dev/shm/* → /run/*
  • /etc/* (writeable files) → /run/*
  • /lib/init/rw → /run
  • /var/lock → /run/lock
  • /var/run → /run
  • /tmp → /run/tmp

历史

当FHS被以FSSTND (Filesystem Standard的缩写)被创建时,其他UNIX和类UNIX系统已经有了他们自己的标准。比较典型的例子有 自从 Version 7 Unix (in 1979)发布以来就存在的the hier(7) description of file system layout; the SunOS filesystem(7) 和它的后继 the Solaris filesystem(5)

历史版本

Filesystem Hierarchy Standard(FHS)(文件系统层次结构标准)_第1张图片

参阅

  • Unix directory structure
  • Intel Binary Compatibility Standard (iBCS)
  • hier(7) – Linux Programmer’s Manual – Overview, Conventions and
    Miscellanea

你可能感兴趣的:(linux)