本地资料目录
SCHEDULE LOCAL中优先级7 个小节覆盖真题 20092022
关联考点目录4文件链接3做相关真题 · 7 道 →
做相关真题 · 7 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

目录

真题练习

选择题中会考察 目录 以及 硬链接和软链接 的概念。

目录概念

目录是计算机文件系统中用于组织和存储文件和其他目录的一种 重要概念。目录也被称为文件夹,它是文件系统中的一个 关键组成部分,用于创建层次结构,方便用户管理和浏览文件。

树形目录

树形目录是一种 层次化 的文件组织结构,就像一棵倒置的树:

  • 根目录(Root) 是整个目录结构的起点,通常记为 /
  • 根目录 下可以包含多个 子目录文件,每个 子目录 下又可以包含更多的目录或文件,以此类推。
  • 每个目录都可以看作是一个 节点,通过 路径 连接起来,形成一棵树。

举例目录结构如下(见图):

根目录下 docs、img 等目录组成的树形层次

示例路径:

  • /docs/report.txt:表示在 根目录 下的 docs 子目录 中存在一个名为 report.txt文件
  • /img/photos/summer.jpg:表示 文件 summer.jpg 位于 img/photos/ 目录 下。

这种结构具备以下特点:

  • 层次清晰:便于用户查找和管理文件
  • 目录项路径唯一:在不考虑链接与挂载的纯树形结构中,每个目录项都有唯一绝对路径;同一文件对象可因硬链接拥有多个绝对路径,符号链接也可提供其他访问路径。
  • 支持相对路径:可使用 . 表示当前目录,.. 表示上级目录

存储结构

在文件系统中,目录本质上就是一个 特殊类型的文件,它的“内容”是一个个 目录项(directory entry),用于记录当前目录下的 文件子目录 的名字,以及它们对应的 inode 编号。

下图给出了目录的核心简化结构🧩:

目录文件内容(一个个目录项):
┌────────────────────────────┐
│ 文件名:.       → inode 100 │ ← 当前目录
│ 文件名:..      → inode  99 │ ← 父目录
│ 文件名:a.txt   → inode 123 │
│ 文件名:docs/   → inode 200 │
│ 文件名:img.jpg → inode 150 │
└────────────────────────────┘

每个 目录项 包括:

  • 文件名(如 “a.txt”)
  • 对应的 inode 编号(如 123),通过 inode 号查询 inode表 可以获取文件的元信息。

这些信息保存在磁盘上的 目录文件 中,文件系统通过这些记录来解析 路径

操作

树形目录不仅提供了结构化的存储方式,用户还可以通过命令行对 目录文件 进行多种操作:

  • 📁 目录操作
  • 📄 文件操作
  • 📍 路径导航命令
mkdir dir_name        # 创建新 目录
mv old_dir new_dir    # 移动或重命名 目录
rm -r dir_name        # 递归删除 目录 及其内容
ls -l dir_name        # 列出 目录 内容(详细信息)
touch filename        # 创建一个空 文件
rm filename           # 删除 文件
mv old new            # 重命名或移动 文件
cp src dest           # 复制 文件
cat filename          # 显示 文件 内容
cd /path/to/dir       # 进入指定 目录(绝对路径)
cd ..                 # 返回上级 目录
cd                    # 回到当前用户的主 目录
pwd                   # 显示当前 路径

文件链接

在 Linux 文件系统中,一个文件的 “名字” 其实只是 目录项 中的一个 链接(link)。文件的实际内容和元信息是保存在 inode 中的,而 文件名 只是“指向这个 inode 的引用”。基于这一设计,系统允许我们为同一个文件创建多个“名字”,这些名字就是所谓的 文件链接

文件链接 分为两种:硬链接软链接,它们实现方式不同,行为也有所差异。

硬链接

硬链接(hard link)的本质,是在文件系统的目录存储结构中,为同一个 索引节点(inode)创建多个目录项。这些目录项分别对应不同的 文件名,但它们都指向同一个 inode,从而共享同一份 文件数据

在 Linux 中你可以使用命令 ln A D 创建 A 的硬链接 D,它的含义是:在当前目录下创建一个名为 D新目录项,该目录项与 A 指向同一个 inode ,从而实现两个文件名共享同一份文件内容。

$ echo "hello" > A
$ ln A D
$ ls -li A D
123456 -rw-r--r-- 2 user group 6 Jul 2  A
123456 -rw-r--r-- 2 user group 6 Jul 2  D

执行上述创建硬链接的命令后,系统中的目录会变为如下结构(简化):

硬链接 A 和 D 的目录项共同指向同一个 inode

因此,硬链接实现了 多个文件名访问同一个文件内容 的效果:

  • 所有硬链接文件 共享同一个 inode 号,指向同一个数据块,不会创建数据副本;
  • 删除某一个硬链接,只是移除了对应的 目录项,并减少 inode 的 链接计数,不会影响其他链接;
  • 只有当所有指向该 inode目录项 都被删除时,该 inode 所占的数据块才会真正被释放;
  • 出于文件系统一致性考虑,硬链接 不能用于目录,以防目录结构形成环;
  • 硬链接 仅限于同一个文件系统内部,不能跨越挂载点或磁盘分区。

软链接

软链接(也叫做 符号链接,symbolic link)的本质,是在文件系统中 创建一个特殊类型的文件,其内容是 指向目标文件路径的字符串。软链接自身拥有独立的 inode 和数据块,但并不直接指向目标文件的 inode,而是通过路径进行间接访问。

在 Linux 中你可以使用命令 ln -s A L 创建 A 的软链接 L,它的含义是:在当前目录下创建一个名为 L 的链接文件,其内容是 "A",即指向 文件 A 的路径。

$ echo "hello" > A
$ ln -s A L
$ ls -li A L
123456 -rw-r--r-- 1 user group 6 Jul 2  A
234567 lrwxrwxrwx 1 user group 1 Jul 2  L -> A

执行上述创建软链接的命令后,系统中的 目录结构 会变为如下形式(简化):

符号链接 L 保存目标 A 的路径字符串并拥有独立 inode

因此,软链接实现了 路径级别的引用关系,其行为特性如下:

  • 软链接是一个 独立的文件,拥有自己的 inode 和数据块,数据块中存储的是目标路径(如 "A");
  • 删除原文件后,软链接不会失效为独立文件,但会变成 悬挂链接(dangling link),无法再访问目标内容;
  • 软链接 可以跨文件系统使用,也可以链接 目录,灵活性更高;
  • 访问软链接时,系统会先读取其 路径内容,再根据该路径查找目标文件;
  • 文件属性 显示中,软链接使用 l 类型标识,显示类似 L -> A 的引用关系。