Skip to content

文件的基本概念

2026 大纲 四(一)1 文件的基本概念

断电之后,数据还得在

内存管理那一章从头到尾都在解决一个问题:东西怎么放进内存。 但内存有个绕不开的性质——一断电就全没了,而且它再大也装不下所有数据。

所以必然还要有一层:把数据放在断电也不丢的地方。这就是外存,也就是这一章的起点。

可外存原始得很。它提供给软件的东西只有一个按编号排列的扇区数组—— 你能说的只有"把第 8213 号扇区读出来"。要在这层上直接写程序, 用户得自己记住数据在哪几号扇区、自己保证不覆盖别人的数据、 换一台机器还得全部重来。

于是需要一层抽象把这些全都挡住,这层抽象就是文件。 而整章的内容,就是把这层抽象一件件搭起来:

用户想按名字找东西,那就得有名字,还得有个地方把名字翻译成位置—— 这是文件概念、inode目录。 数据本身得在盘上摆好,摆的方式直接决定了它能不能随机访问、能不能长大—— 这是逻辑结构物理结构。 要分配空间就得知道哪儿还空着——这是空闲空间管理。 最后,一台机器上往往有好几个文件系统、好几块盘, 得把它们合成用户看到的那一棵树——这是虚拟文件系统挂载

这一节是起点,把"文件"这个抽象本身讲清楚。其中最要紧的一条是 属性并不都存在同一个地方——把它分成两处的那条判据, 会一路管到硬链接、改名、移动文件为什么不动 inode。

一、什么是文件

裸磁盘提供给软件的东西非常原始:一个按编号排列的扇区数组,你只能说"把第 8213 号扇区读出来"。直接在这层写程序会立刻遇到三个问题,而文件抽象的每一条性质都是被其中一个问题逼出来的:

裸磁盘的问题逼出的性质具体形态
用户记不住扇区号,程序换一台机器扇区号就变了按名存取文件必须有一个名字,由系统把名字翻译成位置
一份数据可能占很多不连续的扇区成组管理文件是一组信息的集合,而不是一个扇区
多个用户共用一块盘,互相踩踏属性与保护文件除了内容还要带元数据(所有者、权限……)

"名字 → 位置"这一层翻译,正是目录inode 要做的事。操作系统通过文件系统(File System)实现这层抽象:对上提供创建、删除、读写等接口,对下把逻辑文件映射到物理存储位置。

二、文件的属性

每个文件都有一组元数据(metadata)描述它自己——像一本书的版权页,记录作者、出版日期、页数,但不含正文。关键是这些属性并不都存在同一个地方

属性说明存放位置为什么放这边
文件名同一目录下唯一,是用户访问文件的标识目录项同一个文件可以有多个名字(硬链接),名字必须跟着目录走
标识符(inode 号)文件系统内部的唯一标识目录项它就是"名字 → 文件本体"这条映射的右半边
类型普通文件 / 目录 / 设备文件等inode属于文件本体的性质,改名字不改类型
位置文件在外存上的存储位置指针inode多个名字指向同一份数据,位置只能存一份
大小文件当前长度(字节 / 块数)inode同上,只能有一份且随写入变化
保护信息所有者、访问权限(读/写/执行)inode权限属于数据本身,不能靠换个名字绕过
时间戳创建 / 最后修改 / 最后访问时间inode记录的是本体被动过没有
链接计数有多少个目录项指向本文件inode只有本体知道自己被几个名字引用

三、文件的分类

四组分类互相正交,一个文件同时属于每一组中的某一类:

分类维度它在回答什么问题类别与示例
按用途这个文件归谁用系统文件(内核、驱动)/ 用户文件(文档、代码)/ 库文件(libc.so.dll
按逻辑结构文件内部有没有记录无结构(流式,字节流,如 .txt)/ 有结构(记录式,每条记录有固定格式)——见文件的逻辑结构
按存取方式用户能以什么顺序取到内容顺序存取(磁带典型)/ 随机存取(直接存取,磁盘典型)/ 索引存取(通过索引表定位记录)
按信息交换单位一次 I/O 搬多少字符设备关联文件 / 块设备关联文件

/usr/lib/libc.so 同时是库文件无结构文件随机存取文件块设备关联文件——四个维度各取一个值,互不冲突。

四、文件有哪些操作

操作一句话说明大纲点名
create建立:查重名 → 分配 FCB/inode → 加目录项 → 分配外存空间
delete删除:回收外存空间 → 删目录项 → 链接计数减 1
open打开:把目录检索的结果缓存进内存的打开文件表,返回 fd
close关闭:打开计数减 1,减到 0 才回写并释放表项
read读:从当前读指针位置取数据到内存缓冲区
write写:把缓冲区数据写到当前写指针位置,可能触发新块分配
seek重定位:只改读写指针,不碰磁盘补充
truncate截断:只丢弃内容、保留文件本身与全部属性补充

复杂操作由它们组合而成,例如「复制文件」= create 新文件 + 循环 read 源文件 + write 新文件 + 两次 close。每一步具体做了什么、为什么要分成两级打开文件表、读写和缓冲区什么关系,全部在文件的操作展开。

考点速记

  1. 文件是一组有意义信息的集合,以文件名为标识,由文件系统统一管理;用户按名存取,不必知道数据落在哪些盘块上。
  2. 三条性质各被一个问题逼出来:记不住扇区号 → 按名存取;数据占很多不连续扇区 → 成组管理;多用户共用一块盘 → 属性与保护
  3. "文件是最小分配单元"与"磁盘块是分配单元"不矛盾,主语不同:用户能命名、能整体操作与授权的最小对象是文件;系统真正向磁盘划走空间的最小物理单位是磁盘块。1 字节的文件照样占满一整块,多出的是内部碎片
  4. 属性放目录项还是 inode,判据只有一条:看这个属性是跟着名字变的还是跟着文件本体变的。跟着名字 → 目录项(文件名、inode 号);跟着本体 → inode(类型、位置、大小、权限、时间戳、链接计数)。
  5. 这条判据的两个直接推论:① inode 里不含文件名 → 一个 inode 能挂多个名字,这就是硬链接成立的全部原因;② 改名、移动文件不动 inode,只改目录项。
  6. 唯一性范围:文件名在同一目录内唯一;标识符(inode 号)在整个文件系统内唯一。
  7. 四种分类维度互相正交——按用途、按逻辑结构、按存取方式、按信息交换单位各回答一个不同问题,一个文件在四个维度上各取一个值,不是"文件有十几种类型"的一张长清单。
  8. 存取方式被物理结构卡着:隐式链接分配的文件无论逻辑上怎么声明都只能顺序存取——不把当前块读进来就不知道下一块在哪。
  9. 大纲点名的六个操作是 createdeleteopenclosereadwrite;另有 seek只改读写指针、不碰磁盘)与 truncate只丢内容、保留文件与全部属性)。

这一节在真题里被考过的形式

文件的基本概念本身不单独成题,本页下方因此没有练习区。

但它在大纲里(四(一)1),不能跳过——它是整章几乎所有题的前置认知, 只是从不单独设问。具体来说,第四条那个"跟着名字还是跟着本体"的判据, 直接决定了下面这几类题会不会做:

  • 问文件访问控制信息该存在哪(2009-30,在 inode 讲)——答案落在 FCB/inode 一侧,靠的就是"权限跟着本体走"。
  • 问新建文件时文件系统做了什么、不做什么(2025-29,在 inode 讲)——错项是"在目录文件中写入 F 的访问权限信息",理由同样是权限不在目录项里
  • 判断硬链接的性质(2017-31、2009-31,在硬链接和软链接讲)——两个名字共享同一个 inode,这件事的全部依据就是第五条推论①。
  • 问删除文件、改名、移动时改了什么(2013-23、2021-30,在目录硬链接和软链接讲)——靠推论②。

复习优先级读一遍建立框架即可,不必单独准备。 唯一需要牢记的是第四条那条判据 和它的两个推论——把"文件名和 inode 号在目录项、其余全在 inode"这句话记死, 本章后面四五道题的答案会自己浮出来。第三条(文件 vs 磁盘块)和第八条 (存取方式受物理结构限制)容易被设成错项,也要留意。

易错:认为文件的全部属性都存在同一个地方。文件名与 inode 号在目录项,其余在 inode

易错:认为访问权限存在目录项里。权限跟着文件本体走,在 inode 里——否则换个名字就能绕过权限。

易错:认为 inode 里存着文件名。不存——正因为不存,一个 inode 才能挂多个名字(硬链接)。

易错:认为改名或移动文件会改动 inode。只改目录项,inode 一个字节不动。

易错:认为"文件是最小分配单元"和"磁盘块是分配单元"互相矛盾。主语不同:前者对用户,后者对系统。

易错:认为逻辑上声明成随机存取就一定能随机存取。隐式链接分配的文件只能顺序存取

教材出处
  • 汤小丹《计算机操作系统》:文件控制块含基本信息、存取控制信息、使用信息三类,"文件与文件控制块一一对应,文件控制块的有序集合称为文件目录,一个文件控制块就是一个文件目录项",见印刷版 p233(7.3.1 文件控制块和索引结点)。
  • 同书 p234 说明 Unix 把文件名与文件描述信息分开、目录项仅由文件名与 i 结点指针构成,是本篇"属性分两处存放"的依据。

相关知识

文件元数据与索引节点文件的操作文件的逻辑结构文件的物理结构目录