Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

目录与路径

复习

  • 设备控制器与驱动程序:用统一接口隐藏硬件差异
  • 查询、中断与 DMA:CPU 参与设备传输的程度怎样逐步降低
  • 文件与文件描述符:把设备和持久数据变成可读写的字节流

TL;DR

  • 文件一多,就需要组织:用目录把它们分门别类
  • 目录本身也可以装目录,于是形成一棵
  • 路径就是从根(或当前目录)走到某个文件的“路线”
  • 有绝对路径和相对路径两种写法

正文

  一个系统里可能有成千上万个文件。全都堆在一起,找起来就是灾难。于是人们又用上了老办法:分类,再用名字定位。

目录

  目录(directory)是一种特殊的文件,里面记的是“名字 → 文件”的对应关系。

  你可以把目录想成文件夹:它本身不装内容,只装“有哪些条目”。这些条目,可以指向普通文件,也可以指向另一个目录。

一棵树

  既然目录里能放目录,层层嵌套下去,所有文件就组织成一棵

/ (根)
├── home/
│   └── alice/
│       ├── notes.txt
│       └── projects/
│           └── demo.txt
└── etc/
    └── config

  树形结构的好处很直观:文件被分门别类,重名也不会冲突(不同目录下的 notes.txt 互不干扰),找起来也只需沿着树枝走。

路径

  要找到树里的某个文件,得给出从某处走到它的“路线”,这就是路径(path)。常见有两种写法:

  • 绝对路径:从根 / 出发,一路写全,比如 /home/alice/notes.txt。不管当前在哪,它都能唯一定位。
  • 相对路径:从“当前所在目录”出发,比如你在 /home/alice 时,直接写 notes.txtprojects/demo.txt

  路径里的 / 是分隔符,把一层层目录分开。“从根出发”还是“从脚下出发”,就是绝对与相对的区别。

名字的另一层抽象

  注意,文件名和文件本身是分开的:同一个文件可以有多个名字,多个名字也可以指向同一个文件。目录记录的只是“名字到文件”的映射,文件真正存放在哪里,由文件系统在更底层决定。

  于是又一层抽象把我们从“磁盘扇区”里解放出来:用名字和路径来指代数据,而不必关心它到底躺在哪。 那么,这些名字最终是怎样落到磁盘上的?下一章,我们看文件在磁盘里的真实样子。

思考题

  为什么目录要用“树”来组织,而不是把所有文件平铺成一个长长的列表?树形结构在查找和管理上各有什么好处?

小结

知识点

  • 目录:记录“名字到文件”映射的特殊文件
  • 目录可嵌套,构成树形结构
  • 路径定位文件,分绝对路径与相对路径
  • 名字与文件分离,便于管理和共享

参考资料

  1. Wikipedia(zh):目录:directory
  2. Wikipedia(zh):路径:path
  3. Wikipedia(zh):文件系统:file system

思考题答案(仅供参考)

  平铺成一个长列表,文件一多就难以查找、容易重名、也无法体现归属关系。树形结构则有几大好处:分类清晰,相关文件聚在一起;重名无碍,不同分支可以同名;定位高效,沿路径逐级查找即可,而不必扫描全表;权限和命名空间也更好管理。就连删除、移动一个目录,也能连带处理整棵子树。树把“大量对象”变成“有层次的少量选择”,这正是它被普遍采用的原因。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪