# 认识 Linux 系统

## Linux 内核

Linux 内核（Linux Kernel）是整个 Linux 系统的运行核心，是整个系统最底层的运行程序，但它仅作为核心存在，并非一整个操作系统，各大发行版将其打包成一整个可用的操作系统，这些发行版虽各有特色，但均以 Linux 内核为基础，操作逻辑也极度相似。

## 系统文件目录结构

一个 Linux 系统的文件系统由一个根目录 `/` 以及此目录下的所有文件与目录构成，根目录下的文件与目录有着如下结构：

- `/`：根文件系统，所有挂载点与路径的起点。包含系统必须的子目录与入口结构。

    - `bin`：系统启动和单用户模式下必须的基础命令，所有用户可执行。

    - `boot`：启动所需文件：内核、initramfs、引导配置。

    - `dev`：设备节点集合，一切皆文件。

    - `etc`：系统级配置中心，统一存放所有服务和系统配置。

    - `home`：普通用户的个人主目录集合。

    - `lib`：与 `lib64` 共同构成系统启动核心库、动态链接器所在位置。

    - `lib64`：与 `lib` 共同构成系统启动核心库、动态链接器所在位置。

    - `mnt`：供磁盘设备挂载的文件夹。

    - `opt`：用于存放可选附加应用程序的目录，每个软件在其中拥有独立子目录以避免与系统文件冲突。

    - `proc`：由内核提供的虚拟文件系统，展示系统与进程的实时信息。

    - `root`：`root` 用户的家目录

    - `run`：运行时数据存放点，重启后清空。

    - `sbin`：系统管理与维护命令，面向 root。

    - `srv`：目录用于存储服务器提供的服务数据，是管理和部署服务环境的标准化目录。

    - `sys`：Linux 系统中的 sysfs 文件系统，用于管理和展示内核设备、驱动程序及系统信息

    - `tmp`：临时文件目录，任何用户可写，重启后内容通常会被清空（取决于 tmpfs 配置）。

    - `usr`：用户级程序与库的主集合，包含大部分系统软件、文档与工具。

    - `var`：频繁变化的数据：日志、缓存、数据库运行文件等。

## 路径

路径表示文件或目录所在的位置，表示方式有两种，一种为绝对路径，一种为相对路径。

绝对路径为从根目录出发，指向文件所在位置，例如 `/home/fovlin/file`。

相对路径表示从当前目录出发，指向文件所在位置，`./`表示当前工作目录，`../` 表示上级目录，`~/`表示用户家目录，运行当前目录下的可执行文件。

其中 `./` 在不作为命令时可忽略，`file` 也表示当前目录下名为 `file` 的文件，但在命令行首项并不能省略，否则会和 `$PATH` 变量的调用冲突，若在首项忽略 `./` 会被当作命令处理。

## 环境变量

环境变量（Environment Variables）是操作系统中存储的一组动态命名的值，由变量名和变量值组成，相当于系统的“信息库”。程序运行时可以读取这些变量，从而获取配置信息或调整运行行为。

变量在 Linux 中使用 `$` + `变量名` 进行表示。

上文中 `$PATH` 变量就是一个很好的例子。

要查看当前生效的所有环境变量，使用 `env` 命令：

```bash
env
```

同时可以使用 `export` 命令自定义环境变量，这种效果是临时的，在会话结束即失效。

设置一个环境变量，使用如下格式：

```txt
export <变量名>=<值>
```

如将 `/opt/java/bin` 目录临时添加到 `$PATH` 变量中，即设置 `$PATH` 的值为 `$PATH:/opt/java/bin` 使用如下命令：

```bash
export PATH=$PATH:/opt/java/bin
```

此命令的的意思为，在 `$PATH` 变量原有的结构上，再添加 `:/opt/java/bin` 字段，并将 $PATH 变量重新设置为后续值，若你不熟悉此变量的结构，可以参考上文的 `$PATH` 变量说明

要想使环境变量永久生效，应该将上述 `export` 命令写入 Shell 的环境变量文件。

> 此处的 Shell 以 bash 为例。

Shell 在启动时会读取一遍环境变量文件，其本质是将环境变量文件当作 Shell 脚本在 Shell 启动时运行一次，这类文件有 `/etc/profile` `~/.bashrc` `~/.bash_profile`，其中后两者位于用户家目录下的环境变量文件仅对当前用户生效。

编辑文件，在新行写入你要应用的环境变量即可，上文举例更改 `$PATH` 变量，要使其永久生效，写入以下行：

```bash
export $PATH=$PATH:/opt/java/bin
```

> 编辑文件的方式将会在后续提及。