%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
%%
# Linux 目录结构
Linux 文件系统采用**层次化**的 **==树状目录==结构**:
只包含一个 **==单目录==结构**,最顶层的目录为 "**根目录**" `/`,所有文件和目录都是从根目录开始。
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-59633CA37AB165AA9FEE805DBA61AB9D.png|676]]
## Linux 目录说明
Linux 各个发行版的 **目录结构** 遵循 **文件系统层级标准** (Filesystem Hierarchy Standard,FHS)。
该标准定义了**常见目录的命名及用途,指导各类文件的保存路径**。

> [!example] Ubuntu 20.04 LTS 下的根目录:
>
> 
>
>
<br>
### 目录说明总览 ⭐
| 目录名 | 说明 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `/` | 根目录 |
| `/bin` 目录 | 存放 "**==用户命令== 的二进制可执行文件"**,<br>包括 `ls`、`cp`、`mkdir`、`mv`、`rm` 、`cat` 等命令工具 |
| `/sbin` 目录 | 存放 "**==系统管理命令== 的二进制可执行文件**",<br>包括 `ifconfig`、`modprobe`、`hwclock`、`reboot`、`shutdown` 等需要 root 用户权限的命令 |
| `/boot` 目录 | 存放 "**==启动引导文件==**",如内核镜像文件`vmlinuz`、启动配置文件 `grub.conf` |
| `/etc` 目录 | 存放 "**==系统配置文件==**" 和 "**==启动脚本==**",例如网络配置文件、系统服务配置文件。 |
| `/usr` 目录 | 存放 "**==用户级==应用程序和文件**",其中包含 `/usr/bin`、`/usr/sbin`、`/usr/lib` 等子目录。 |
| `/dev` 目录 | 存放 "**==设备文件==**",即计算机硬件设计对应的文件,如硬盘 `/dev/sda`、终端设备`/dev/tty`、CPU 等 |
| `/lib` 目录 | 存放 "**系统和应用程序依赖的==共享库文件==**" 以及内核模块文件。<br>此外还有 `/lib32` 和 `/lib64` 目录,分别表示用于 32 位 / 64位系统的库文件。 |
| `/home` 目录 | 存放 "**每个用户的主目录**"",例如 `/home/yht`,其中存放用户数据和配置文件。 |
| `/root` 目录 | `root` 用户的主目录 |
| `/media` 目录 | 用作**可移动设备**的**挂载点目录**,例如光驱、U 盘、移动硬盘等 USB 设备。 |
| `/mnt` 目录 | 用作**固定存储设备**的**挂载点目录**,例如挂载其他固态硬盘。 |
| `/proc` 目录 | **虚拟文件系统** `proc` 的挂载目录,为**系统内存的映射**,存放**系统==运行时==信息**,如系统内核、进程、内存等信息。<br>常用于查看和调试系统信息,例如`/proc/cpuinfo`、`/proc/meminfo`。 |
| `/sys` 目录 | **虚拟文件系统 `sysfs`** 的挂载目录,存放**系统==硬件==信息**,主要用于管理和查询设备信息。 |
| `/opt` 目录 | 用于**安装第三方软件包**的目录 |
| `/run` 目录 | 存放 "**系统运行时数据**",例如进程 ID 文件(PID files),套接字文件。 |
| `/srv` 目录 | 存放 "**由系统提供的服务相关的数据**",如Web服务器的数据(如/www) |
| `/tmp` 目录 | 存放 "**临时文件**",系统和用户程序在此目录下创建的临时文件通常**在系统重启时被清除** |
| `/var` 目录 | 存放 "**经常变化的数据文件**",如**日志文件**(`/var/log`)、邮件(`/var/mail`)、打印机队列和临时文件 |
| `/lost+found` | 存放 "系统异常关机时**仅完成部分写入**的损坏文件" |
> [!NOTE] **`/bin`, `/sbin`,`/lib` 目录** 已作为符号链接!
> 较新的 Linux 发行版中(CentOS7. x,Ubuntu 20.04 起等),
> **`/bin`, `/sbin`,`/lib` 目录** 已分别作为 **`/usr/bin`, `/usr/sbin`,`/usr/lib` 目录**的==**符号链接**==。
>
> 这个变化旨在**简化文件系统的布局**。
>
> 符号链接使得**系统在不同的阶段都可以访问到基本命令**。
> - 在系统引导时,`/bin` 可能是唯一可用的目录,因此系统启动和修复所需的基本命令会位于 `/bin`。
> - 当系统引导完成并且 `/usr` 目录挂载成功后,`/usr/bin` 中的命令也可用。
<br>
### `/usr` 目录
> `/usr` 含义:`unix systerm resource`,其下许多子目录名与根路径下的子目录名一致。
`/usr` 目录用于存放 "**用户级别的应用程序和文件**",类似于 Windows 上的 `%ProgramFiles%` 目录。
其子目录包括:
- `/usr/bin`:存放**用户命令**的二进制文件。
- 例如 `ls`、`cp`、`mkdir`、`mv`、`rm` 、`cat` 等命令工具
- `/usr/sbin`:存放**系统管理命令**的二进制文件。
- 例如 `ifconfig`、`modprobe`、`hwclock`、`reboot`、`shutdown` 等命令工具
- `/usr/lib`:存放**系统和程序运行所依赖的系统级库文件**。
- `/usr/share`:存放**共享数据**,如文档和配置文件。
- `/usr/local`:用作 **==第三方应用程序==的系统级安装目录**,包括下列子目录:
- `/usr/local/bin`
- `/usr/local/sbin`
- `/usr/local/lib`
- `/usr/local/include`
- `/usr/local/src`

### `/var` 目录

### `/boot` 目录
存放 "**系统启动引导程序**" 相关文件的目录。
### `/dev` 目录
> "dev" 取自 "device driver",即设备驱动程序。
Linux 系统中一切都是文件,会将**计算机硬件设备**映射成相应的"**设备文件**" 来进行管理。
`/dev` 目录下存放的即是 "**设备文件**"。
每个硬件设备都有对应的设备文件,系统内核中的 udev 设备管理器会自动对硬件设备文件的名称进行规范命令。
#### 设备文件名说明
每种**外围设备**都有相对应的**设备文件名与代号**,系统内核中的 **udev 设备管理器** 会自动对硬件设备文件的名称进行**规范命名**。


> [!example] 示例:
>
> 
>
> 注:`tmpfs` 为临时文件系统,在内存中创建,当系统重启或崩溃时,其中内容将被抹除。
>
<br>
### `/proc`与 `/sys` 目录
这两个目录是 "伪文件系统" 的挂载目录:
- `/proc` 目录为**伪文件系统** `proc` 的挂载目录;
- `/sys` 目录为**伪文件系统** `sysfs` 的挂载目录;
<br>
### `/tmp` 目录
##### 临时文件
Linux 系统中有两个临时文件目录,专供用于存放临时文件:
- **`/tmp` 目录**:**最常用的临时文件存储目录**,系统中的任何用户都有权限操作 `/tmp` 目录。
- 大多数 Linux 系统发行版都配置为,**系统在启动时会自动删除 `/tmp` 目录中的所有文件**。
- `/var/tmp` 目录:与 `/tmp` 类似,但存储在此目录中的文件**通常在系统重启时保留**。
临时文件的用途:
- 临时数据存储:程序可能需要临时存储数据,这些数据在任务完成后不再需要。
- 缓存:加速程序和服务的响应时间。
- 进程间通信:用作不同进程间的通信媒介。
- 会话管理:存储关于用户会话的临时信息。
### `/lost+found` 目录
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-56FDB90EFC2E968AC5C05C45FA09B399.png|552]]
<br>
## 目录使用说明
目录使用建议:
- 第三方软件的**安装目录**: `/usr/local` 路径下。
- 第三方软件的**可执行文件**:放在`/usr/local/bin` 下;
- 第三方软件**自身的库文件**:放在 `/usr/local/lib` 下;
- 第三方软件的**源码文件**:放在 `/usr/local/src` 下;
- 第三方软件**安装包存放的目录**: `/opt`,放的是 "安装包" 。
> [!quote]
> 
>
> 
>
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-8F8B38C76750E949315811F8921965BE.png|653]]
<br><br>
<br>
# Linux 文件系统
<br>
## 物理存储设备与文件系统的关系
**物理存储设备**(硬盘、USB 闪存等)提供了**实际存储空间**,而**文件系统**是**在存储空间之上创建的一个逻辑结构,用于管理和组织数据**。
**每个物理存储设备都需要具有自己的==文件系统==**,由此才能**提供存储、访问数据等功能**:
对于一个**全新的物理存储设备**,需要对其进行 **==分区==**、**==格式化==**(即**在分区中创建文件系统**),再**将其文件系统==挂载==到 Linux 主目录树上**后才能**通过==挂载点==访问其内容**。
**一个物理存储设备可以被分成==多个分区==,每个分区都包含一个独立的文件系统**。
<br>
# 文件系统与目录树的关系
Linux 只有一个**从根目录开始**的树形目录结构,对应一个 **==主文件系统==**(**系统盘**上的文件系统)。
在**主文件系统中的目录树**上,可以在其中某个目录**挂载其他的 "==物理存储设备或分区==" 中的文件系统**,这一目录即称之为 "**挂载点**"。
当一个设备的文件系统被挂载之后,其**文件系统中的内容将显示在==挂载点==目录**中,就像是**存放在了挂载点目录下一样**,可被直接访问。
- 「**挂载**(mount)」:指将**一个物理存储设备或分区中的文件系统** 与**主文件系统目录树中的一个目录(称之为==挂载点==)** 相连接;
- 「**挂载点**(mount point)」:**主文件系统中的一个目录**,连接了**其他存储设备或分区中的文件系统**
- 「**卸载**(unmount)」:将挂载的文件系统从挂载点断开,称之为卸载文件系统。
> [!example]
> 例如,一块硬盘作为**系统盘**挂载到根目录`/` ,而**另一块硬盘则可以挂载到`/home`**。
> 这样,`/home` 目录下的所有文件实际上则是存储在第二块硬盘中。
> [!NOTE] Linux 下的文件路径本身,并没有提供任何有关文件究竟存放在哪个物理磁盘中的信息。
<br><br>
## 文件系统的自动挂载
在开机自检之后,一个称为 「**引导加载程序**」的程序接管计算机,从**引导设备**中读取数据,从而**将操作系统加载到内存**中。
在**引导设备**的数据中有**初始的 Unix 文件系统**,称为**根文件系统**。
**根文件系统**会**自动挂载**,其中存放着**启动 Unix 所需的全部程序和数据文件**。
一旦挂载了根文件系统,内核也启动完毕,就会**自动挂载其他设备文件系统**。
这些额外的文件系统的信息存放于配置文件 `/etc/fstab` 中。
因此,要持久化地挂载一个文件系统,就需要在 `/etc/fstab` 中声明挂载信息:
![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令#自动挂载文件系统(持久化挂载)|磁盘管理相关命令]]
<br><br>
## 文件系统检查与修复
每种文件系统各自都有相应的恢复命令。
Linux 系统提供了 `fsck` 文件系统检查工具,用于检查和修复文件系统一致性与完整性。
`fsck`会扫描文件系统的完整性和结构一致性,检查错误,比如丢失的文件、损坏的块、不一致的目录项等。如果找到错误,`fsck`会尝试修复这些问题。这可能包括修复文件系统表、恢复丢失的文件等。
![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令#检查和修复文件系统|磁盘管理相关命令]]
# 物理存储设备的使用
## 分区、格式化、挂载
对于一个**全新的物理存储设备**,需要对其进行 **==分区==**、**==格式化==**(即**在分区中创建文件系统**),再**将其文件系统==挂载==到 Linux 主目录树上**后才能**通过==挂载点==访问其内容**。
整体步骤如下:
- **识别新硬盘**:使用 `lsblk` 或 `sudo fdisk -l`查看硬盘对应的**设备文件标识符**。
- **创建分区**(可选):使用 `fdisk`、`gdisk`、`parted` 等工具在硬盘上创建/划分分区(例如`/dev/sda1`)。
- **格式化分区**:即在分区上创建文件系统
- 需使用各个文件系统专门的格式化工具,如 `mkfs.ext4` 创建 ext4 文件系统。
- 如果未进行分区,则直接在整个硬盘上格式化/创建文件系统,即文件系统将覆盖整个硬盘。
- **挂载文件系统**: 将分区上的文件系统挂载到 Linux 系统主目录上的指定路径(挂载点)
- 临时挂载:使用 `mount` 命令将分区**临时挂载**到指定路径。
- **自动挂载**(持久性挂载):编辑 `/etc/fstab` 文件并添加挂载信息.
#### 示例一:**为新硬盘创建分区、格式化、挂载到指定目录**
```shell
# 1. 查看新硬盘对应的设备文件标识符
lsblk
# 2. 创建分区: 对`/dev/sda`分区, 得到`/dev/sda1`等
sudo parted /dev/sda
# 3. 格式化分区, 在分区上创建文件系统
sudo mkfs.ext4 /dev/sda1
# 4. 挂载文件系统
mkdir /my_data
mount -t ext4 /dev/sda1 /my_data # 临时挂载
# 5. 检查是否成功挂载(df命令只显示已挂载的文件系统)
df -h
```
#### 示例二:**自动挂载文件系统(持久化挂载)**
![[02-开发笔记/11-Linux/Linux 命令行/Linux-文件系统与磁盘管理相关命令#自动挂载文件系统(持久化挂载)|磁盘管理相关命令]]
#### 示例三:挂载 U 盘
- (1)插入 U 盘后,查看 U 盘的设备文件名
- 命令:`lsblk` 或 `sudo fdisk -l` 。
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-862808B31AD8195EF38606DFA15D41C0.png|450]]
- (2)将 U 盘挂载到 `/media` 路径下
- 命令:`sudo mount /dev/sdb1 /media`(直接挂载到`/media`,或者`/media/xxx`)
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-EC178933C58F7AC8E8BB1EAD4477AD6F.png|499]]
- (3)进入挂载目录 `cd /media`,即意味着**进入到 U 盘中**
- (4)取消挂载,退出 U 盘:`umount /media`。
<br><br>
## 磁盘分区管理
创建、删除、组织和管理磁盘分区的工具:
- **fdisk**: 支持传统的 MBR 分区表(Master Boot Record),这是早期的分区方案,最大支持 2TB 的磁盘,且一个磁盘最多只能有四个主分区。
- 示例:`sudo fdisk /dev/sda`
- **gdisk**:支持新一代的**GUID 分区表**(GUID partition table,**GPT**),是 "GPT fdisk"的简称。GPT 不受 MBR 的 2TB 限制,且一个磁盘可以有多达 128 个主分区。
- 示例:`sudo gdisk /dev/sda`
- **GNU Parted**(通常简称 `parted`):
- 示例:`sudo parted` 进入交互式模式,可执行`print` 、`resizepart`、`mklabel` 、`mkpart` 等命令。
- **GNOME Partition Editor**(`gparted`):Parted 的图形界面版本
##### GNU Parted
> 参见:[vmware:ubuntu虚拟机如何扩容?\_vmware虚拟机下ubuntu磁盘扩容-CSDN博客](https://blog.csdn.net/qq_34160841/article/details/113058756)
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-EADDE8EEB299E4BEAE1664BFF18400D4.png|494]]
- 支持多种分区表类型,包括 MBR 和 GPT 等。
- 可以直接在多种文件系统上操作,包括创建、检查、调整和删除文件系统。
- **能够调整现有分区的大小而不丢失数据**(fdisk 和 gdisk 不能调整现有分区,只能先删除现有分区再重新创建)
- 脚本化操作:支持脚本化命令,使其适用于自动化任务。
<br>
## 格式化(创建文件系统)
> 新硬盘设备或新创建的分区上没有搭载任何文件系统,必须在其上进行**格式化**,**即创建一个文件系统**。
每个文件系统创建时都会生成一个**唯一标识符** **UUID**(Universally Unique Identifier)。
每种文件系统都有其专门的格式化工具,如下所示:
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-D86CAC4CC24BE9353D87286FF8489DF2.png|516]]
Linux 系统上并没有默认安装所有的文件系统格式化工具。
可使用 `type` 命令查看某个工具是否可用:
![[_attachment/02-开发笔记/11-Linux/Linux 目录树与文件系统挂载.assets/IMG-Linux 目录树与文件系统挂载-A86A60656ACF6A686B1B32DED9A9976D.png]]
如上,Ubuntu 上没有默认安装 xfs 系统的格式化工具。
%%
# 存储设备文件
Linux 系统中,有多种不同类型的存储设备,每种类型的设备或技术都有其特定的用途,如`disk`和`part`用于基本的存储任务,`loop`用于特殊的挂载场景,而`lvm`提供了高级的存储管理功能。
#### 1) 物理硬盘 disk
物理硬盘,包括**HDD** (传统机械硬盘) 和 **SSD** (固态硬盘)。
在 Linux 中,物理磁盘对应的**设备文件**通常表示为 `/dev/sda`, `/dev/sdb` 等。
其中,`sd` 表示**SATA 或 SCSI 接口硬盘**,字母 `a`、`b` 等标识**不同的硬盘**。
对于 **NVMe 接口** 的 SSD,通常是`/dev/nvme0n1`, `/dev/nvme1n1` 等。
- `/dev/nvmeNn#`,其中数字"`N`" 标识不同磁盘,数字 `#` 为分配给该磁盘的**名称空间编号**(从 1 开始)。
#### 2) 分区 Partitions
**一个物理硬盘**可以被分成**多个分区**,每个分区表现为独立的区域,并**可以有不同的文件系统**。
在 Linux 中,分区对应的设备文件通常表示为 `/dev/sda1`, `/dev/sda2` 等。
其中,`sda` 为物理磁盘的标识,**数字`1` ,`2` 等标识该磁盘下的各个分区**。
对于 **NVMe 接口** 的 SSD,通常是`/dev/nvme0n1p1`, `/dev/nvme0n1p2` 等。
#### 3) Loop 设备
Loop 设备是一种特殊的设备,它允许**普通文件**在文件系统中表现得像**块设备**。
通常用于挂载镜像文件(如 ISO 文件)。例如,通过 loop 设备将一个 ISO 映像文件挂载到一个目录中,此后对该目录访问就像**使用物理磁盘一样使用一个文件**。
在 Linux 中,loop 设备的设备文件名通常为 `/dev/loop0`,`/dev/loop1` 等。
#### 4) 逻辑卷管理 LVM
逻辑卷管理(Logical Volume Management,LVM)是一种高级的磁盘存储管理技术,在物理硬盘和分区之上提供了一个抽象层,允许更灵活的磁盘空间管理。
###### LVM 的几个关键概念
- **物理卷(Physical Volumes, PVs)**:LVM 系统的基本构建块,通常是**实际的硬盘或其分区**。
- **卷组(Volume Groups, VGs)**:一组一个或多个物理卷组成的**存储池**,可被视为**一个大的虚拟磁盘**。
- **逻辑卷(Logical Volumes, LVs)**:在卷组内创建的**虚拟分区**。逻辑卷**可以被格式化并挂载使用**,就像物理磁盘或其分区一样。
###### LVM 的基本思想
将多个**物理卷** (物理硬盘或其分区) 合并成一个**卷组** (大的虚拟磁盘),再在卷组内创建**逻辑卷**(虚拟分区),使其作为存储设备使用。
###### LVM 的使用步骤
首次设置逻辑卷的步骤如下。
(1) 创建物理卷。
(2) 创建卷组。
(3) 创建逻辑卷。
(4) 格式化逻辑卷。
(5) 挂载逻辑卷。
###### LVM 的优点及作用
- **灵活性**:
- 允许创建、调整、移动或删除逻辑卷而不需要关机,因此可在不中断系统服务的情况下**动态调整逻辑卷的大小**。
- 多个物理设备合并为一个大的卷组,可以**按需分配存储空间**。
- **易于管理**:在需要处理多个磁盘和大量存储空间时,简化磁盘管理
- **快照功能**:支持创建逻辑卷的快照,对于备份和恢复非常有用。
###### 常用场景
- **服务器和数据中心**,需要**灵活地管理大量磁盘空间**。
- 在需要频繁更改存储配置的环境中,如云计算环境。
- 在需要高级数据管理功能(如快照、数据复制和分布式存储)的系统中。
###### 管理命令
- `pvcreate`, `pvdisplay`, `pvremove`:用于管理物理卷。
- `vgcreate`, `vgdisplay`, `vgextend`, `vgreduce`:用于管理卷组。
- `lvcreate`, `lvextend`, `lvreduce`, `lvremove`:用于管理逻辑卷。
###### 设备文件形式
在 Linux 中,逻辑卷在 `/dev` 目录下**通常有自己的命名规则**,如 -
- `/dev/mapper/vgname-lvname`
- 或 `/dev/vgname/lvname`
其中 `vgname` 是自定义的**卷组名**,`lvname` 是 **逻辑卷名**。
#### 5) RAID 阵列
RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)
是**将多个物理硬盘组合为一个逻辑单元**的技术。
RAID 旨在提高数据可靠性、容错能力或提升性能。
RAID 可以通过软件(软 RAID)或专用硬件(硬 RAID)来实现,不同的 RAID 级别(如 RAID 0, 1, 5, 6 等)提供了不同的性能和冗余特性。
RAID 阵列**可以分为多个分区或由 LVM 管理**。
###### RAID 的作用
1. **数据冗余**: RAID 通过**冗余数据存储**(即在多个磁盘上存储相同的数据或数据的校验信息)来**提高容错能力**。如果一个磁盘发生故障,系统仍然能够从其他磁盘中恢复丢失的数据。
2. **性能提升**: 某些 RAID 级别可以通过并行读写操作来提高性能。例如,RAID 0 通过将数据分布在多个磁盘上来提高读写速度
###### 常见的 RAID 级别
- **RAID 0**(条带化):将数据分布在两个或多个磁盘上,没有冗余,提供高性能但不提供容错能力。
- **RAID 1**(镜像):数据在两个或多个磁盘上完全复制,提供容错能力,但存储效率为 50%。
- **RAID 5**(带奇偶校验的条带化):将数据和奇偶校验信息分布在三个或更多磁盘上。如果一个磁盘失败,数据可以从剩余磁盘的数据和奇偶校验信息中重建。
- **RAID 6**(双奇偶校验):类似于 RAID 5,但有两套奇偶校验信息,可以容忍两个磁盘同时失败。
- **RAID 10**(镜像+条带化):结合了 RAID 0 的性能和 RAID 1 的冗余特性,通常需要四个或更多磁盘。
###### 软硬件实现
- **软件 RAID**:由操作系统内的软件控制,不需要专用的硬件。Linux 内核支持软件 RAID,并提供了`mdadm`这样的工具来管理软 RAID。
- **硬件 RAID**:由专用的 RAID 控制器卡控制。硬件 RAID 通常提供更好的性能和额外的功能,如电池备份的写缓存。
#### 6) 网络存储 NAS, SAN
网络附加存储(NAS)和存储区域网络(SAN)是**通过网络连接的存储解决方案**。
网络存储通常**由多个硬盘组成,可以配置为 RAID,也可以被划分为多个分区或由 LVM 管理**。
网络存储提供**远程存储服务**,通常用于企业和大型组织的数据中。
网络存储设备的表示依赖于具体的连接方式和协议。例如,使用 iSCSI 连接的 SAN 设备可能显示为 `/dev/sdX` 类似的设备。
%%
<br><br>
# 参考资料
[Linux文件系统与目录结构](https://www.cnblogs.com/ddz-linux/p/10458383.html)
%%

> 
>
> 
%%
# Footnotes
[^1]: