本文主要内容来源和修改自 FHS 3.0 和 《鸟哥的私房菜基础学习篇(第四版)》
虽然 Linux 系统的发行版众多,但他们的目录配置却看起来都差不多,那是因为,大多数 Linux 发行版都遵循了文件系统层次结构标准(Filesystem Hierarchy Standard,FHS),FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。
FHS 定义了两层规范:
第一层是根目录(/)下面的各个目录应该要放什么文件数据,例如 /etc应该要放置设置文件,/bin 与 /sbin 则应该要放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登录文件、/usr/share 放置共享数据等等。
一、根目录(/)下面的各个目录应存放文件数据的规范
目录 | 存放文件内容 |
---|---|
/bin | 在单人维护模式下(类似windows系统的安全模式)还能够被操作的命令。 |
/boot | 引导 boot loader 的静态文件。这个目录主要在放置开机会使用到的文件,包括 Linux 核心文件、开机选项以及开机所需配置文件等等。 |
/dev | 设备文件。在 Linux 系统上,任何硬件与接口设备都是以文件的型态存在于这个目录当中的。该目录下必须有的几个特殊的设备:/dev/null 空设备,写入此设备的所有数据都将被丢弃,而从此设备读取将返回 EOF 状态;/dev/zero 零设备,如我们可以通过 dd 命令向文件或设备写入无穷无尽的0;/dev/tty 特指当前终端设备 |
/etc | 系统配置文件。一般来说,这个目录下的各文件属性是可以让一般使用者查看,但只有 root 用户有修改权限。FHS建议不要放置可执行文件(binary)在这个目录中。另外 FHS 还规范几个重要的目录最好也存放在 /etc 目录下: - /etc/opt(必要):第三方软件 /opt 的相关配置文件 - /etc/X11/(建议):与 X Window 有关的各种配置文件,尤其是 xorg.conf 这个 X Server 的配置文件。 /etc/sgml/(建议):与 SGML 格式有关的各项配置文件 - /etc/xml/(建议):与 XML 格式有关的各项配置文件 |
/lib | 基本共享库和内核模块。存放在开机时会用到的函数库以及在/bin 或/sbin 目录下目录所需调用的函数库。而必须存在的目录 /lib/modules/ 则存放的是一些内核模块(驱动程序)。 |
/media | 可移动媒体挂载点。软盘、光盘、DVD 等可移动媒体设备一般就挂载在此目录。 |
/mnt | 临时文件系统的挂载点。 |
/opt | 第三方软件。如QQ、Kingsoft等一些独立的第三方软件就放置在此目录。 |
/run | 进程运行过程中的相关数据。 |
/sbin | 开机过程所用到的命令。存放了一些开机、修复、还原系统等所需要的命令。而一些自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中。 |
/srv | 系统提供的服务数据。srv 可以视为 service 的缩写,是一些网络服务启动之后所需要的数据通常就存放在此。常见的服务例如 WWW, FTP 等等。 |
/tmp | 临时文件。这是供普通用户或者是正在执行的程序暂时放置文件的地方。该目录完全开放,任何人都能够读、写和执行。 |
/usr | 第二层次结构。 |
/var | 可变数据。主要存放经常变化的文件,如日志。该目录也属于第二层次结构,对于该目录内的存放文件也有规范。 |
如果安装了相应的子系统,则以下目录或目录的符号链接必须位于根目录(/) :
目录 | 存放文件内容 |
---|---|
/home | 这是系统默认的用户家目录(home directory)。在你新增一个普通用户时,默认的用户家目录都会规范到这个目录。 |
/lib<qual> | 用来存放与 /lib 不同的格式的二进制函数库,例如支持 64 位的 /lib64 函数库等 |
/root | 系 统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有 root 的家目录,所以我们会希望 root 的家目录与根目录放置在同一个分区槽中。 |
二、/usr 下面的各个目录应存放文件数据的规范
这里的 usr 并不是user 的意思,而是 Unix Software Resource (Unix 操作系统软件资源)的缩写。/usr 是文件系统的第二层次结构,存放的是一些可共享的只读数据。
目录 | 存放文件内容 |
---|---|
/usr/bin/ | 系统上可执行命令的主目录。所有普通用户能够使用的命令都放在这里。目前 CentOS 7 、ubuntu 等发行版系统已经将全部的用户指令放置于此,然后将 /bin 链接至此,也就是说,/usr/bin 与 /bin 是一模一样了。此目录下不能有子目录。 |
/usr/lib/ | 库文件。包括目标文件和库。在某些系统上,它还可能包含不打算由用户或 shell 脚本直接执行的内部二进制文件。一些应用程序的专用数据必须放置在此目录下所对应的子目录中。通常,/lib 也是链接到此目录中的。 |
/usr/local/ | 本地层次结构。系统管理员在本机自行安装的软件通常安装在此,确保系统软件更新时不会覆盖他们,该目录下也有 bin, etc, include, lib…等子目录。 |
/usr/sbin/ | 非至关重要的系统二进制文件。此目录包含系统管理员专用的所有非必要的二进制文件。如系统修复、系统还原、挂载 /usr 或其他基本功能所需要的系统管理程序必须放置在/sbin中。不过因为基本功能与 /sbin 也差不多,随意目前 /sbin 也是链接到此目录中。 |
/usr/share/ | 与架构无关的数据。主要存放所有不依赖体系结构的只读的数据文件,当然也包括共享文件。几乎都是一些文本文件。在此目录下常见的还有这些子目录: /usr/share/man 联机帮助文件; /usr/share/doc 软件杂项的文件说明; /usr/share/zoneinfo 与时区有关的时区文件。 |
/usr/games/ | 游戏和教育方面的二进制文件。 |
/usr/include/ | 标准头文件的目录。通常放置系统中通用 C/C++ 等语言的头文件。 |
/usr/libexec/ | 其他程序运行的二进制文件。某些不被一般使用者惯用的执行文件或脚本(script)通常会存放在此目录中。 |
/usr/lib<qual>/ | 功能与 /lib<qual>/功能相同,因此目前 /lib<qual> 就是链接到此目录中的。 |
/usr/src/ | 源代码。 |
三、/var 下面的各个目录应存放文件数据的规范
/var 也是文件系统的第二层次结构,存放的是一些可变的(variable)数据文件,这些数据文件有的可共享,有的则不可共享(如一些程序数据)。
如果理解 /usr 为安装软件时会占用较大硬盘容量的目录,则可以理解 /var 为在系统运作后会逐渐占用硬盘容量的目录。
目录 | 存放文件内容 |
---|---|
/var/cache/ | 应用程序缓存数据。存储的是应用程序本身运行过程中所产生的一些缓存数据。 |
/var/lib/ | 可变状态信息。存放的时应用程序本身运行时所需要用到的一些数据文件。在此目录下不同的软件对应着不同的子目录。 |
/var/lock/ | 锁文件。某些设备或者文件资源一次只能被一个应用程序所使用,因此就得要将该设备上锁(lock),以确保该装置只会给单一软件所使用。现在,这些锁文件目录已经移到了 /run/lock 中,而 /var/lock/ 则是链接到了 /run/lock 中。 |
/var/log/ | 日志文件和目录。此目录包含其他日志文件。 大多数日志必须写入此目录或相应的子目录。几个重要的子目录:/var/log/messages 记录守护进程的一些信息;/var/log/wtmp 记录所有登录和注销信息;/var/log/lastlog 记录每个用户上次登录的记录。 |
/var/local | /usr/local 可变数据。 |
/var/opt | /opt 可变数据。 |
/var/run/ | 与运行进程相关的数据。此目录曾用于描述系统自引导以来的关于系统运行进程的信息数据,目前已移至/run ,继续保留这个目录是为了确保与使用此规范的旧版本的系统和软件兼容。 |
/var/mail/ | 用户邮箱文件。放置个人电子邮件信箱的目录,目前,这个目录已被移到/var/spool/mail/目录中了。 |
/var/spool/ | 待处理程序数据。该目录包含等待稍后处理的数据。因此,该目录中的数据表示将来要完成的工作(由程序、用户或管理员完成),这些数据在工作结束后通常会被删除。 |
四、其他关于 linux 操作系统的目录
目录 | 存放文件内容 |
---|---|
/proc | 内核和进程虚拟文件系统信息。该目录内的文件信息通常是系统内核、进程、外部设备及网络状态等虚拟文件的系统信息。 |
/sys | 内核和系统虚拟文件系统信息。sys文件系统是公开有关设备、驱动程序、一些内核特性信息的位置。注意 /sys 与 /proc 类似但又有区别。 |
更详细的了解文件系统层次规范,需要进一步深入学习 FHS 。