type
status
date
slug
summary
tags
category
icon
password
Property
FHS 是 File System Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux 版本采用这种文件组织形式,类似于 Windows 操作系统中 c 盘的文件目录,FHS 采用树形结构组织文件。FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
根据 FHS(Filesystem Hierarchy Standard) 的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下,重点在于规范每个特定的目录下应该要放置什么样的数据。
FHS 标准根据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用形态:
- 可分享的:可以分享给其他系统挂载使用的目录
- 不可分享的:与自身机器直接相关的设备文件等,不能分享给其他主机
- 不变的:数据不常变动的文件
- 可变动的:经常改变的数据,如登录文件、新闻组等。
事实上,FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是下面这三个目录的定义:
/ (root, 根目录)
:与开机系统有关
/usr (unix software resource)
:与软件安装/执行有关
/var (variable
):与系统运行过程有关
目录名称 | 应放置文件的内容 |
/boot | 开机所需文件—内核、开机菜单以及所需配置文件等 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户主目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方的软件 |
/root | 系统管理员的家目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
根目录
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心文件、开机所需程序、函数库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要,所以在FHS的要求方面,希望根目录不要放在非常大的分区内, 因为越大的分区会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会。
因此FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
有鉴于上述的说明,因此FHS定义出根目录(/)下面应该要有下面这些次目录的存在才好,即使没有实体目录,FHS也希望至少有链接文件存在才好:
/bin
:bin
是Binary
的缩写,放置可执行文件/命令。系统有很多放置可执行文件的目录,但/bin
比较特殊,放置的是在单人维护模式下还能够被操作的指令。 在/bin
下面的指令可以被root与一般帐号所使用,主要有:cat, mv, mkdir, cp, bash
等常用指令:
/boot
:放置开机会使用到的文件,包括 Linux 内核文件以及开机菜单与开机所需配置文件等。Linux kernel常用的文件名为:vmlinuz,如果使用的是grub2这个开机管理程序, 则还会存在/boot/grub2/
这个目录。
/dev
:dev
是device
的缩写,以文件的形式保存 Linux 所有的设备及接口设备,鼠标、键盘等等设备也都可以在这里找到。
/etc
:系统主要的配置文件几乎都放置在这个目录内,例如人员的帐号密码档、 各种服务的启始档等等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有root有权力修改。- /etc/opt:放置第三方协力软件 /opt 的相关配置文件
- /etc/X11/:与 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 X Server 的配置文件。
- /etc/sgml/:与 SGML 格式有关的各项配置文件
- /etc/xml/:与 XML 格式有关的各项配置文件
比较重要的文件有: /etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue 等等。另外FHS还规范几个重要的目录最好要存在/etc/目录下:
/home
:系统默认的使用者主文件夹。在新增一个一般使用者帐号时, 默认的使用者主文件夹都会规范到这里来。主文件夹有两种代号:~
代表目前这个使用者的主文件夹;~dmtsai
代表 dmtsai 的主文件夹!
/lib
:lib
是 Library 的缩写,类似于 Windows 系统中存放dll
文件的库,主要放置系统开机使用的、/bin
和/sbin
目录下的命令使用的库函数。另外 FSH 还要求/lib/modules/
这个目录必须要存在,这个目录主要放置可抽换式的核心相关模块(驱动程序)。
/media
:下面放置的是可移除的设备啦, 包括软盘、光盘、DVD等等设备都暂时挂载于此。
/mnt
:这也是和设备挂载相关的一个文件夹,一般是空文件夹。media
文件夹是系统自动挂载设备的地方,这里是手动挂载设备的地方。比如说,在dev
中看到了一大堆设备,如果想打开某些设备看看里面的内容,就可以通过命令把设备挂载到mnt
目录进行操作。不过一般来说,现在的操作系统已经很聪明了,像挂载设备的操作几乎都不用你手动做,都被自动挂载到media
目录了。
/opt
:第三方软件放置的目录。
/proc
:这个目录是一个虚拟文件系统,它放置的数据都是在内存当中,例如进程、外部设备状态、网络状态等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间。
/root
:root 用户的主目录。
/sbin
:sbin
是System Binary 的缩写。Linux有非常多指令是用来设置系统环境的,这些指令只有root才能够利用来“设置”系统,其他使用者最多只能用来“查询”而已。 放在/sbin
下面的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/
当中。至于本机自行安装的软件所产生的系统可执行文件(system binary), 则放置到/usr/local/sbin/
当中了。常见的指令包括:fdisk, fsck, ifconfig, mkfs
等等。
/srv
:srv
是service
的缩写,主要放置与网络服务相关的文件数据。常见的服务例如WWW
,FTP
等等。对于桌面版 Linux 系统,这个文件夹一般是空的,但是对于 Linux 服务器,Web 服务或者 FTP 文件服务的资源可以存放在这里。
/sys
:这个目录跟/proc
非常类似,也是一个虚拟的文件系统,记录核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦测到的硬件设备信息等等。同样不占硬盘容量。
/tmp
:让一般用户或者正在执行程序暂时放置文件的地方。当然,tmp
文件夹在系统重启之后会自动被清空,如果没有被清空,说明系统删除某些文件失败,也许需要手动删除一下。
在根目录下,还有两个目录,分别是 /usr、/var。
/usr 目录
usr 其实是 UNIX Software Resource 的全称,即 UNIX 操作系统软件资源。FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录。
一般来说,
/usr
下的子目录有:/usr/bin/
:绝大部分的用户命令都在此处,它与/bin目录的区别在于后者存放与开机相关的命令。
/usr/include/
:C/C++的头文件和包含文件。
/usr/lib/
:包含各应用软件的函数库、目标文件,以及一些不被用户惯用的执行文件。
/usr/local/
:系统管理员在本机自行下载的软件。
/usr/sbin/
:非系统正常运行需要的系统命令。
/usr/share/
:放置共享文件的地方
/usr/src/
:源码放置的地方
/var 目录
/var
目录下主要放置常态化变动的文件,例如缓存、登录日志文件、软件运行产生的文件等。/var
下的子目录常见有:/var/cache/
:应用程序运行过程中产生的暂存文件。
/var/lib/
:应用程序运行过程中,需要使用到的数据文件放置的目录。
/var/lock/
:某些设备或文件要求使用时具有排他性,即上锁,该目录存放这类设备文件。
/var/log/
:日志或登录文件放置的目录。
/var/mail/
:放置个人电子邮件的目录。
/var/run/
:某些程序或者是服务启动后,将它们的 PID 记录在这个目录下
/var/spool/
:这个目录通常会放置一些队列数据,包括等待收寄的电子邮件、cron 任务等。