Linux 目录配置标准与结构

目录配置标准

Linux 采用将文件储存在单个目录结构中,这种目录被称为虚拟目录(Virtual Directory)。虚拟目录将安装在主机上的所有储存设备的文件路径纳入单个目录结构中。

各种发行版遵循同一套文件系统层次结构标准(FHS,Filesystem Hierarchy Standard),目的在于规范每个特定目录应该放什么数据。FHS 依据文件系统使用的频繁与否,以及是否允许使用者随意变更,将目录定义为四种交互形态:

  • 可分享的(Shareable)

    可以分享给其他系统挂载使用的目录,包括可执行文件与使用者的邮件等数据。

  • 不可分享的(Unshareable)

    自己机器上面运行的设备文件或者是与程序有关的 socket 文件等,仅能自己使用,所以不适合分享。

  • 不变的(Static)

    有些数据是不会经常变动的,例如函数库、文件说明文档、系统管理员所管理的主机服务配置文件等。

  • 可变动的(Variable)

    经常改变的数据,例如日志文件等。

顶级目录

所有目录都由根目录/衍生而来,因此 FHS 标准建议根目录所在分区应该越小越好,最好不要将应用程序所安装的软件与根目录放在同一个分区。这样可以提高性能,根目录所在的文件系统也较不容易发生问题。

开机过程中仅有根目录会被挂载,其他分区则是在开机完成后陆续进行挂载。

必须存在的顶级目录:

目录 目录说明
/bin 二进制目录,存放可以被 root 和一般账户所用的命令,以及在单用户维护模式下仍能被操作的常用命令,如 catmvchown 等。
/boot 启动目录,存放开机会使用到的文件,包括内核文件及开机所需配置文件。
/dev 设备目录,Linux 上任何设备与接口设备都是以文件的形式存在于这个目录下,访问目录下的某个文件就等于访问某个设备。主要分为三类硬件,例如硬盘(sda)和打印机(lp0),终端如控制台(tty),伪设备如 /dev/null/dev/zero
/etc 系统配置文件目录,系统配置文件几乎都放在这里,如账号密码,服务起始文件等。一般不要放可执行文件到这个目录下。
/etc/X11:与 X Window 有关的配置文件放在这里,尤其是 xorg.conf 这个 XServer 的配置文件。
/etc/opt:放置第三方软件配置文件。
/etc/sgml:与 SGML 格式有关的各项配置文件。
/etc/xml:与 XML 格式有关的配置文件。
/home 主目录,系统默认用户主文件夹,一般子文件夹以用户账号命名。
/lib/lib64 库目录,存放开机时会用到的函数库,以及在 /bin/sbin 中命令会调用的函数库。
/lib/modules/:存放内核相关的模块(驱动程序)。
/media 媒体目录,存放可删除设备,包括 CD、DVD、U 盘等设备都暂时挂载于此。
/mnt 挂载目录,如果想要暂时挂载某些额外的设备,一般放置到这个目录中。
/opt 可选目录,给第三方软件放置的目录,包括发行版附加的一些软件包。
/root 系统管理员的主文件夹。
/sbin 系统二进制目录,只有 root 可用,包括开机,修复,还原系统所需要的系统命令,如 fdiskifconfiginit 等。
/srv 服务目录,一些网络服务启动后,这些服务所需要取用的数据目录,如将 www 服务需要的网页文件放置到 /srv/www 里。
/tmp 临时目录,重要数据不可放置到此目录,会被一些系统进程定期清空。
/run 运行目录,存放系统运作时的运行时数据。

其他重要目录:

目录 目录说明
/lost+found 只有 ext 文件系统格式才会产生的目录,用来放置丢失的文件片段。
/proc 进程目录。这个目录本身是一个虚拟文件系统(Virtual Filesystem),它放置的数据都在内存中,如系统内核、进程、外部设备的状态及网络状态等,所以实际不占任何硬盘空间。
/sys 系统目录。和 /proc 类似的虚拟文件系统,记录与内核相关信息,包括目前已加载的内核模块与硬件设备信息。

/usr 目录

/usr 目录存放静态数据,即不会随时间改变的文件,原则上放置独立安装的软件数据。系统默认软件也放在 /usr 目录下。

/usr 目录下的子目录说明:

目录 目录说明
/usr/bin/ 存放所有的用户命令。
/usr/include/ 存放 C/C++ 等编程语言的头文件(header)和包含文件(include)。
/usr/lib/ 存放各种应用软件的函数库、目标文件,以及一般用户不使用的执行文件或脚本。
/usr/local/ 推荐系统管理员自行下载安装的软件存放目录。
/usr/sbin/ 存放非正常运行所需的系统命令,例如网络服务器软件的服务命令。
/usr/share/ 存放共享文件,如 man 手册和 doc 帮助文档。
/usr/src/ 一般建议将源码放在该目录下。内核源码建议放在 /usr/src/linux/ 下。
/usr/libexec/ 存放某些不被一般使用者惯用的可执行文件或脚本。

/var 目录

/var 目录是用来存放会经常变动的文件的,包括缓存(cache)、日志文件(log file)以及某些软件运行时所产生的文件(lock file、run file)或 MySQL 数据库的文件等等。最好可以将它独立出来挂在单独的一个分区中。

/var 目录下的子目录说明:

目录 目录说明
/var/cache/ 应用程序本身运行过程中会产生一些暂存文件。
/var/lib/ 程序执行的过程中需要使用到的数据文件的放置目录。在此目录下各自的软件应该要有自己的目录,例如 MySQL 数据库放置到 /var/lib/mysql/ 下。
/var/lock/ 某些设备或文件资源一次只能被一个应用程序所使用,为了避免使用冲突就得给该设备上锁。例如刻录机设备在刻录中时会被锁上。目前此目录已被挪到 /run/lock/ 中。
/var/log/ 日志文件放置的目录,例如记录登录者信息的文件 /var/log/messages/var/log/wtmp
/var/mail/ 放置个人电子邮件信箱的目录,等同于 /var/spool/mail/
/var/run/ 某些程序或服务启动后,会将它们的 PID 放置在这个目录下。
/var/spool/ 放置一些队列数据,通常在使用后会被删除。