linux教程第六章
数据处理是计算机的主要功能之一,与数据处理相关的数据管理和数据保存是必不可少甚至是较为重要的环节。在计算机中,大量的数据和信息是通过文件存储和管理的。文件系统负责管理文件和逻辑文件系统,提供管理设备、屏蔽设备复杂性的手段,为系统内核其他部分、用户命令和系统函数调用提供统一的服务接口。 本章主要讨论Linux系统中文件的概念、 目录结构及访问权限,Linux的逻辑文件系统Ext2, 虚拟文件系统VFS, 文件系统管理及缓冲区管理等内容。管道(FIFO)文件是利用文件系统作为接口实现进程间的通信,本章不再介绍,具体原理请参见2.2.6“进程通信”部分。 第6章 文件系统 6.1 文件系统概述 6.2 文件管理 6.3 目录 6.4 逻辑文件系统——Ext2 6.5 虚拟文件系统——VFS 6.6 小结 习题 6.1 文件系统概述 通常我们把与管理文件有关的软件和数据,统称为文件系统。它方便地组织管理计算机中的所有文件,为用户提供文件的操作手段和存取控制。同时,文件系统隐藏了系统中最为纷繁复杂的硬件设备特征,为用户以及操作系统的其他子系统提供一个统一、简洁的接口,通过文件系统,使得用户方便地使用计算机的存储、输入/输出等设备。 在学习Linux进程管理时,我们也许注意到,系统惟一感知和控制进程的关键数据——进程控制块中,除了CPU和内存资源之外,只包含了文件系统信息和文件信息,而没有设备的任何信息,这就是文件系统所起的作用。 Linux系统中把CPU、内存之外所有其他设备都抽象为文件来处理。进程只和文件系统打交道,具体的细节,由设备管理部分具体实现并为文件系统提供尽可能简洁统一的接口。因此,文件系统还同时充当着设备管理接口的角色,用户进程使用和操作具体的设备,都必须通过文件系统进行。文件系统是操作系统中与管理文件有关的所有软件和数据的集合。 不同的操作系统可能采用不同的文件系统。支持多种不同类型的文件系统是Linux操作系统的主要特色之一。Linux系统自身的文件系称为ext2,它也是Linux默认的文件系统。我们把ext2以及Linux支持的文件系统称为逻辑文件系统, 通常每一种逻辑文件系统服务于一种特定的操作系统,具有不同的组织结构和文件操作函数,相互之间差别很大。Linux在传统的逻辑文件系统的基础上,增加了一个称为虚拟文件系统(VFS)的接口层,如图6.1所示。 图6.1 Linux文件系统层次结构示意图 系统中所有的设备,包括字符设备、块设备和网络设备,都按照某种方式由逻辑文件系统统一管理,逻辑文件系统为它们提供访问接口。虚拟文件系统在最上层,管理各种逻辑文件系统,屏蔽了它们之间的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口, 使得不同的逻辑文件系统按照同样的模式呈现在使用者面前,对于普通用户来讲,觉察不到逻辑文件系统之间的差异,可以使用同样的命令来操作不同逻辑文件系统所管理的文件,可以在它们之间自由地复制文件。 6.2 文件管理 6.2.1 文件 文件可以简单地理解为一段程序或数据的集合。在操作系统中,文件被定义为一个命名的相关字符流的集合,或者一个具有符号名的相关记录的集合。符号名用来惟一地标识一个文件,也就是文件名。Linux系统中,文件名最大长度由NR-NAME-LEN控制,默认值为255个字符。 文件定义中所指出的不同基本组成单位表示了两种形式的文件。相关字符流组成的文件是一种无结构文件或流式文件。相关记录组成的文件称为记录式文件。记录式文件通常主要用于信息管理。 在UNIX、Linux等操作系统中,把包括硬件设备在内的能够进行流式字符操作的内容都定义为文件。 Linux系统中文件的类型包括:普通文件,目录文件,连接文件,管道(FIFO)文件、设备文件(块设备、字符设备)和套接字。 Linux系统把文件按照其性质、用途等标准划分为不同的类别。操作系统根据文件的类型处理文件。按照用途,文件可以分为:系统文件、库文件和用户文件。系统文件直接和操作系统本身有关,包括操作系统核心和各种系统应用程序和数据;库文件通常指系统提供给用户调用的各种标准过程、函数和应用程序;用户文件是用户委托计算机文件系统管理的文件。 当然,这只是一种相对的标准,对于Linux系统,根据自己的实际需要,具有特殊权限的用户(系统管理员)可以重新修改并编译升级整个内核,这个过程将会修改大部分系统文件,同时库文件也可以按照自己的需要添加和修改。 根据文件中数据的表示形式,可以把文件划分为ASCII码文件和二进制文件。 按照文件操作过程中的保护级别,文件可以划分为只读文件、读写文件、可执行文件,Linux操作系统通过这样的方式来控制文件的访问权限。按照文件中信息流向还可以把文件分为输入