# 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. 根目录与系统的开机、修复、还原密切相关；

![](/files/-MS1E9EAX4LPEPAMlKcX)

在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         | 一些应用程序在安装或执行时，需要在重启后使用的某些文件，此目录能将该类文件暂时存放起来，完成后再行删除                        |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hezhiqiang.gitbook.io/about-the-author/linux-xi-tong-yun-wei-xue-xi-bi-ji/linux-mu-lu-jie-gou-shuo-ming.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
