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' 流编辑器 |
sh | POSIX 兼容的命令外壳 |
stty | 更改和打印终端线路设置的实用程序 |
su | 更改用户 ID 的实用程序 |
sync | 刷新文件系统缓冲区的实用程序 |
true | 实用程序什么都不做,成功 |
umount | 卸载文件系统的实用程序 |
uname | 打印系统信息的实用程序 |
/bin
如果安装了相应的子系统,则必须包含以下程序或程序的符号链接:
命令 | 描述 |
---|---|
csh | C shell(可选) |
ed | 'ed' 编辑器(可选) |
tar | tar 归档实用程序(可选) |
cpio | cpio 归档实用程序(可选) |
gzip | GNU 压缩实用程序(可选) |
gunzip | GNU 解压实用程序(可选) |
zcat | GNU 解压实用程序(可选) |
netstat | 网络统计实用程序(可选) |
ping | ICMP 网络测试实用程序(可选) |
/bin/csh可能是 /bin/tcsh或 /usr/bin/tcsh的符号链接。
/etc/ 系统配置
特定于主机的系统配置
/etc层次结构包含配置文件。“配置文件”是用于控制程序运行的本地文件;它必须是静态的,不能是可执行的二进制文件。
建议将文件存储在 的子目录中, /etc而不是直接存储在 /etc.
/etc
如果安装了相应的子系统 ,则必须包含以下文件或文件的符号链接 :
文件 | 描述 |
---|---|
csh.login | C shell 登录的系统范围初始化文件(可选) |
exports | NFS 文件系统访问控制列表(可选) |
fstab | 关于文件系统的静态信息(可选) |
ftpusers | FTP daemon 用户访问控制列表(可选) |
gateways | 列出路由网关的文件(可选) |
gettydefs | getty 使用的速度和终端设置(可选) |
group | 用户组文件(可选) |
host.conf | 解析器配置文件(可选) |
hosts | 关于主机名的静态信息(可选) |
hosts.allow | TCP 包装器的主机访问文件(可选) |
hosts.deny | TCP 包装器的主机访问文件(可选) |
hosts.equiv | rlogin、rsh、rcp 的受信任主机列表(可选) |
hosts.lpd | lpd 的受信任主机列表(可选) |
inetd.conf | inetd 的配置文件(可选) |
inittab | init 的配置文件(可选) |
issue | 登录前消息和识别文件(可选) |
ld.so.conf | 用于搜索共享库的额外目录列表(可选) |
motd | 当天文件的登录后消息(可选) |
mtab | 关于文件系统的动态信息(可选) |
mtools.conf | mtools 的配置文件(可选) |
networks | 有关网络名称的静态信息(可选) |
passwd | 密码文件(可选) |
printcap | lpd 打印机功能数据库(可选) |
profile | 用于 sh shell 登录的系统范围初始化文件(可选) |
protocols | IP 协议列表(可选) |
resolv.conf | 解析器配置文件(可选) |
rpc | RPC 协议列表(可选) |
securetty | 根登录的 TTY 访问控制(可选) |
services | 网络服务的端口名称(可选) |
shells | 有效登录 shell 的路径名(可选) |
syslog.conf | syslogd 的配置文件(可选) |
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.* | 特定文件系统的文件系统检查和修复实用程序(可选) |
getty | getty 程序(可选) |
halt | 停止系统的命令(可选) |
ifconfig | 配置网络接口(可选) |
init | 初始过程(可选) |
mkfs | 构建文件系统的命令(可选) |
mkfs.* | 构建特定文件系统的命令(可选) |
mkswap | 设置交换区的命令(可选) |
reboot | 重启系统的命令(可选) |
route | IP 路由表实用程序(可选) |
swapon | 启用分页和交换(可选) |
swapoff | 禁用分页和交换(可选) |
update | 定期刷新文件系统缓冲区的守护进程(可选) |
/usr/bin/ 大多数用户命令
这是系统上可执行命令的主目录。
/usr/bin
中不能有子目录。
如果安装了相应的子系统,则以下文件或文件的符号链接必须位于/usr/bin
中 :
命令 | 描述 |
---|---|
perl | 实用的提取和报告语言(可选) |
python | Python 解释语言(可选) |
tclsh | 包含 Tcl 解释器的简单 shell(可选) |
wish | 简单的 Tcl/Tk 窗口外壳(可选) |
expect | 交互式对话程序(可选) |
参考资料
Linux标准基础(Linux Standard Base - LSB)是一个Linux基金会(Linux Foundation - LF)项目。