FHS,Filesystem Hierarchy Standard,文件系统层次化标准。这是一个推荐标准,能够从 http://www.pathname.com/fhs/ 获取。linux
本文不讨论 FHS,由于它是针对 Unix 发行版提供的一个推荐方案。本文旨在描述 Linux 常见的文件系统层次化结构。vim
虽然不讨论 FHS,但咱们仍然须要知道设计文件系统层次化结构的一些准则,以理解现有结构的设计思路。缓存
咱们知道 /
是文件系统的根目录。在根目录下有:安全
目录 | 用途 | 例子 |
---|---|---|
/boot |
引导程序所需的静态数据 | |
/bin |
基本的用户命令 | /bin/ls |
/sbin |
基本的系统命令 | /sbin/shutdown |
/lib |
连接库和内核模块 | /lib/ld-linux.so.2 |
/opt |
存放第三方的软件包 | |
/etc |
配置文件 | /etc/hostname |
/tmp |
临时文件 | |
/run |
与进程相关的数据 | /run/xxx.pid /run/xxx.sock |
/var |
动态数据 | |
/usr |
常规内容 | |
/root |
root 用户的主目录 | |
/home |
存放其余用户的主目录 | /home/alice |
/bin
/sbin
这里使用“命令”一词,是由于这里的可执行文件都是可以直接运行的。系统命令是指那些应该仅由管理员使用的命令。设计
/lib
可能有一系列变体,里面有对应于特定体系结构的库,如 /lib64/ld-linux-x86-64.so.2
。代理
/opt
里推荐使用这样的目录结构:日志
/opt/<package>/ bin include lib doc man
额外地,不推荐把软件包的配置文件(etc
)和动态数据(var
)放在这里,而是分别放置在 /etc/opt/<package>
/var/opt/<package>
。code
/var
里大体会有:blog
目录 | 用途 | 例子 |
---|---|---|
log |
日志文件 | |
run |
与进程相关的数据 | |
lock |
本地锁 | |
tmp |
临时文件 | |
cache |
缓存数据 | |
lib |
持久化的状态数据 | |
spool |
假脱机代理的数据 | |
backups |
备份数据 | |
crash |
系统崩溃转储信息 | |
opt |
来自 /opt 软件包的可变数据 |
|
local |
来自/usr/local 软件包的可变数据 |
/run
跟 /var/run
通常并没有二致,并且一般其中一个会符号连接到另外一个。游戏
/tmp
跟 /var/tmp
区别在于通常 /tmp
里面的文件会在系统重启后被自动清空,而 /var/tmp
不这样。
/usr
下存放那些并不是系统最基本的常规内容。它包括:
目录 | 用途 | 例子 |
---|---|---|
bin |
用户命令 | /usr/bin/vim |
sbin |
系统命令 | /usr/sbin/useradd |
lib<qual> |
连接库和软件包私有的静态数据文件 | /usr/lib/X11 |
share |
软件包共享的静态数据文件 | |
include |
C 头文件 | /usr/include/stdio.h |
src |
软件包源码 | /usr/src/linux-headers-common |
local |
本地定制的内容 |
各 Linux 发行版提供的软件包管理器通常会将它所管理的各类软件的内容置于 /usr
下。
注意到,这里没有 etc
和 var
,Linux 但愿归属于 /usr
的软件包的配置文件和动态数据被统一收纳在 /etc
/var
内。
/usr/local
默认是空的,用于存放那些系统管理员自定义的内容。这些软件包不受系统和软件包管理器管理,也不会随着系统升级而被覆盖。它包括:
目录 | 用途 |
---|---|
bin |
用户命令 |
sbin |
系统命令 |
lib<qual> |
连接库和软件包私有的静态数据 |
share |
软件包共享的静态数据 |
etc |
软件包配置 |
var |
动态数据 |
include |
C 头文件 |
src |
软件包源码 |
注意到这里有 etc
var
,由于你可能会不但愿自定义的软件包的配置和动态数据跟系统自带的混在一块儿。
/srv
用于存放系统提供的各类服务的数据,如 /srv/ftp
或 /srv/project-1/http
。Ubuntu 上并未使用它,而 Manjaro 使用了。
/lost+found
用于存放文件系统修复时找回的部分文件,这些文件被文件系统修复程序 fsck
发现,可是丢失了引用。
/usr/games
/usr/local/games
用于存储与游戏相关的内容。
对于访问设备、挂载额外的文件系统,在根目录下有:
目录 | 用途 | 例子 |
---|---|---|
/dev |
存放设备的文件抽象 | /dev/null |
/mnt |
存放额外的挂载点 | |
/proc |
Linux 内核状态的文件抽象 |
在如今看来 /media
/mnt
之间的界限没有那么明显,但好久以前的人们是但愿区分他们的:
/mnt
只包含临时的挂载点,在不影响现有系统的状况下存取文件/media
包含可移动设备的挂载点。如 /media/cdrom0
Ubuntu 使用了 /media
而 Manjaro 则使用 /mnt
,可是内容没有本质区别。
理想的状况下,系统管理员能够在不一样的挂载点挂载文件系统的不一样部分,灵活地启用不一样的功能,并给予不一样的访问权限。
一些可能的切分以下:
/
/usr
/usr/local
/opt
/etc
/etc/opt
/var
/var/opt
/run
/tmp
/home
举例来讲,系统管理员在配置完 /usr
下的软件包后,能够以只读模式挂载 /usr
来保证其安全和稳定。
原文连接 https://blog.xupu.name/p/2018-11-linux-filesystem-hierarchy/