参考资料:FHS
简介
FHS目前发展到3.0版本,发布于2015年6月3日,由Linux基金会在负责维护。它规定了Linux的文件层级结构,使得各Linux发行版、软件开发商知道应该将哪些文件放在哪些目录下,也方便了用户去查找。
根文件系统:/
根文件系统用于引导、还原(restore)、恢复(recovery)、和/或修复(repair)系统。
根文件系统要在合理范围内设计得尽可能的小巧。
禁止在根文件系统下创建文件或者目录。
根下必须存在的目录
/bin
binary
必要的二进制命令程序。
一般是包含了系统管理员和普通用户都可以执行的命令。不可以包含子目录。
/boot
此目录包含了引导操作系统时候的需要的任何文件,不包括引导时候不需要的配置文件以及映射安装器(map installer)。因此boot目录中存储的数据是在内核开始执行用户空间程序之前就会被用到。这可能会包含主引导扇区和扇区映射文件。
如果某个程序需要被引导装载程序用于引导某个文件的话,那么它必须被放置在/sbin目录下。在引导时非必须的引导装载程序所使用的配置文件必须被放置在/etc目录下。
操作系统内核必须被放置在/或者/boot目录下。
某些特定的架构可能会在/boot目录下有自己特有的要求,比如放一些自己专属的文件等。
/dev
device
用于放置特殊或者设备文件;设备文件有分为字符设备(键盘等)和块设备(硬盘等)。
如果在/dev目录中的设备需要手工创建的话,那么/dev目录下必须有MAKEDEV命令用于创建设备。可能还会包含MAKEDEV.local文件用于本地设备。
如有必要,MAKEDEV必须有能力在系统上创建所有可能被发现的设备,而不仅仅针对某个特定的发行版上所能发现的设备。
/etc
etc目录用于存放配置文件。它是一个层级结构。配置文件是用于控制程序的行为的本地文件;它必须是静态的并且不可以是可执行的二进制程序。
一般建议将配置文件放置在/etc的子目录下,例如/etc/nginx/或者/etc/ssh/,而不是直接放置在/etc目录下。
/lib
library
包含了/bin和/sbin所需要的共享库以及内核模块。
在/lib目录下至少可以看到以下某一种文件名模式(它们可以是文件或者字符链接):
- libc.so.*:动态链接的C库。
- ld*:执行时链接器/装载器。
如果相关的子系统有安装的话,那么可能还会存在modules目录,用于存放可加载的内核模块。
/media
此目录下的子目录用于便携式媒体的挂载点,例如软盘(/media/floppy)、光盘(/media/cdrom)、刻录机(/media/cdrecorder)和zip驱动(/media/zip)。
/mnt
mount
系统管理员临时挂载的的文件系统。此目录的内容是本地问题,不应该影响任何在运行的程序。
/opt
optional
用于存放应用程序软件包的插件。
被安装在/opt目录中的软件包,必须将其静态文件放置在单独的/opt/
在CentOS 7中,这个目录基本是空的。CentOS系列基本不会使用到此目录,不太需要关注。
/run
运行中的进程相关的数据,主要用于存放进程的PID文件。PID文件的文件名必须是<program_name>.pid的格式,例如crond的PID文件是/run/crond.pid。
/run目录所提供的功能,以前是由/var/run所提供的。由于向后兼容性的存在,应用程序使用/var/run也是允许的。但是不可以两个都使用。在CentOS 7上,/var/run --> ../run。
普通用户不应该对/run目录具备写的权限。
/sbin
系统管理员所使用的二进制程序,存放于/sbin、/usr/sbin和/usr/local/sbin。
此目录下不可以有子目录。
/src
为系统服务所提供的数据。
在CentOS 7上,此目录是空的。
/tmp
临时文件
/usr
/usr目录是仅次于根目录的第二大层级结构。它是共享的、只读的。意味着它在FHS兼容的主机间是应该被共享的并且不可以被写入。任何主机特定的或者随时间变化的数据应该被存储在其他的地方。
多数软件包不可以直接使用/usr下的子目录。
以下目录是必须的:
- bin:大多数用户二进制程序。
- lib:库文件。
- local:本地的一个层级结构,在主安装之后是空的。
- sbin:非关键的系统二进制程序。
- share:架构独立的数据。man手册即位于此目录下/usr/share/man/。
/var
/var目录包含变化的数据文件。包含spool目录和文件,管理性的和日志数据,以及短暂的临时的文件。
/var目录的某些部分无法在系统间共享。例如,/var/log、/var/lock和/var/run。其他部分是可以共享的,尤其是/var/mail、/var/cache/man、/var/cache/fonts和/var/spool/news。
这里说明的/var是为了使得可以只读挂载/usr。任何事物一旦在系统操作的时候被写入/usr,那么就一定会存在于/var中(与安装和软件维护完全不同)。
如果/var不是一个独立的分区的话,那么更倾向于将/var移出根分区,放入/usr分区(通常这么做是为了减小根分区的空间或者当根分区剩余空间不足的时候)。无论如何,不可以将/var链接至/usr,这样会使得/var和/usr难以独立存在,而且有可能会造成命名冲突。取而代之的是,可以将/var链接至/usr/var。
应用程序通常不应该在/var的子目录下创建目录。这类的目录应该当且仅当具备一些系统范围的牵连,并与FHS邮件列表协商只有,才可以添加。
/var/lib
这个目录需要留意。这里的lib并不是library的缩写,并不是表示库文件。这里面存储的是应用程序的状态信息数据。状态信息数据指的是应用程序在运行时会改动的数据,并且属于某个特定的主机。
根下可选的目录
/home
普通用户家目录,它是一个可选的目录,并非每一个发行版都会包含。因此应用程序不应该存放在该目录下。
用户特有的针对某个应用程序的配置文件存放在用户家目录中,文件名以“.”开始(隐藏文件)。如果某个应用程序需要放置的隐藏配置文件不止一个,那么就应该创建一个隐藏目录。隐藏目录里面的配置文件就不需要是隐藏的了。
/lib
一般是lib64,根据操作系统的位数决定是否存在此目录。
/root
root用户家目录
重要的虚拟文件系统
/proc:内核和进程信息虚拟文件系统。
proc文件系统是实际上的用于处理进程和系统信息的标准Linux方法,而不是/dev/kmem和其他类似的方法。我们强烈建议将此目录作为存储和检索进程、内核以及内存信息的目录。
/sys:内核和系统信息虚拟文件系统。
sys文件系统存放的是关于设备、驱动程序和一些内核特性的信息。它的底层结构由当前使用的Linux内核决定,在其他方面没有明确规定。