Linux 目录结构及其含义

Table of Contents

昨天在看《鸟哥的 Linux 私房菜(第三版)》 6.3 节《Linux 目录配置》感触很大,突然间理解了很多东西。 作为一个 Linux 新手,总是不理解 Linux 的目录结构,以及每个目录下该放置那些文件,文件的含义的等等。 本文不是权威的方式来表述,可能在一些理解上会有偏差,不适合老手,只适合刚接触 Linux 不久,对目录结构略感迷茫的新手。

本文以《鸟哥的 Linux 私房菜(第三版)》为准,结合我的 Ubuntu 11.04 目录结构 ,加上我的一些理解来表述。


首先介绍一下 Linux 目录配置标准: FHS。 FHS: Filesystem Hierarchy Standard.

建立这个标准的主要目的是希望让用户可以了解到已安装软件通常放置于那个目录下,所以希望独立的软件开发商、 操作系统制作者以及想要维护系统的用户,都能够遵循 FHS 标准。

1. 根目录(/)的意义与内容

根目录是整个 Linux 系统最重要的一个目录,所有的目录都是由根目录衍生出来的,根目录也与开机、还原、系统修复等操作有关。

FHS 标准建议: 根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但性能较好,根目录所在的文件系统也较不容易发生问题。查看 (/) 的文件结构如下:

0.png

1.1. /bin 目录

放置内容: 系统的可执行文件目录,Linux 系统中有很多放置可执行文件的目录。 但 /bin 比较特殊。=/bin= 放置的是在单用户维护模式下还能够被操作的命令。在 /bin 下面的命令可以被 root 与一般帐号使用。 下面列出 /bin 下文件与目录。

11.png

可以发现常用的 cp, grep, ls, dir, more, rm, cat 等命令都在 /bin 下。

1.2. /boot 目录

放置内容: 这个目录下放置开机会使用到的文件,包括 Linux 内核文件以及开机菜单与开机所配置文件等。

2.png

/grub 是一个目录,继续查看 /grub 目录内容:

3.png

还有很多以 .mod .img .o的文件,我没有全部列出来。我猜测 /grub 文件应该是 Linux 开机引导程序。

1.3. /cdrom 目录是一个空目录,具体含义未知

1.4. /dev 目录

放置内容: 在 Linux 系统上,任何设备与接口都是以文件的形式存在于这个目录中。访问这些文件,就相当于访问某个设备。 查看目录内容:

4.png

硬盘,光驱,鼠标,键盘 都是以文件的方式放在这个目录下。

1.5. /etc 目录

放置内容: 系统的主要配置文件几乎都放置在这个目录下。一般来说,这个目录下的各个文件属性是可以让一般用户查阅的, 但是只有 root 有权利修改。 FHS 建议不要放置可执行文件在这个目录中。查看目录内容:

5.png

一些重要的目录有:

  • /etc/init.d/: 所有服务的默认启动脚本都是放置在这里的。
  • /etc/xinetd.d/: 这就是所谓的的 super daemon 管理的各项服务的配置文件目录。但是在我的 ubuntu /etc/ 下并无此文件。
  • /etc/X11/: 与 X Window 有关的各种配置文件都在这里。

1.6. /home 目录

放置内容: 系统默认的用户主文件夹。每创建一个一般用户帐号,默认的用户主文件夹都会规范到这里来。

1.7. /lib 目录

放置内容: 放置开机时会用到的函数库,以及在 /bin 或 /sbin 下面的命令会调用的函数。 查看目录内容:

6.png

/lib/modules/ 放置内核相关的模块(驱动程序)

1.8. /media 目录

放置内容: 放置可删除的设备。包括软盘、光盘、DVD 等设备都在暂时挂载于此。

1.9. /mnt 目录

放置内容: 挂载某些额外的设备

1.10. /opt 目录

放置内容: 第三方软件放置的目录。如果你想自行安装额外的软件(非原本的 distribution 提供的),那么也能够将你的软件安装到这里来。

在我的 ubuntu 下, /opt/ 中只有 birl 一个文件,因为我安装了一个 birl。

1.11. /root 目录

放置内容: 系统管理员(root)的主文件夹。之所以放在这里,是因为如果进入单用户维护模式而仅挂载根目录时,该文件能够拥有 root 的主文件夹,所以希望 root 的主文件夹与根目录放置在同一个分区中。 只有 root 权限才可以访问 /root 目录。

1.12. /sbin 目录

放置内容: 开机过程中所需要的,里面包括开机、修复、还原系统所需要的命令。 某些服务器软件程序,一般放置到 /usr/sbin/ 当中。本机自行安装的软件所产生的系统执行文件,则放置到 /usr/local/sbin 中。

查看 /sbin 目录:

7.png

1.13. /srv 目录

放置内容: "service" 的缩写,是一些网络服务启动后,这些服务所需要取用的数据目录。常见的服务例如 WWW,FTP 等。

1.14. /tmp 目录

放置内容: 一般用户或者是正在执行的程序暂时放置文件的地方。这个目录任何人都可以访问,所以需要定期清理一下。 查看 /tmp/ 目录:

8.png

1.15. /lost+found 目录

放置内容: 放置 ext2/ext3 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些丢失的片段放置到这个目录下。 这个目录通常会放置在分区的最顶层存在。我的 ubuntu 文件格式为 ext4, /lost+found/ 目录中无内容

(不知道这样的解释对不对?)

1.16. /proc 目录

放置内容: 这个目录本身是一个虚拟文件系统(virtual filesystem)。它放置的数据都是在内存中,例如系统内核、进程、外部设备的状态及网络状态等。 目录下所有数据都是在内存中,所以本身不占任何硬盘空间。 查看 /proc 目录:

8.png

比较重要的有 /proc/dma , /proc/interrupts , /proc/cpuinfo 等。

1.17. /sys 目录

放置内容: 虚拟文件系统,主要记录与内核相关的信息,包括目前已加载的内核模块与内核检测到的硬件设备信息,同样不占硬盘容量。 查看内容:

10.png

2. /usr 的意义与内容

usr: UNIX Software Resource. "Unix 操作系统软件资源" 所放置的目录,不是用户数据。

FHS 建议所有的软件开发者应该将他们的数据合理的放置到这个目录下的子目录,而不是自行新建该软件自己独立的目录。

查看 /usr 目录结构:

111.png

2.1. /usr/bin 目录

放置内容: 绝大部分的用户可使用命令都放在这里。和 /bin 的不同之处在于是否与开机过程有关。

12.png

2.2. /usr/include 目录

放置内容: C/C++ 等程序设计语言(header)与包含文件(include) 放置处,当我们以 tarball 方式安装某些数据时,会使用到里头的许多包含文件。

查看内容:

13.png

看到这,很多做 C/C++ 开发的程序员会不会有种豁然开朗的感觉呢,至少我是这样。

2.3. /usr/local 目录

放置内容: 系统管理员在本机自行安装自己下载的软件,建议安装到此目录,这样方便管理。 /local 中也包括 bin, etc, include, lib 等子目录

2.4. /usr/sbin 目录

放置内容: 非系统正常运行所需要的系统命令。最常见的就是某些网络服务器软件的服务命令(daemon)。

2.5. /usr/share 目录

放置内容: 共享文件,在这个目录下放置的数据几乎是不分硬件架构均可读的数据。

举两个例子:

  1. /usr/share/emacs/site-lisp 是 emacs 加载目录。
  2. 如果你的系统是双系统,假如要修改默认启动项,只需修改 /usr/share/grub/default/grub 文件。

2.6. /usr/src 目录

放置内容: src for source ,一般源码放置到这里。内核源码一般放置到 /usr/src/linux/ 目录下。

查看内容:

14.png

想必不同的 linux-header-* 是由于我升级系统造成的。

3. /var 的意义和内容

如果 /usr 是安装时会占用较大硬盘容量的目录,那么 /var 就是在系统后才会渐渐占用硬盘容量的目录。 因为 /var 主要针对常态性变动的文件,包括缓存,登录文件以及软件运行所产生的文件。

查看目录:

15.png

3.1. /var/cache 目录

放置内容: 应用程序本身运行过程中会产生的一些暂存文件。

3.2. /var/local 目录

放置内容: 程序本身执行过程中,需要使用的数据库文件放置的目录。

3.3. /var/lock 目录

放置内容: 某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况, 因此就要将该设备上锁(lock),以确保该设备只会给单一软件所使用。

3.4. /var/log 目录

放置内容: 登录文件。

3.5. /var/mail 目录

放置内容: 个人电子邮件信箱的目录,不过这个目录也被放置到 /var/spool/mail/ 目录中。通常这两个文件的互为链接文件

3.6. /var/run 目录

放置内容: 某些程序或者服务启动后,会将他们的 PID 放置在这个目录下。

3.7. /var/spool 目录

放置内容: 一些队列数据,这些数据使用后一般会被删除。

4. /selinux 的意义和内容

同样放置内存中的信息,不占用任何硬盘容量。 /selinux 是 Secure Enhance Linux 的执行目录,而 SELinux 是 Linux 内核的重要外挂功能之一,它可以作为具体权限的管理,主要针对程序(尤其是网络程序)的访问权限。

本文完,如有疑惑请查看 《鸟哥的 linux 私房菜(第三版)》 P152 。

First created: 2012-02-03 15:34:19
Last updated: 2022-12-11 Sun 12:49
Power by Emacs 27.1 (Org mode 9.4.4)