目录

文件管理

⭐ 中优先级

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

目录概念

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

树形目录

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

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

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

示例路径:

  • /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 ,从而实现两个文件名共享同一份文件内容。

123456 -rw-r–r– 2 user group 6 Jul 2 A 123456 -rw-r–r– 2 user group 6 Jul 2 D

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

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

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

软链接

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

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

123456 -rw-r–r– 1 user group 6 Jul 2 A 234567 lrwxrwxrwx 1 user group 1 Jul 2 L -> A

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

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

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

相关笔记

  • 内存管理概念
  • 内存管理
  • 虚拟内存管理