第10章 Linux文件系统;概述;*;1. Linux文件系统的特点; Linux文件系统的结构与Windows的区别;Linux文件系统有一个“根”,然后在根上分杈(目录),任何一个分杈上都可以再分杈,杈上也可以长出“叶子”(文件)。根和杈在Linux中被称为是“目录”或“文件夹”。而叶子则是一个个的文件。这样不论底层存在设备是什么,展现在用户面前的均是一个统一的文件系统视图。;Linux的文件系统只有一个文件树,整个文件系统是以一个树根“/”为起点的,所有的文件和外部设备都以文件的形式挂结在这个文件树上,包括硬盘、软盘、光驱、调制解调器等,这和以“驱动器盘符”为基础的Microsoft Windows系统有很大区别。 ;Linux文件系统树形目录结构;系统在创建每个目录时都会自动创建两个目录文件,一个是“.”,代表该目录自己,另一个是“..”代表其父目录。对于根目录 “.”和“..”均代表自己。;文件系统被组成成树形结构后,文件名由路径名给出。路径名确定一个文件在文件系统中的位置。路径名也可从正在执行进程的当前目录开始指定:如,当前目录是/home/zhang,路径名a.txt与/home/zhang/a.txt同效。;路径(path);Linux文件系统除具有树形结构外,还具有特点:文件是无结构的字符流式文件文件可以动态地增长或减少文件数据可由文件拥有者设置相应的访问权限而受到保护外部设备都被看作是文件。设备可通过文件系统隐蔽掉设备特性。;2. Linux的文件类别;linux 中文件的存取权限根据用户类型分文件所有者、所有者所在的组、其他用户,操作模式只分成三种:读( 4 )、写( 2 )、执行( 1 ),根据用户类型正好分成三组操作模式共 9 位来表示,对应于三位的八进制。 ;普通文件普通文件和目录都是无结构、无记录概念的字符流式文件。存储用户和系统的有关数据和程序的文件。;目录文件由文件系统中的各个目录所形成的文件。目录文件在形式上与普通文件一样,由系统将其解释成目录。包括文件名、子目录名及其指针。它是LINUX储存文件名的唯一地方,可用ls列出目录文件。;设备文件在目录文件和文件索引节点表中占据相应的位置之外,并不占有实际的物理存储块。因此,对设备文件的读写操作实际上变为对设备的操作,而对设备文件的保护也将变成对设备的保护。如:# cp /dev/tyy1 terminalread;3. Linux的VSF及其数据模型; ;VFS隐藏了各种硬件的具体细节,为所有的文件系统操作提供了统一的接口。这样,在Linux中可使用多种文件系统。真正的文件系统,如ext2,nfs,vfat等,必须在VFS提供的统一接口支持下才能工作。这种统一的接口对于应用程序而言是透明的。;虚拟文件系统VFS在文件系统中引入了一个通用文件模型,它是面向对象的,这个对象是用数据结构实现的,由哪些对象组成?;*;*;文件的物理结构是怎样的?;*;为了减少目录文件所占的物理块,linux将文件控制块一分为二,第一部分是文件名,第二部分是其他信息。其他信息被组织成定长的数据结构,称为索引节点。每个索引节点都有一个编号,称为索引号。;;*;提高文件访问速度,关键在于减少访问磁盘的次数,即减少访问读取物理块的数量。;索引节点被保存在外存中,称为外存索引节点。对某个文件的访问,会经常使用到它的索引节点,这样就会频繁地在内存和外存之间来回拷贝索引节点,效率较低。;linux在系统主存中开辟了一张内存索引节点表,该表共有100个表项,每个表项就是一个索引节点,称为内存索引节点。;*;索引节点是怎么描述文件数据的物理存储结构呢?;Linux使用索引表来管理存放文件数据的物理块。;索引表是如何存放的呢?索引表同文件数据一样,也存放在物理块中。索引节点中包含了索引表所在物理块的块号,因此通过索引节点就可以访问到索引表,从而访问到文件数据。;0;Linux支持的最大文件体积:(10+128+128*128+128*128*128)*512字节 约等于128*128*128*512,即2的30次方,大约1G字节。
; 系统打开文件表用户使用文件系统提供的API,按名访问文件,而不是直接访问索引节点。访问索引节点是文件系统的事情。文件系统必须根据文件名,在目录中查找到该文件的索引号,找到索引号后才能从内存索引节点表中查找索引节点。虽然索引节点可能被缓存在内存索引节点表中,但是在目录中查找索引号需要访问磁盘,效率是低下的。;文件系统在内存中建立了一张系统打开文件表,该表共有100个表项。每个表项中存放了一个已打开的文件的索引号和其它信息。在文件被打开的时候,文件系统会在系统打开文件表中登记相应的表项。