# Linux 目录结构说明

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击[联系博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

## Linux 根目录（/）

Linux 系统的根目录（/）最为重要（没有之一），其原因有以下 2 点：

1. 所有目录都是由根目录衍生出来的；
2. 根目录与系统的开机、修复、还原密切相关；

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-MS1Dz0ShKo9JGQs_IWt%2F-MS1E9EAX4LPEPAMlKcX%2Fimage.png?alt=media\&token=54412caa-2dff-434d-a478-30845ce82b9a)

在Linux文件系统中有两个特殊的目录，一个用户所在的工作目录，也叫当前目录，可以使用一个点 **.** 来表示；另一个是当前目录的上一级目录，也叫父目录，可以使用两个点 **..** 来表示。

* &#x20;`.` ：代表当前的目录，也可以使用 ./ 来表示；
* &#x20;`..` ：代表上一层目录，也可以 ../ 来代表。

如果一个目录或文件名以一个点 . 开始，表示这个目录或文件是一个隐藏目录或文件(如：.bashrc)。即以默认方式查找时，不显示该目录或文件。

## Linux一级目录及其作用

### **系统启动必须：**

* **/boot：**&#x5B58;放的启动Linux 时使用的内核文件，包括连接文件以及镜像文件。
* **/etc：**&#x5B58;放**所有**的系统需要的**配置文件**和**子目录列表，**&#x66F4;改目录下的文件可能会导致系统不能启动。
* **/lib**：存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
* **/sys**： 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中

### **指令集合：**

* **/bin：**&#x5B58;放着最常用的程序和指令
* **/sbin：**&#x53EA;有系统管理员能使用的程序和指令。

### **外部文件管理：**

* **/dev ：**&#x44;evice(设备)的缩写, 存放的是Linux的外部设备。**注意：**&#x5728;Linux中访问设备和访问文件的方式是相同的。
* **/media**：类windows的**其他设备，**&#x4F8B;如U盘、光驱等等，识别后linux会把设备放到这个目录下。
* **/mnt**：临时挂载别的文件系统的，我们可以将光驱挂载在/mnt/上，然后进入该目录就可以查看光驱里的内容了。

### **临时文件：**

* **/run**：是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录，应该让它指向 run。
* **/lost+found**：一般情况下为空的，系统非法关机后，这里就存放一些文件。
* **/tmp**：这个目录是用来存放一些临时文件的。

### **账户：**

* **/root**：系统管理员的用户主目录。
* **/home**：用户的主目录，以用户的账号命名的。
* **/usr**：用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录。
* **/usr/bin：**&#x7CFB;统用户使用的应用程序与指令。
* **/usr/sbin：**&#x8D85;级用户使用的比较高级的管理程序和系统守护程序。
* **/usr/src：**&#x5185;核源代码默认的放置目录。

### **运行过程中要用：**

* **/var**：存放经常修改的数据，比如程序运行的日志文件（/var/log 目录下）。
* **/proc**：管理**内存空间！**&#x865A;拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改。

### **扩展用的：**

* **/opt**：默认是空的，我们安装额外软件可以放在这个里面。
* **/srv**：存放服务启动后需要提取的数&#x636E;**（不用服务器就是空）**

\
因此，根目录必须包含开机软件、核心文件、开机所需程序、函数库、修复系统程序等文件，如表 1 所示。

| 表 1     | Linux一级目录及其作用                                                                                                             |
| ------- | ------------------------------------------------------------------------------------------------------------------------- |
| 一级目录    | 功能（作用）                                                                                                                    |
| /       | linux的最高目录，所有目录的父目录                                                                                                       |
| /bin/   | 存放系统命令，普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行                                                                          |
| /boot/  | 系统启动目录，保存与系统启动相关的文件，如内核文件和启动引导程序（grub）文件等                                                                                 |
| /dev/   | 设备文件保存位置                                                                                                                  |
| /etc/   | 配置文件保存位置。系统内所有采用默认安装方式（rpm 安装）的服务配置文件全部保存在此目录中，如用户信息、服务的启动脚本、常用服务的配置文件等                                                   |
| /home/  | 普通用户的主目录（也称为家目录）。在创建用户时，每个用户要有一个默认登录和保存自己数据的位置，就是用户的主目录，所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
| /lib/   | 动态库，系统调用的函数库保存位置                                                                                                          |
| /lib64/ | 64位的动态库                                                                                                                   |
| /media/ | 挂载目录。系统建议用来挂载媒体设备，如软盘和光盘                                                                                                  |
| /mnt/   | 挂载目录。早期 Linux 中只有这一个挂载目录，并没有细分。系统建议这个目录用来挂载额外的设备，如 U 盘、移动硬盘和其他操作系统的分区                                                     |
| /opt/   | 第三方安装的软件保存位置，这个目录是放置和安装其他软件的位置，手工安装的源码包软件都可以安装到这个目录中，一般习惯把软件放到 /usr/local/ 目录中，也就是说，/usr/local/ 目录也可以用来安装软件               |
| /root/  | 超级管理员的家目录,普通用户主目录在 /home/ 下，root 主目录直接在“/”下                                                                               |
| /run/   | 是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录，应该让它指向 run。                                            |
| /sbin/  | 保存与系统环境设置相关的命令，只有 root 可以使用这些命令进行系统环境设置，但也有些命令可以允许普通用户查看                                                                  |
| /srv/   | 服务数据目录。一些系统服务启动之后，可以在这个目录中保存所需要的数据                                                                                        |
| /tmp/   | 临时目录。系统存放临时文件的目录，在该目录下，所有用户都可以访问和写入,建议此目录中不能保存重要数据，最好每次开机都把该目录清空                                                          |
| /usr/   | usr 是 unix shared resources(共享资源) 的缩写，这是一个非常重要的目录，用户的很多应用程序和文件都放在这个目录下，类似于 windows 下的 program files 目录                    |
| /var/   | var 是 variable(变量) 的缩写，这个目录中存放着在不断扩充着的东西，一般习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。                                                 |

{% hint style="info" %}
针对根目录中包含的子目录仅限于表 1，但除此之外，Linux 系统根目录下通常还包含表 2 中的几个一级目录。
{% endhint %}

| 表 2          | 其他一级目录及功能                                                                                                                                                               |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 一级目录         | 功能（作用）                                                                                                                                                                  |
| /lost+found/ | 当系统意外崩溃或意外关机时，产生的一些文件碎片会存放在这里。在系统启动的过程中，fsck 工具会检查这里，并修复已经损坏的文件系统。这个目录只在每个分区中出现，例如，/lost+found 就是根分区的备份恢复目录，/boot/lost+found 就是 /boot 分区的备份恢复目录                         |
| /proc/       | 虚拟文件系统。该目录中的数据并不保存在硬盘上，而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的，/proc/devices 是保存设备驱动的列表的，/proc/filesystems 是保存文件系统列表的，/proc/net 是保存网络协议信息的...... |
| /sys/        | 虚拟文件系统。和 /proc/ 目录相似，该目录中的数据都保存在内存中，主要保存与内核相关的信息                                                                                                                        |

### Linux /usr目录

usr（注意不是 user），全称为 Unix Software Resource，此目录用于存储系统软件资源。建议所有开发者，应把软件产品的数据合理的放置在 /usr 目录下的各子目录中，而不是为他们的产品创建单独的目录。\
\
Linux 系统中，所有系统默认的软件都存储在 /usr 目录下，/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。

{% hint style="success" %}
建议：/usr 目录应具备表 3 所示的子目录。
{% endhint %}

| 表 3               | /usr 子目录及其功能                                                                                      |
| ----------------- | ------------------------------------------------------------------------------------------------- |
| 子目录               | 功能（作用）                                                                                            |
| /usr/bin/         | 存放系统命令，普通用户和超级用户都可以执行。这些命令和系统启动无关，在单用户模式下不能执行                                                     |
| /usr/sbin/        | 存放根文件系统不必要的系统管理命令，如多数服务程序，只有 root 可以使用。                                                           |
| /usr/lib/         | 应用程序调用的函数库保存位置                                                                                    |
| /usr/XllR6/       | 图形界面系统保存位置                                                                                        |
| /usr/local/       | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置                                                                    |
| /usr/share/       | 应用程序的资源文件保存位置，如帮助文档、说明文档和字体目录                                                                     |
| /usr/src/         | 源码包保存位置。手工下载的源码包和内核源码包都可以保存到这里，一般更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中，把内核源码保存到 /usr/src/linux/ 目录中 |
| /usr/src/kernels/ | 内核源码保存位置，默认在没有安装Development Tools的时候，这个目录下是空的，可以通过yum install kernel-devel来安装对应的内核的devel          |
| /usr/src/debug/   | 在进行系统调试的时候，放置自动生成的调试信息文件                                                                          |
| /usr/include      | C/C++ 等编程语言头文件的放置目录                                                                               |

### Linux /var 目录

/var 目录用于存储动态数据，例如缓存、日志文件、软件运行过程中产生的文件等。通常，此目录下建议包含如表 4 所示的这些子目录。

| 表 4              | /var子目录及其功能                                                                |
| ---------------- | -------------------------------------------------------------------------- |
| /var子目录          | 功能（作用）                                                                     |
| /var/lib/        | 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中                    |
| /var/log/        | 登陆文件放置的目录，其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。                |
| /var/run/        | 一些服务和程序运行后，它们的 PID（进程 ID）保存位置                                              |
| /var/spool/      | 里面主要都是一些临时存放，随时会被用户所调用的数据                                                  |
| /var/spool/mail/ | 存放新收到的邮件                                                                   |
| /var/spool/cron/ | 存放系统定时计划任务                                                                 |
| /var/www/html/   | RPM 包安装的 Apache  的网页主目录                                                    |
| /var/nis和/var/yp | NIS 服务机制所使用的目录，nis 主要记录所有网络中每一个 client 的连接信息；yp 是 linux 的 nis 服务的日志文件存放的目录 |
| /var/tmp         | 一些应用程序在安装或执行时，需要在重启后使用的某些文件，此目录能将该类文件暂时存放起来，完成后再行删除                        |
