第二十九课:文件系统基础


一、为什么需要文件系统?

先思考一个问题:

计算机里的数据:

最终:

存在哪里?

答案:

磁盘(Disk)


例如:

你保存:

照片.jpg

实际上:

硬盘:

只认识:

010101010101

它不知道:

什么叫:

“照片”。


所以需要:

一个管理者。

负责:

- 给数据命名
- 组织数据
- 查找数据
- 保存数据
- 删除数据

这个管理者:

就是:

文件系统(File System)


二、什么是文件?

教材定义:

文件是具有符号名的、在逻辑上具有完整意义的一组相关信息的集合。

简单理解:

文件:

就是:

操作系统给数据集合:

起的名字。


例如:

硬盘:

实际:

可能:

存:

101010101

110010101

001010101

操作系统:

组织:

成为:

photo.jpg

music.mp3

game.exe

三、文件包含什么?

一个文件:

不仅仅:

包含:

数据。

还包含:

很多属性。


例如:

一个文件:

test.txt

系统还需要知道:

文件名:
test.txt

大小:
10KB

创建时间:
2026-01-01

权限:
可读可写

位置:
磁盘哪里

这些信息:

叫:

文件控制块 FCB(File Control Block)


四、文件控制块 FCB(★★★★★)

FCB:

是操作系统管理文件的重要数据结构。

可以理解为:

文件的身份证。


人的身份证:

包含:

姓名

年龄

身份证号

文件身份证:

包含:

文件名

文件大小

权限

存储位置

FCB通常包括:

1. 文件基本信息

例如:

文件名。


2. 文件存取权限

例如:

Linux:

rwx

表示:

read

write

execute


3. 文件物理位置

最重要。

告诉系统:

数据:

在磁盘哪里。


4. 文件状态

例如:

是否打开。


五、文件系统层次结构

操作系统:

不会:

直接:

操作磁盘。

中间:

有很多层。

大概:

如下:

用户程序

↓

文件系统接口

↓

目录管理

↓

文件组织

↓

磁盘管理

↓

硬件磁盘

用户:

只需要:

打开文件。

下面:

全部:

由系统完成。


六、文件的基本操作

用户:

对文件:

有哪些操作?


1. 创建文件

create。

例如:

新建:

test.txt。


2. 删除文件

delete。

释放:

空间。


3. 打开文件

open。


4. 关闭文件

close。


5. 读文件

read。


6. 写文件

write。


这些:

是操作系统:

提供的:

系统调用。


七、文件的逻辑结构

文件:

从用户角度:

怎么看?

叫:

逻辑结构。

主要:

两种。


第一种:无结构文件

也叫:

流式文件。

特点:

没有明显结构。

就是:

一串字符。

例如:

hello world
abcdef
123456

常见:

文本文件。


第二种:有结构文件

也叫:

记录式文件。

文件:

由:

记录组成。


例如:

学生信息:

学号 姓名 成绩

001 张三 90

002 李四 85

每一行:

就是:

一个记录。


八、文件物理结构

重点来了。

逻辑:

是:

用户看到的。

物理:

是:

磁盘怎么存。


主要:

三种。


1. 连续分配

思想:

文件占用连续磁盘块。

例如:

文件:

占:

磁盘:

10~15块。

10 11 12 13 14 15

优点:

速度快。

为什么?

因为:

连续。

读取:

顺序。


缺点:

产生:

外部碎片。

类似:

连续内存分配。


2. 链接分配

思想:

文件块可以分散,但是用指针连接。

例如:

块5

↓

块20

↓

块8

↓

块30

优点:

没有外部碎片。


缺点:

随机访问慢。

为什么?

因为:

找第100块:

必须:

从头找。


3. 索引分配(★★★★★)

思想:

建立:

一个索引块。

记录:

所有数据块地址。

例如:

索引:

文件A

索引块

↓

5

↓

20

↓

8

↓

30

优点:

支持随机访问。


缺点:

需要额外索引空间。


九、三种分配方式比较

方式 特点 优点 缺点
连续分配 连续存储 速度快 外部碎片
链接分配 指针连接 无外部碎片 随机访问慢
索引分配 索引表 随机访问快 需要索引块

口诀:

连续快,链接稳,索引灵活。


十、目录是什么?

文件很多。

怎么办?

不能:

全部堆一起。

所以:

需要:

目录。


目录:

本质:

也是:

一种特殊文件。

它保存:

文件信息。


例如:

Windows:

C盘

 ├── 用户

 │    └── 图片

 │          └── photo.jpg

 └── 软件

这个:

就是:

目录结构。


十一、目录管理

常见:

目录结构:


1. 单级目录

所有文件:

放一起。

例如:

文件1

文件2

文件3

问题:

文件多:

容易冲突。


2. 两级目录

每个用户:

一个目录。

例如:

用户A

 ├ 文件1

用户B

 ├ 文件2

3. 树形目录(★★★★★)

现代系统:

采用。

例如:

Windows:

C:

 ├ Program Files

 ├ Users

 └ Windows

Linux:

/

├ bin

├ home

├ etc

十二、本课重点总结

今天必须掌握:


文件

一组具有逻辑意义的数据集合。


FCB

文件控制块,是文件的身份证。


文件逻辑结构

两种:

  • 无结构文件
  • 有结构文件

文件物理分配

三种:

连续

快,但碎片。

链接

灵活,但随机访问慢。

索引

支持随机访问。


目录

组织文件。

现代系统:

树形目录。


第三十课:文件目录与文件共享


一、为什么需要目录?

假设:

你的硬盘:

有:

100万个文件

如果:

所有文件:

直接放在一起:

a.txt

b.jpg

game.exe

music.mp3

...

会发生什么?

问题:

- 文件名字容易重复
- 查找困难
- 管理混乱

所以:

操作系统:

引入:

目录(Directory)


二、目录是什么?

很多人以为:

目录就是:

文件夹。

这个理解:

没错。

但是从操作系统角度:

更准确:

目录是一种特殊的文件,它保存文件的相关信息。


也就是说:

目录里面:

保存的不是照片、视频。

而是:


例如:

目录:

我的文件夹

里面:

可能保存:

文件名 位置
a.txt 磁盘100块
b.jpg 磁盘200块

所以:

目录实际上:

像一本:

文件索引表。


三、文件查找过程(★★★★★)

用户:

打开:

C:\test\a.txt

操作系统:

怎么找到?


一步一步:

第一步:

找到根目录。

例如:

Windows:

C:

Linux:

/

第二步:

查找:

test目录。

目录中:

寻找:

test

第三步:

进入test。

继续查找:

a.txt

第四步:

读取FCB。

得到:

文件物理位置。


过程:

可以表示:

路径

↓

目录

↓

FCB

↓

磁盘位置

↓

读取文件

四、目录结构

操作系统:

经历了:

几个发展阶段。


1. 单级目录

所有文件:

放一个目录。

例如:

/

├ a.txt

├ b.txt

├ c.txt

优点:

简单。


缺点:

文件名冲突。

例如:

两个用户:

都想创建:

test.txt

怎么办?


2. 两级目录

为每个用户:

建立目录。

例如:

系统

├ 用户A

│   └ test.txt

│

└ 用户B

    └ test.txt

解决:

不同用户:

文件名冲突。


3. 树形目录(★★★★★)

现代操作系统:

采用。


例如:

Linux:

/ 

├── home

│    ├── user1

│    │       └── a.txt

│

├── etc

└── bin

Windows:

类似:

C:

├── Windows

├── Program Files

└── Users

优点:

  • 层次清晰
  • 查找方便
  • 支持大量文件

五、路径是什么?

路径:

就是:

文件在目录树中的位置。


分两种:


① 绝对路径

从根目录开始。

例如:

Linux:

/home/user/a.txt

Windows:

C:\Users\a.txt

② 相对路径

从当前目录开始。

例如:

当前:

/home/user

访问:

a.txt

六、文件共享

问题:

来了。

如果:

两个用户:

都需要:

同一个文件。

怎么办?


例如:

公司:

多个员工:

需要:

访问:

同一个报告。


方法:

不能:

复制多份。

因为:

浪费空间。

所以:

需要:

文件共享。


七、文件共享方式

主要:

两种。


方法一:硬链接(Hard Link)

思想:

多个目录项指向同一个文件。


例如:

文件:

A.txt

目录:

记录:

A.txt

↓

文件FCB

现在:

创建:

B.txt。


结果:

A.txt

↓

      文件数据

↓

B.txt

两个名字:

指向:

同一个文件。


特点:

删除:

A.txt。

B.txt:

仍然存在。

为什么?

因为:

文件本身:

没有删除。

只是:

删除一个名字。


八、硬链接的核心:引用计数

系统:

会记录:

有多少个目录项:

指向文件。

例如:

开始:

引用数=1

创建:

B.txt:

变成:

引用数=2

删除:

A.txt:

变成:

引用数=1

只有:

引用数=0。

文件数据:

才真正删除。


九、方法二:软链接(Symbolic Link)

也叫:

符号链接。

类似:

Windows:

快捷方式。


例如:

桌面:

有:

游戏快捷方式

但是:

游戏:

真正位置:

D:\Game\xxx.exe

快捷方式:

只是:

保存:

目标路径。


结构:

快捷方式

↓

目标文件

特点:

如果:

目标文件删除。

软链接:

失效。


十、硬链接 vs 软链接(★★★★★)

硬链接 软链接
本质 同一个文件多个名字 一个路径指向另一个文件
是否复制数据
目标删除 仍可访问 失效
是否跨文件系统 通常不能 可以
类似 别名 快捷方式

口诀:

硬链接是同一个人多个名字,软链接是地址条。


十一、inode(Linux重点)

现在:

进入Linux文件系统。

Linux:

有一个非常重要概念:

inode


Windows:

喜欢:

用FCB理解。

Linux:

用:

inode。


inode:

是什么?

简单理解:

文件的身份证。


inode保存:

例如:

文件大小

权限

时间

数据块位置

引用数量

注意:

inode:

不保存:

文件名。


为什么?

因为:

文件名:

属于:

目录。


结构:

目录

文件名

↓

inode

↓

数据块

十二、Linux为什么删除文件快?

因为:

删除文件:

实际上:

删除:

目录中的名字。

然后:

inode引用数减1。


不是:

马上:

擦除:

整个数据。


所以:

Linux删除大文件:

为什么:

很快?

因为:

不用马上清空几十GB数据。


十三、本课重点总结(★★★★★)

必须掌握:


目录

保存文件信息的特殊文件。


文件查找

流程:

路径

↓

目录

↓

FCB/inode

↓

数据块

目录结构

现代:

树形目录。


硬链接

多个名字:

指向:

同一个文件。


软链接

类似:

快捷方式。

保存:

目标路径。


inode

Linux文件核心结构:

保存:

文件属性和位置。

不保存:

文件名。


十四、口诀

目录:

目录存名字,inode存信息。

链接:

硬链接同文件,软链接像快捷。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐