文件系统等级制度标准(文件系统层级标准)
Filesystem Hierarchy Standard Group
它的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下,所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的使用者,都能够遵循FHS的标准。 也就是说,FHS的重点在于规范每个特定的目录下应该要 放置什么样子的数据而已。
总结为两点:
统一结构
方便使用
静态文件和变量文件应该分开,因为静态文件不同于变量文件,可以存储在只读媒体上,不需要按照与变量文件相同的计划备份。
历史类UNIX文件系统层次结构在/usr和/etc下同时包含静态和变量文件,为了实现上述优点,创建了/var层次结构,并将所有变量文件从/usr传输到/var。因此/usr现在可以以只读方式挂载(如果它是一个单独的文件系统)。在技术允许的情况下,变量文件从/etc传输到/var的时间更长。
可共享的文件可以存储在一个主机上,并在其他几个主机上使用。但是,通常不是文件系统层次结构中的所有文件都可以共享,因此每个系统都有至少包含其不可共享文件的本地存储。如果系统所需的存储在外部主机上的所有文件都可以通过从外部主机装载一个或几个目录而变得可用,那么这是很方便的。
可共享的 | 不可共享 | |
---|---|---|
不变的(static) | /usr (软件放置处) | /etc (配置文件) |
/opt (第三方协力软件) | /boot (开机与核心档) | |
可变动的(variable) | /var/mail (使用者邮件信箱) | /var/run (程序相关) |
/var/spool/news (新闻组) | /var/lock (程序相关) |
根文件系统的内容必须足以引导、还原、恢复和/或修复系统。
用来平衡这些考虑因素的主要关注点是保持根文件系统尽可能小,这有利于将许多东西放在根文件系统上。出于几个原因,最好保持根文件系统较小:
禁止创建根文件系统的新子目录有几个原因
命令 | 描述 |
---|---|
cat | 将文件连接到标准输出的实用程序 |
chgrp | 更改文件组所有权的实用程序 |
chmod | 更改文件访问权限的实用程序 |
chown | 更改文件所有者和组的实用程序 |
cp | 用于复制文件和目录的实用程序 |
date | 打印或设置系统数据和时间的实用程序 |
dd | 转换和复制文件的实用程序 |
df | 用于报告文件系统磁盘空间使用情况的实用程序 |
dmesg | 用于打印或控制内核消息缓冲区的实用程序 |
echo | 显示一行文本的实用程序 |
false | 效用不做任何事,失败 |
hostname | 显示或设置系统主机名的实用程序 |
kill | 向进程发送信号的实用程序 |
ln | 在文件之间建立链接的实用程序 |
login | 在系统上开始会话的实用程序 |
ls | 列出目录内容的实用程序 |
mkdir | 创建目录的实用程序 |
mknod | 生成块或字符特殊文件的实用程序 |
more | 在文本中翻页的实用程序(less) |
mount | 挂载文件系统的实用程序 |
mv | 移动/重命名文件的实用程序 |
ps | 用于报告进程状态的实用程序 |
pwd | 打印当前工作目录名称的实用程序 |
rm | 删除文件或目录的实用程序 |
rmdir | 删除空目录的实用程序 |
sed | “sed”流编辑器 |
sh | shell |
stty | 更改和打印终端线设置的实用程序 |
su | 更改用户ID的实用程序 |
sync | 刷新文件系统缓冲区的实用程序 |
true | 实用工具不做任何事,成功 |
umount | 卸载文件系统的实用程序 |
uname | 打印系统信息的实用程序 |
/boot:引导加载程序的静态文件
此目录包含启动过程所需的所有内容,启动时不需要的配置文件和映射安装程序除外。因此/boot存储在内核开始执行用户模式程序之前使用的数据。这可能包括保存的主引导扇区和扇区映射文件
/dev:设备文件
/dev目录是特殊或设备文件的位置。
/etc:特定于主机的系统配置
/etc层次结构包含配置文件。“配置文件”是用于控制程序操作的本地文件;它必须是静态的,不能是可执行的二进制文件
目录 | 说明 |
---|---|
opt | /opt的配置 |
X11 | X窗口系统的配置(可选) |
sgml | SGML的配置 |
xml | XML的配置 |
3.7.3 /etc/
文件 | 描述 |
---|---|
csh.login | 用于C shell登录的系统范围初始化文件 |
exports | NFS文件系统访问控制列表 |
fstab | 关于文件系统的静态信息 |
ftpusers | FTP后台程序用户访问控制列表 |
gateways | 列出路由网关的文件 |
gettydefs | gett使用的速度和终端设置 |
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的配置文件 |
/home:用户主目录
/home是一个相当标准的概念,但它显然是一个特定于站点的文件系统。设置将因主机而异。因此,任何程序都不应依赖于此位置。
应用程序的用户特定配置文件存储在用户主目录中以“.”字符开头的文件(“点文件”)中。如果应用程序需要创建多个点文件,则应将它们放在以“.”字符开头的子目录(“点目录”)中。在这种情况下,配置文件不应以“.”字符开头。
/lib:基本共享库和内核模块
/lib目录包含启动系统和在根文件系统中运行命令所需的共享库映像,即通过/bin和/sbin中的二进制文件。
/media:可移动介质的安装点
此目录包含用作可移动媒体(如软盘、CDROM和zip磁盘)的装入点的子目录。
目录结构 | 描述 |
---|---|
floppy | 软驱 |
cdrom | 光驱 |
cdrecorder | CD刻录机 |
zip | zip驱动 |
/mnt:临时挂载文件系统的挂载点
提供此目录是为了让系统管理员可以根据需要临时挂载文件系统。此目录的内容是本地问题,不应影响任何程序的运行方式。
安装程序不得使用此目录:必须使用系统未使用的适当临时目录。
/opt:附加应用程序软件包
/opt保留用于安装附加应用程序软件包。
要安装在/opt中的包必须在单独的/opt/中找到其静态文件,或者
/opt/目录树,其中是描述软件包和
是提供者的LANANA注册名。
/root:根用户的主目录(可选)
根帐户的主目录可能由开发人员或本地首选项确定,但这是建议的默认位置。
/sbin:系统二进制文件
用于系统管理的实用程序(以及其他仅限根用户的命令)存储在/sbin、/usr/sbin和/usr/local/sbin中。/除了/bin中的二进制文件外,sbin还包含启动、还原、恢复和/或修复系统所必需的二进制文件。已知挂载/usr之后执行的18个程序(当没有问题时)通常放在/usr/sbin中。本地安装的系统管理程序应放在/usr/local/sbin中
shutdown 命令关闭系统
命令 | 描述 |
---|---|
fastboot | 在不检查磁盘的情况下重新启动系统 |
fasthalt | 在不检查磁盘的情况下停止系统 |
fdisk | 分区表操纵器 |
fsck | 文件系统检查和修复实用程序 |
fsck.* | 特定文件系统的文件系统检查和修复实用程序 |
getty | The getty program |
halt | 停止系统的命令 |
ifconfig | 配置网络接口 |
init | 初始过程 |
mkfs | 构建文件系统的命令 |
mkfs.* | 生成特定文件系统的命令 |
mkswap | 设置交换区域的命令 |
reboot | 重新启动系统的命令 |
route | IP路由表实用程序 |
swapon | 启用分页和交换 |
swapoff | 关闭分页和交换 |
update | 守护进程定期刷新文件系统缓冲区 |
/srv:本系统提供服务的数据
/srv包含此系统提供的站点特定数据
/tmp:临时文件
必须为需要临时文件的程序提供/tmp目录。
程序不能假定在调用程序之间/tmp中的任何文件或目录都被保留
不需要放入/bin的命令二进制文件必须放入/usr/bin。
只有非根用户(X窗口系统、chsh等)才需要的项通常不足以放入根分区。
安排引导加载程序能够引导文件所需的程序必须放在/sbin中。
引导加载程序的配置文件必须放在/etc中。
GRUB bootloader在引导之前读取其配置文件,因此必须将其放在/boot中。但是,它是一个配置文件,所以应该在/etc中。
由于硬件限制,在某些i386计算机上,可能需要将/boot放在位于完全低于引导设备的1024M。
某些MIPS系统需要一个/boot分区,该分区是一个挂载的MS-DOS文件系统或固件可以访问的任何其他文件系统类型。这可能会对/boot中的可用文件名造成限制(仅适用于受影响的系统)。
建议将文件存储在/etc的子目录中,而不是直接存储在/etc中。
使用shadow密码套件的系统将在/etc(/etc/shadow和其他)和/usr/sbin(useradd、usermod和其他)中有其他配置文件。
在某些Linux系统上,这可能是指向/proc/mounts的符号链接,在这种情况下不需要此异常。
/etc/X11/xdm保存xdm的配置文件。这些以前是在/usr/lib/X11/xdm。xdm的一些局部变量数据存储在/var/lib/xdm中。
在小型系统上,每个用户的目录通常是/home的许多子目录之一,例如**/home/smith**;
大型系统上的home/torvalds、/home/operator等。
建议除了自动保存和锁定文件外,程序应避免在没有用户干预的情况下在主目录中创建非点文件或目录。
只有/usr中的二进制文件(如任何X窗口二进制文件)所需要的共享库不能在/lib中。只**有在/bin和/sbin中运行二进制文件所需的共享库可以在这里。**特别是,如果/bin或/sbin中的任何内容都不需要libm.so.*库,它也可以放在/usr/lib中。
/usr是文件系统的第二个主要部分。/usr是可共享的只读数据。这意味着/usr应该可以在不同的FHS兼容主机之间共享,并且不能写入。任何特定于主机或随时间变化的信息都存储在其他位置。
var包含变量数据文件。这包括假脱机目录和文件、管理和日志数据,以及临时和临时文件。
/var的某些部分不能在不同系统之间共享。例如,var/log、var/lock和/var/run。其他部分可以共享,特别是/var/mail、/var/cache/man、/var/cache/fonts和var/spool/news。
此处指定var是为了使以只读方式装载usr成为可能。曾经的一切在系统运行期间(与安装和软件维护相反)写入的内容必须在/var中。
如果/var不能成为一个单独的分区,通常最好将/var从根分区移到/usr分区。(有时这样做是为了减小根分区的大小,或者在
但是,不能将var链接到/usr,因为这样会分离/usr和/var更困难的是,可能会产生命名冲突。相反,将/var链接到/usr/var。
应用程序通常不能将目录添加到/var的顶层。只有在它们具有一些系统范围的含义,并与FHS邮件列表协商。
统运行期间(与安装和软件维护相反)写入的内容必须在/var中。
如果/var不能成为一个单独的分区,通常最好将/var从根分区移到/usr分区。(有时这样做是为了减小根分区的大小,或者在
但是,不能将var链接到/usr,因为这样会分离/usr和/var更困难的是,可能会产生命名冲突。相反,将/var链接到/usr/var。
应用程序通常不能将目录添加到/var的顶层。只有在它们具有一些系统范围的含义,并与FHS邮件列表协商。
[外链图片转存中…(img-auR4gyMk-1581405172456)]