一、背景与概念
利用linux操作系统来做开发的公司、团队和个人越来越多,所以为了规范大家在使用linux操作系统时对档案目录的命名以及不同目录下放置哪种文件。Linux官方提出了FHS标准并希望大家都遵循这个标准进行设计工作。
二、主要内容
2.1 文件分类
FHS将文件分为4种类型:可分享、不可分享、可变动、不可变动。
1)可分享:可以分享给其他系统的挂载来使用的文件;
2)不可分享:只与当前机器有关的文档,不适合分享给其他主机;
3)可变动:需要经常改变的数据或文档;
4)不可变动:如函式库、文件说明 文件、系统管理员所管理的主机服务配置文件等等;
典型目录的文件类型:
|------|----------------------|-----------------|
| | 可分享 | 不可分享 |
| 不可变动 | /usr(放置用户软件) | /etc(配置文件) |
| 不可变动 | /opt(第三方协议软件) | /boot(启动核心文件) |
| 可变动 | /var/mail(用户信箱) | /var/run(程序相关) |
| 可变动 | /var/spool/news(新闻组) | /var/lock(程序相关) |
2.2 FHS定义的目录
FHS标准的定义了三层目录以及目录下应该放置什么样的数据文档:
1)/(根目录):与开机有关的文档;根目录的所在磁盘分区大小应该越小越好,越小越能避免放入过多的其他数据,越能减少出错的机会;
2)/usr:与软件安装/执行相关;
3)/var:与系统运作过程有关;
2.2.1 根目录
FHS推荐根目录下包含以下次目录:/bin、/boot、/dev、/etc、/home、/lib、/media、/mnt、/opt、/root、/sbin、/srv、/tmp。
下面表格对各次目录进行了说明:
|------------|------------------------------------------------------------------------------------------------------------------|
| 目录 | 说明 |
| /bin | 系统指令文件,如cat,chmod,chown,date等命令都放在这个目录下 |
| /boot | 开机程序,如果使用了grub开机管理程序则会有/boot/grub目录 |
| /dev | 任何接口设备或装置都是以文档的方式存于这个目录下的 |
| /etc | 操作系统的配置文件,只有root有权利修改,其他用户都只能查看。 |
| /home | 这是系统默认的用户家目录。在新增一个一般使用者账号时, 默认的用户家目录都会规范到这里来。比较重要的是,家目录有两种映射 :① ~:代表目前这个用户的家目录;② ~dmtsai :则代表 dmtsai 的家目录! |
| /lib | 系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin 或 /sbin 底下的指令会呼叫的函式库 |
| /media | 媒体的设备文档的挂载目录; |
| /mnt | 额外的设备挂载目录,如一些自定义的设备 |
| /opt | 第三方协议软件放置的地方。如果妳想要自行安装额外的软件(非原本的 distribution 提供的),那么也能够将你的软件安装到这里来 |
| /root | 系统管理员(root)的家目录 |
| /sbin | 存放开机过程中设置linux操作系统环境的命令文档;linux系统中有非常多指令用于设置系统环境,这些指令只有root可以使用,其他用户只能查询。 |
| /srv | 可以视为**"service"**的缩写,拥有放置网络服务启动后所需要的数据 |
| /tmp | **"temporary"**缩写存放临时文件和数据,需要定期清理,且操作系统在开机时一般会删除里面的内容 |
FHS 针对根目录所定义的标准就仅有上面的内容,那还有一些目录值得我们注意如下所示:
|-----------------|--------------------------------------------------------------------------------------------------------|
| 目录 | 说明 |
| /lost+found | 这个目录是使用标准的ext2/ext3 文件系统格式才会产生的一个目录,目的在于当 文件系统发生错误时, 将一些遗失的片段放置到这个目录下。 |
| /proc | 这个目录存放的是虚拟数据,是内存中的数据,实际不占用硬盘空间;其中有一些较重要的子目录:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports等 |
| /sys | 这个目录其实跟/proc 非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。 |
值得注意的是根目录的挂载是在开机时进行的,其他目录挂载是在开机后陆续进行的,所以有些开机过程需要的命令,程序等所在的目录必须放在根目录下:① /etc(配置文件);② /bin(重要指令可执行文件);③ /dev(开机要使用的设备);④ /lib(/bin中文件执行所需要的函式库);⑤ /sbin(设置开机过程环境变量)
2.2.2 /usr
usr 指的是Unix Software Resource并非User。这个目录属于可分享但不可变动类型,如其名所示是Unix的软件资源存放目录,不再是存放的用户的数据了,更像是官方的数据。
/usr下的FHS建议目录如下:
|-------------------|--------------------------------------------------------------------|
| 目录 | 说明 |
| /usr/bin/ | 存放了绝大多数用户所需的指令,与/bin的区别在于是否是开机过程中所需要的指令文档。 |
| /usr/include/ | C/C++语言可是用的head头文件 |
| /usr/lib | 包含各应用软件的函式库、目标档案(object file) |
| /usr/local | 系统管理员在本机自行安装自己下载的软件(非 distribution 默认提供者),建议安装到此目录, 这样会比较便于管理 |
| /usr/sbin/ | 非系统正常运作所需要的系统指令,只放系统管理和后台服务程序相关指令,如usermod、groupadd、useradd等命令 |
| /usr/share/ | 共享文件,全是文本文件。 |
| /usr/src/ | 源码放置区域,src可理解为source;核心源码建议放在/usr/src/linux/下 |
2.2.3 /var
/var 目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file) 以及某些软件运作 所产生的档案, 包括程序档案(lock file, run file) ,或者例如MySQL 数据库的档案等等。常见次目录如下表所示:
|----------------|-------------------------------------------------------------------------------------------------------------|
| 目录 | 说明 |
| /var/cache | 应用程序运行中产生的暂时性文件 |
| /var/lib | 程序本身执行的过程中,需要使用到的数据文件放置的目录。这个目录下每一个软件都有自己的目录。 |
| /var/lock | 某些设备或者是档案资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时, 就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用。 |
| /var/log | 非常重要的登陆数据,如**/var/log/messages** 和**/var/log/wtmp** 分别存放系统的通用综合日志和所有用户登录、登出、系统重启、关机的历史会话记录 |
| /var/mail | var/spool/mail与该目录互为链接目录 |
| /var/run | 某些程序或者是服务启动后,会将他们的PID放置在这个目录下 |
| /var/spool | 队列数据,举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。 |
2.2.4 不同distribution的FHS有所区别
由于 FHS 仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的档案或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。
举例来说,CentOS 的网络设定数据放在 /etc/sysconfig/network-scripts/ 目录下,但是 SuSE 则是将网络放置在 /etc/sysconfig/network/ 目录下,目录名称是不同的。