Filesystem Hierarchy Standard
Filesystem Hierarchy Standard
文件系统层次结构标准(英语:Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容。FHS由Linux基金会维护。 当前版本为3.0版,于2015年发布。
文档内容不多,英文内容差不多50页,可以很快阅读一遍。
先看下摘要:
This standard consists of a set of requirements and guidelines for file and directory placement under UNIX-like
operating systems. The guidelines are intended to support interoperability of applications, system administration tools,
development tools, and scripts as well as greater uniformity of documentation for these systems.
大体意思就是说要为UNIX-like的系统确定一个文件和目录位置的规范。
接下来文章分成以下几部分:
- 根文件系统——The Root Filesystem
规定了根目录下需要有那些目录文件。
下面的目录(无论是不是链接)都需要在根目录下存在:
目录 | 描述 |
---|---|
bin | Essential command binaries |
boot | Static files of the boot loader |
dev | Device files |
etc | Host-specific system configuration |
lib | Essential shared libraries and kernel modules |
media | Mount point for removable media |
mnt | Mount point for mounting a filesystem temporarily |
opt | Add-on application software packages |
run | Data relevant to running processes |
sbin | Essential system binaries |
srv | Data for services provided by this system |
tmp | Temporary files |
usr | Secondary hierarchy |
var | Variable data |
-
/usr目录结构——The /usr Hierarchy
规定了usr目录下需要有哪些文件。
需要注意的是**/usr不是user的缩写,其实usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录,而不是用户的数据;所有系统默认的软件都会放置到/usr, 系统安装完时,这个目录会占用最多的硬盘容量** -
/var目录结构——The /var Hierarchy
规定了var目录下需要有哪些文件.
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化或扩充的。 -
操作系统其他的一些特定组件
为了更直观地了解文件目录结构,这里放一张2.0版本的图:
-
/
:根文件系统的根,系统上所有文件的访问入口 -
存放操作系统自身运行使用的二进制程序
/bin
: 管理员和普通用户都可以使用/sbin
:管理员才能执行的命令
-
存放运行正常功能的二进制程序
/usr/bin
:管理员和普通用户都可以使用/usr/sbin
:管理员才能执行的命令
-
存放第三方软件的二进制程序
/usr/local/bin
:管理员和普通用户都可以使用/usr/local/sbin
:管理员才能执行的命令
-
/boot
:存放系统引导文件:内核
、``ramfs文件``、``bootloader(grub)`` -
/dev
:存放内核识别的设备文件(设备在内核中会映射成设备文件存放在该目录下,该目录下的设备文件要想实现被访问必须先进行挂载)-
该目录的生成机制
- 1.内核在初始化时通过
devtmps
(用于在内核初始化时为基本设备创建设备文件的临时文件系统)机制在initramfs
(根文件系统所在设备的设备驱动模块)上创建基本设备文件 - 2.用户空间初始化时通过
udev
机制在结合/etc/udev/rules.d/*.rules
配置文件在/dev
目录下创建devtmps
尚未创建的设备文件 - 3.如果还有设备文件没有创建,就使用
mknod
命令手动创建设备文件
- 1.内核在初始化时通过
-
cdrom
:光盘(CD/DVD)映射形成的便携式设备文件,它是一个符号链接,链接到sr0
设备文件 -
sr0
:光盘(CD/DVD)映射形成的便携式设备文件 -
zer0
:该设备文件存储的全部是0 -
null
:存储到该设备文件中的数据都会自动消失 -
console
:物理终端控制台,集成在芯片中,系统刚启动时或启动过程中进行交互的终端 -
ttys#
:串行终端,使用串口连接的终端,#代表数字 -
tty#
:虚拟终端,附加在物理终端上可以任意切换,系统启动完成后进行交互的终端,#代表数字Ctrl+Alt+F1~F6
快捷键可以启动或者说切换到虚拟终端tty1~tty6
Ctrl+Alt+F7
快捷键可以启动图形终端
-
pts/#
:伪终端,远程连接或图形界面下打开的命令接口,#代表数字
-
-
/etc
:配置文件的集中存放目录fstab
:该文件定义了设备文件自动挂载表,系统开机初始化时,会读取该文件根据自动挂载表进行自动挂载设备文件操作。可以通过编辑该文件实现开机自动挂载设备;该文件中六段的意义如下:- 1、要挂载的设备:设备的描述形式===
设备文件路径
、LABEL=""
、UUID=""
- 2、挂载点:有的文件系统没有挂载点,swap就没有挂载点,它的挂载点就是swap
- 3、文件系统类型:
xfs
、swap
、ext4
- 4、挂载选项:多个选项间使用逗号分隔,默认是
defaults
- 5、备份频率:
0-从不备份
、1-每日备份
、2-每隔一天备份
- 6、开机自检次序:
1-首先自检,通常只能被/使用
、2-根自检完后再自检
、0-从不自检
- 1、要挂载的设备:设备的描述形式===
services
:名称解析库,实现端口和服务名称之间进行转换mtab
:存放当前系统所有的设备挂载信息,mount命令会自动修改该文件init.d
:目录,存放系统开机初始化脚本文件ld.so.conf
:存放程序编译源代码过程中链接(ld)时所要查找动态格式共享对象库时所要查找的路径ld.so.conf.d
:目录,存放动态链接库查找路径的所有配置文件sysconfig
:存放系统级别的应用信息
-
/home
:普通用户,默认在/home
下有一个与其名称同名目录,作为用户的家目录 -
/root
:管理员的家目录 -
/lib
:存放32位库文件 -
/lib64
:存放64位库文件 -
/media
:专用挂载位置,通常用来挂载便携式设备 -
/mnt
:专用挂载位置,通常用来挂载额外的存储设备 -
/misc
:杂项,备用目录 -
/opt
:可选目录,但通常用来安装第三方软件 -
/proc
:所显示的文件都不是文件,伪文件系统,保存运行中的内核参数的映射,不能使用vim等编辑器打开;该目录下的绝大数文件都没有写权限,即使是管理员也无法编辑修改大多数文件;linux将内核中所有进程的参数通过/proc
伪文件系统目录向用户空间提供访问查看的入口。每一个进程会以自己的PID号为目录名创建一个目录文件来保持自己的相关信息version
:存放当前系统正在运行内核的版本partitions
:存放当前系统所有挂载磁盘的分区信息meminfo
:存放当前系统的内存信息filesystems
;存放当前系统内核识别出的文件系统的类型信息mounts
:存放当前系统所有的设备挂载信息,内核维持并修改该文件的信息vm/swappiness
:该文件定义了Linux的内存使用机制sys
:该目录下的文件有很多是提供写权限的,即提供了修改内核参数的入口cmdline
:内核启动时传递给内核的参数。每个进程目录下都有一个该文件用来传递参数给内核
-
/sys
:伪文件系统,系统级别的用于配置硬件设备相关的参数 -
/srv
:为服务提供数据存放位置 -
/tmp
:临时文件系统:默认存放30天 -
/usr
:存放应用程序的相关文件shared
: 存放应用程序的说明帮助文档include
:存放应用程序的头文件
-
/var
:存放经常发生变化的文件/var/log
:存放日志文件/var/lock
:存放锁文件/var/cache
:存放缓存文件
reference
https://refspecs.linuxfoundation.org/
https://www.blackmoreops.com/2015/06/18/linux-file-system-hierarchy-v2-0