4.1 介绍
pwd命令显示在目录树中的当前位置。从树根到所处位置所经过的目录的序列被称做路径(path)。
4.2 从用户角度看文件系统
4.2.1 目录和文件
Unix系统中硬盘上的文件组成一棵目录树。每个目录能包含文件或其他的目录。
4.2.2 目录命令
mkdir
:创建一个或多个目录rmdir
:删除一个或多个目录mv
:重命名或移动一个目录cd
:转移工作目录pwd
:打印出当前工作目录
4.2.3 针对目录树的命令
ls -R
:列出指定目录及其子目录的所有内容chmod -R
:用于修改文件的许可位权限,选项-R要求修改子目录中所有文件的许可权限du
:disk usage,该命令给出指定目录及其子目录下所有文件占用硬盘中数据块的总数find
:在一个目录及其所有子目录中检索符合要求的文件和目录
4.3 Unix文件系统的内部结构
4.3.1 第一层抽象:从磁盘到分区
一个磁盘可被划分成分区,以便在一个大的实体内创建独立的区域。每个分区都可以看作是一个独立的磁盘。
4.3.2 第二层抽象:从磁盘到块序列
磁盘->磁道->扇区->存储一定字节的数据
4.3.3 第三层抽象:从块序列到三个区域的划分
Unix系统将磁盘块分成了3个部分:
- 超级块:存放文件系统本身的结构信息。例如:每个区域的大小,也存放未被使用的磁盘块的信息。
- i-节点表:存储文件的大小、所有者和最近修改时间等一些属性。所有的i-节点都有相同的大小,并且i-节点表是这些结构的一个列表。文件系统中的每个文件在该表中都有一个i-节点。表中的每个i-节点通过为止来标识。
- 数据区:文件内容保存在这个区域。
4.3.4 文件系统的实现:创建一个文件的过程
创建一个新文件的4个主要操作如下:
- 存储属性:文件属性的存储。内核先找到一个空的i-节点,上图中,内核找到i-节点47。内核把文件信息记录其中。
- 存储数据:文件内容的存储。内核从自由块列表中找出相应数目的块
- 记录分配情况
- 添加文件名到目录
4.3.5 文件系统的实现:目录的工作过程
目录的抽象模型是一个包含i-节点号和文件名的表。
(1)探讨目录内部
可通过ls -1ia
查看目录内容:
输出的是文件名和对应的i-节点号。
(2)指向同一文件的多重链接
可以使用命令ls -i
查看系统上任何一个文件的i-节点号。
4.3.6 文件系统的实现:cat命令的工作原理
(1)在目录中寻找文件名
(2)定位i-节点47并读取其内容
内核在文件系统中的i-节点区域找到i-节点47。
(3)访问存储文件内容的数据块
通过上述过程,内核已经可以知道文件内容存放在哪些数据块上,以及它们的顺序。由于cat不断调用read
函数,使得内核不断将字节从磁盘复制到内核缓冲区,进而到达用户空间。
所有从文件读取数据的命令,如cat、cp、more、who
等,都是将文件名传给open
来访问文件内容。
对open
的每次调用都是先在目录中寻找文件名,然后根据目录中i-节点号获得文件的属性,最终找到文件内容。
4.3.7 i-节点和大文件
将存不下的块编号存放在数据区而不是i-节点。这些用于存放编号的块被称为间接块
。相应的,会有二级间接块、三级间接块。