Linux 目录结构

Filesystem Hierarchy Standard

背景知识

文件系统层次标准(Filesystem Hierarchy Standard - FHS) 是描述用于UNIX系统布局的约定的参考。 它因在 GNU/Linux发行版中的使用而广受欢迎,但也被其他UNIX变体使用。 它由Linux基金会维护。 最新版本是3.0,于2015年6月3日发布。

LSB 工作组的核心目标是解决两个问题,一、在一个发行版上开发的程序可以在其它发行版上运行;二、在当前的发行版上开发的程序可以在未来的发行版上运行。

本文内容根据 FHS 3.0 整理。

文件按使用特性分为

  • “可共享”文件是可以存储在一台主机上并在其他主机上使用的文件。
  • “不可共享”文件是不可共享的文件。例如,用户主目录中的文件是可共享的,而设备锁定文件则不是。
  • “静态”文件包括二进制文件、库、文档文件和其他在没有系统管理员干预的情况下不会更改的文件。
  • “可变”文件是非静态文件。

可共享文件可以存储在一台主机上并在其他几台主机上使用。

静态文件和可变文件应该分开,因为静态文件与可变文件不同,可以存储在只读媒体上,不需要像可变文件一样按照相同的计划进行备份。

可分享的不可分享
静止的/usr/etc
/opt/boot
多变的/var/mail/var/run
/var/spool/news/var/lock

/ 目录结构

/中需要以下目录或目录的符号链接

目录描述
/bin/基本命令二进制文件
/boot/引导加载程序的静态文件
/dev/设备文件
/etc/特定于主机的系统配置
/lib/基本共享库和内核模块
/media/可移动媒体的挂载点
/mnt/临时挂载文件系统的挂载点
/opt/附加应用软件包
/run/与正在运行的进程相关的数据
/sbin/基本系统二进制文件
/srv/本系统提供的服务数据
/tmp/临时文件
/usr/二级层次结构
/var/可变数据

如果安装了相应的子系统,则以下目录或目录的符号链接必须位于/中:

目录描述
/home/用户主目录(可选)
/lib/<qual>/备用格式基本共享库(可选)
/root/root 用户的主目录(可选)

/bin/ 基本命令

基本用户命令二进制文件(供所有用户使用)

  • /bin 包含系统管理员和用户都可以使用的命令。
  • /bin 中不能有子目录。

/bin 中需要以下命令或命令的符号链接:

命令描述
cat将文件连接到标准输出的实用程序
chgrp更改文件组所有权的实用程序
chmod更改文件访问权限的实用程序
chown更改文件所有者和组的实用程序
cp复制文件和目录的实用程序
date打印或设置系统数据和时间的实用程序
dd转换和复制文件的实用程序
df报告文件系统磁盘空间使用情况的实用程序
dmesg打印或控制内核消息缓冲区的实用程序
echo显示一行文本的实用程序
false效用什么都不做,不成功
hostname显示或设置系统主机名的实用程序
kill向进程发送信号的实用程序
ln用于在文件之间建立链接的实用程序
login在系统上开始会话的实用程序
ls列出目录内容的实用程序
mkdir制作目录的实用程序
mknod制作块或字符特殊文件的实用程序
more通过文本翻页的实用程序
mount挂载文件系统的实用程序
mv移动/重命名文件的实用程序
ps报告进程状态的实用程序
pwd打印当前工作目录名称的实用程序
rm删除文件或目录的实用程序
rmdir删除空目录的实用程序
sed`sed' 流编辑器
shPOSIX 兼容的命令外壳
stty更改和打印终端线路设置的实用程序
su更改用户 ID 的实用程序
sync刷新文件系统缓冲区的实用程序
true实用程序什么都不做,成功
umount卸载文件系统的实用程序
uname打印系统信息的实用程序

/bin如果安装了相应的子系统,则必须包含以下程序或程序的符号链接:

命令描述
cshC shell(可选)
ed'ed' 编辑器(可选)
tartar 归档实用程序(可选)
cpiocpio 归档实用程序(可选)
gzipGNU 压缩实用程序(可选)
gunzipGNU 解压实用程序(可选)
zcatGNU 解压实用程序(可选)
netstat网络统计实用程序(可选)
pingICMP 网络测试实用程序(可选)

/bin/csh可能是 /bin/tcsh或 /usr/bin/tcsh的符号链接。

/etc/ 系统配置

特定于主机的系统配置

/etc层次结构包含配置文件。“配置文件”是用于控制程序运行的本地文件;它必须是静态的,不能是可执行的二进制文件。

建议将文件存储在 的子目录中, /etc而不是直接存储在 /etc.

/etc如果安装了相应的子系统 ,则必须包含以下文件或文件的符号链接 :

文件描述
csh.loginC shell 登录的系统范围初始化文件(可选)
exportsNFS 文件系统访问控制列表(可选)
fstab关于文件系统的静态信息(可选)
ftpusersFTP daemon 用户访问控制列表(可选)
gateways列出路由网关的文件(可选)
gettydefsgetty 使用的速度和终端设置(可选)
group用户组文件(可选)
host.conf解析器配置文件(可选)
hosts关于主机名的静态信息(可选)
hosts.allowTCP 包装器的主机访问文件(可选)
hosts.denyTCP 包装器的主机访问文件(可选)
hosts.equivrlogin、rsh、rcp 的受信任主机列表(可选)
hosts.lpdlpd 的受信任主机列表(可选)
inetd.confinetd 的配置文件(可选)
inittabinit 的配置文件(可选)
issue登录前消息和识别文件(可选)
ld.so.conf用于搜索共享库的额外目录列表(可选)
motd当天文件的登录后消息(可选)
mtab关于文件系统的动态信息(可选)
mtools.confmtools 的配置文件(可选)
networks有关网络名称的静态信息(可选)
passwd密码文件(可选)
printcaplpd 打印机功能数据库(可选)
profile用于 sh shell 登录的系统范围初始化文件(可选)
protocolsIP 协议列表(可选)
resolv.conf解析器配置文件(可选)
rpcRPC 协议列表(可选)
securetty根登录的 TTY 访问控制(可选)
services网络服务的端口名称(可选)
shells有效登录 shell 的路径名(可选)
syslog.confsyslogd 的配置文件(可选)

mtab不符合 的静态性质 /etc:由于历史原因除外。

/home/ 用户主目录

用户主目录(可选)

/home是一个相当标准的概念,但它显然是一个特定于站点的文件系统。设置因主机而异。因此,任何程序都不应该假定主目录的任何特定位置,而是应该查询它。

应用程序的用户特定配置文件存储在用户主目录中以“.”开头的文件(“点文件”)中。 如果应用程序需要创建多个点文件,则应将它们放置在名称以“.”开头的子目录(“点目录”)中。 在这种情况下,配置文件不应以“.”开头。

/opt/ 附加应用软件包

/opt用于保留安装附加应用程序软件包。

要安装的软件包/opt必须将其静态文件定位在单独的 /opt/<package>/opt/<provider>目录树中,其中<package>是描述软件包的名称,并且<provider>是提供者的 LANANA 注册名称。

目录描述
<package>静态包对象
<provider>LANANA 注册提供商名称

以下目录保留给本地系统管理员使用:

  • /opt/bin
  • /opt/doc
  • /opt/include
  • /opt/info
  • /opt/lib
  • /opt/man

用户调用的程序必须位于以下目录层次结构下:

  • /opt/<package>/bin
  • /opt/<provider>

可变的包文件(正常操作中的更改)必须安装在 /var/opt

主机特定的配置文件必须安装在 /etc/opt

/sbin/ 系统二进制文件

用于系统管理的实用程序(和其他仅限 root 的命令)存储在/sbin、 /usr/sbin 和 /usr/local/sbin.

本地安装的系统管理程序应放入 /usr/local/sbin

/sbin如果安装了相应的子系统,则必须包含以下文件或文件的符号链接 :

命令描述
fastboot重新启动系统而不检查磁盘(可选)
fasthalt停止系统而不检查磁盘(可选)
fdisk分区表操纵器(可选)
fsck文件系统检查和修复实用程序(可选)
fsck.*特定文件系统的文件系统检查和修复实用程序(可选)
gettygetty 程序(可选)
halt停止系统的命令(可选)
ifconfig配置网络接口(可选)
init初始过程(可选)
mkfs构建文件系统的命令(可选)
mkfs.*构建特定文件系统的命令(可选)
mkswap设置交换区的命令(可选)
reboot重启系统的命令(可选)
routeIP 路由表实用程序(可选)
swapon启用分页和交换(可选)
swapoff禁用分页和交换(可选)
update定期刷新文件系统缓冲区的守护进程(可选)

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

这是系统上可执行命令的主目录。

/usr/bin中不能有子目录。

如果安装了相应的子系统,则以下文件或文件的符号链接必须位于/usr/bin中 :

命令描述
perl实用的提取和报告语言(可选)
pythonPython 解释语言(可选)
tclsh包含 Tcl 解释器的简单 shell(可选)
wish简单的 Tcl/Tk 窗口外壳(可选)
expect交互式对话程序(可选)

参考资料

Linux标准基础(Linux Standard Base - LSB)是一个Linux基金会(Linux Foundation - LF)项目。

参考规格页面可以查阅已经发布的FHS规范