目录

一、文件系统的层次模型

1、层次模型图示

2、文件系统模型可以划分为三个层次

3、文件存在两种形式的结构

(1)逻辑结构

(2)物理结构

4、 文件的存储空间管理

二、目录管理

1、文件控制块FCB

2、索引节点

3、文件目录(目录文件)

4、BFD:基本文件目录表

5、SFD:符号文件目录表

三、 Linux中的文件系统

1、Linux系统的一级目录

2、Linux中采用文件存取控制表

3、 Linux采用两层结构

4、 文件系统操作的系统调用界面图

四、 Linux文件系统中的对象

1、超块对象

2、inode对象

3、file对象

4、dentry对象

5、查看文件的i节点信息

6、Linux文件系统中的缓冲区

五、Linux系统中的目录管理

1、Linux系统中的磁盘块管理

2、空闲盘块的组织

3、Linux中的文件访问

4、Linux对i节点的管理

六、 Linux系统中的文件操作

1、Linux系统中的文件操作

2、文件分配过程

3、文件回收过程

4、 检索目录

一、文件系统的层次模型

1、层次模型图示

2、文件系统模型可以划分为三个层次

(1)最高层是文件系统提供给用户的接口(GUI、cmd、System Call)。
(2)中间层是对对象进行操作和管理的软件集合(文件存储空间的管理,文件目录管理,地址转换,文件读写管理,文件的共享与保护。)
(3)最底层是对象(文件、目录、磁盘空间)及其属性。

3、文件存在两种形式的结构

(1)逻辑结构

  • 流式文件(非记录文件):指文件中的数据是由一串字节组成的信息流序列,即字节流文件(是一种无结构的文件)。
  • 记录式文件:是一种有结构的文件,有若干逻辑记录信息所组成的记录流文件。
  • 文件的存取方法:顺序存取,直接存取(随机存取),索引存取(按键存取)。

(2)物理结构

  • 连续文件:把逻辑文件中的信息顺序地存储到连续的物理盘块中。文件的说明信息包括文件的起始块号和块的个数。不利于文件的动态变化。
  • 串连文件:用链接指针将存放文件信息的离散的物理盘块链接成一个队列。文件的长度可以动态变化,但是对文件记录的访问效率较低。
  • 索引文件:给每个文件分配一个索引表,记录每个记录的物理块。可以采用多级索引。

4、 文件的存储空间管理

  • (1) 空闲区表法
  • (2)空闲链表法
  • (3)位示图法
  • (4) 成组链接法

二、目录管理

从管理角度看,一个文件包括两部分:文件体文件控制块

1、文件控制块FCB

文件控制块(FCB):包括文件名、物理地址、逻辑结构、物理结构、存取控制信息及使用信息等。

2、索引节点

文件名文件描述信息分开。

使文件描述信息单独形成一个称为索引节点的数据结构,简称i-节点。

3、文件目录(目录文件)

文件目录中的每个目录项,仅由文件名及指向该文件所对应的i-节点的指针所构成。

4、BFD:基本文件目录表

文件系统中提供所有文件的基本文件目录表,存放除了文件名之外的文件说明信息和文件标识符ID。

5、SFD:符号文件目录表

存放文件名和文件标识符ID;

赋予BFD、空闲文件目录、主目录MFD的符号文件目录固定不变的标识符。

目录文件同样存储在外设中。为提高访问效率,将部分目录文件复制到内存中。

  • 打开文件:把该文件外存中的目录文件及i节点复制到内存中。
  • 关闭文件:在内存中删除该文件的目录文件和i节点。
  • 活动文件:在内存中为每个用户设置一张表,来存放该用户打开文件的SFD。
  • 活动BFD表:整个系统设置一张所有打开文件的BFD。

不同用户共同使用一个文件,以减少系统复制文件的开销。

采用链接方法:链接到目录中的共享文件。

三、 Linux中的文件系统

1、Linux系统的一级目录

  • /bin 存放系统常用命令
  • /sbin 存放系统管理员用的管理程序
  • /boot 存放启动时用的核心文件
  • /dev 存放所有的外设文件
  • /mnt 系统提供的临时挂载点
  • /etc 存放所有系统管理和配置文件
  • /proc 是个虚拟目录,是系统内存映射,可以直接获得系统信息
  • /lib 存放动态链接库
  • /var 存放经常修改的文件,如日志文件
  • /usr 存放用户使用的命令、程序、文档等
  • /tmp 存放临时文件
  • /root 系统管理员的主目录
  • /home 是用户的主目录
  • /lost+found 存放一些恢复文件

2、Linux中采用文件存取控制表

  • 用10比特表示每个文件的属性。
  • 第1位:“-”表示普通文件;“d”表示目录文件;“l”符号链接文件;“b/c”表示设备文件。
  • 第2~4位:表示文件主对文件的存取权限;
  • 第5~7位:表示同组用户对文件的存取权限;
  • 第8~10位:表示其他对文件的存取权限;
  • r表示可读,w表示可写,x表示可执行。

3、 Linux采用两层结构

  • 第一层是虚拟文件系统VFS,把各种实际文件系统的公共结构抽象出来,建立统一的以inode为中心的组织结构,为实际的文件系统提供兼容性。包括超级块(super block)和inode。
  • 第二层是linux支持的各种实际文件系统。

4、 文件系统操作的系统调用界面图

  • VFS记录可用的文件系统的类型;
  • 把设备与对应的文件系统联系起来;
  • 处理一些面向文件的通用操作;
  • 涉及针对具体文件系统的操作时,把它们映射到与控制文件、目录文件及inode相关的物理文件系统。
  • 建立文件系统:一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。
  • VFS只存在内存中,在系统启动时产生,在系统关闭时注销 。

四、 Linux文件系统中的对象

1、超块对象

存储一个已加载的文件系统的信息。对于基于磁盘的文件系统,这个对象与一个存储在磁盘上的文件系统的控制块对应。

2、inode对象

存储一个特定文件系统中文件的通用信息。包含在这个文件系统中的文件标识符。

3、file对象

存储在进程和打开的文件之间的互动信息。该对象只在进程打开这个文件时在内存中存在。

4、dentry对象

存储与该文件对应的目录项的链接信息。磁盘中也有该文件系统目录项的相关信息。

5、查看文件的i节点信息

命令:stat filename【文件名】

例:stat  f1

硬链接文件和软连接文件: 

6、Linux文件系统中的缓冲区

  • Inode cache:用于inode的申请和释放;
  • Dentry cache:用于查找目录文件的i节点;
  • Page cache:磁盘文件数据的读写;
  • Buffer cache:I/O设备读写;
  • Swap cache:页面写出到交换空间。

五、Linux系统中的目录管理

1、Linux系统中的磁盘块管理

LINUX中,把每个磁盘(带)看作是一个文件卷,每个文件卷上可存放一个具有独立目录结构的文件系统。一个文件卷包含许多物理块,并按块号排列。

0# 1# 2# 3# ……K# K+1# ……N#

  • 0#块用于系统引导或空闲,
  • 1#为超级块(superblock),存放文件卷的资源管理信息,如整个文件卷的盘块数、磁盘索引结点的盘块数、空闲盘块号栈及指针等。
  • 2#~K#存放磁盘索引结点。每个索引结点64B,
  • 第K+1#~N#存放文件数据。

2、空闲盘块的组织

采用成组链接法组织空闲盘块。

3、Linux中的文件访问

(1)

  • LINUX采用多级索引文件结构形式,通过i节点中的索引指针,直接或间接地指出该文件存放的物理盘块号。
  • 查找文件时,只需找到该文件的索引结点,便可采用直接或间接的寻址方式获得指定文件的盘块。
  • 可将逻辑文件的字节偏移量转换为文件的物理块号。先将字节偏移量转换为文件逻辑块号及块内偏移量,再把逻辑块号转换为文件的物理块号。

(2)

  • 每个进程的tusk_struct中设置一张用户文件描述符表(ASFD)
  • 只在首次打开文件时才需给出路径名。
  • 内核在该进程的用户文件描述符表中,分配一空项,取其在该表中的位移量作为文件描述符fd(file discriptor)返还给用户。
  • 当用户再次访问该文件时,只需提供fd,系统根据fd便可找到相应文件的内存索引结点。

(3)

为了方便用户对文件进行读/写及共享,系统中设置了一张文件表(ABFD)。每个用户在打开文件时,都要在文件表中获得一表项,其中包含下述内容:

  f.flag:文件标志,指示该文件打开是为了读或写;

        f.inode:指向打开文件的内存索引结点指针;

        f.offset:文件读写指针偏移值;

        f.count:文件引用计数。

4、Linux对i节点的管理

  • 每个文件都有一个唯一的磁盘索引结点(di_node)。
  • 文件被打开后,还有一个内存索引结点(i_node)。

创建一新文件时,就为之建立一个磁盘索引结点,以将文件的有关信息记入其中,并将用户提供的文件名和磁盘索引结点号一并组成一个新目录项,记入其父目录文件中。

文件被撤消时,系统要回收该文件的磁盘索引结点,从其父目录中删除该目录项。随着文件的打开与关闭,系统还要为之分配和回收内存索引结点。

文件模式,可以是正规文件、目录文件、字符特别文件、块特别文件和管道文件等几种;

文件被打开后,系统为它在内存索引结点表区中建一内存索引结点,以方便用户和系统对文件的访问。其中,一部分信息是直接从磁盘索引结点拷贝过来的,如i_mode、i_uid、i_gid、i_size、i_addr、i_nlink等,并又增加了如下各信息:

  • 索引结点编号i_number,作为内存索引结点的标识符;
  • 状态i_flag,指示内存索引结点是否已上锁、是否有进程等待此i结点解锁、i结点是否被修改、是否有最近被访问等标志;
  • 引用计数i_count,记录当前有几个进程正在访问此i结点,每当有进程访问此i结点时,对i_count+1,退出-1;
  • 设备号i_dev,文件所属文件系统的逻辑设备号;
  • 前向指针i_forw,Hash队列的前向指针;
  • 后向指针i_back,Hash队列的后向指针。

六、 Linux系统中的文件操作

1、Linux系统中的文件操作

(1)当内核创建一新文件时,要为之分配一空闲磁盘i节点,其过程如下:

  • 检查超级块上锁否。由于超级块是临界资源,诸进程必须互斥地访问它,要先检查它是否已上锁,若是则睡眠等待;
  • 检查i节点栈空否。若i节点栈中已无空闲节点编号,则应从盘中再调入一批i节点号进栈。若盘中已无空闲i节点,则出错处理,返回;
  • 从空闲i节点编号栈中分配一i节点,并对它初始化、填写有关文件的属性;
  • 分配内存i节点;
  • 将磁盘i节点总数-1,置超级块修改标志,返回。

(2) 当删除文件时,应回收其所占用的盘块及相应的磁盘i节点。具体有:

  • 检查超级块上锁否。若是,直接返回,即不把本次回收的i节点号记入空闲i节点编号栈中;
  • 检查i节点编号栈满否。若已满,无法再装入新回收的i节点号,立即返回,若未满,便将回收的i节点编号进栈,并使当前空闲节点数+1;
  • 置超级块修改标志,返回。

2、文件分配过程

由于允许文件被共享,因此,如果一文件已被其他用户打开并有了内存i节点,则此时只需将i节点中的引用计数+1。

如果文件尚未被任何用户(进程)打开,则由分配过程为该文件分配一内存i节点,并调用读磁盘过程将其磁盘i节点的内容拷贝到内存i节点中并进行初始化。

3、文件回收过程

进程要关闭某文件时,须调用文件回收过程,先对该文件内存i节点中的引用计数-1。若结果为0,便回收该内存i节点,再对该文件的磁盘i节点中的连接计数减1,若其结果也为0,便删除此文件,并回收分配给该文件的盘块和磁盘i节点 。

文件系统的一个基本功能是实现按名存取,它通过文件目录来实现。

必须使每一个文件都在文件目录中有一个目录项,通过查找文件目录可找到该文件的目录项和它的索引节点,进而找到文件的物理位置。

对于可供多个用户共享的文件,则可能有多个目录项。如果要将文件删除,其目录项也应删除。

构造目录先调用i节点分配过程为新建文件分配一磁盘i节点及内存i节点。

若分配失败则返回,分配成功时须先设置内存i节点的初值(含拷贝)。

调用写目录过程,将用户提供的文件名与分配给该文件的磁盘i节点号一起,构成一新目录项,再将它记入其父目录文件中。

用户在第一次访问某文件时,需要使用文件的路径名,系统按路径名去检索文件目录,得到该文件的磁盘索引节点,且返回给用户一个fd。以后用户便可利用该fd来访问文件,这时系统不需再去检索文件目录。

根据用户给出的路径名,从高层到低层顺序地查找各级目录,寻找指定文件的索引节点号。检索时,对以‘/’开头的路径名,须从根目录开始检索,否则,从当前目录开始,并把与之对应的i节点作为工作索引节点,然后用文件路径名中的第一分量名与根或与当前目录文件中的各目录项的文件名,逐一进行比较。

由于一个目录文件可能占用多个盘块,在检索完一个盘块中所有目录项而未找到匹配的文件分量名时,须调用读磁盘过程,将下一个盘块中的所有目录项读出后,再逐一检索。若检索完该目录文件的所有盘块而仍未找到,才认为无此文件分量名。

检索方式采用Hash方法。

4、 检索目录

  • 内核调用namei从根目录或从当前目录,沿目录树查找指定的索引结点。若未找到或该文件不允许存取,则出错处理返回NULL,否则转入下一步;
  • 分配内存索引节点。如果该文件已被其它用户打开,只需对上一步中所找到的i节点引用计数+1,否则应为被打开文件分配一内存i节点,并调用磁盘读过程将磁盘i节点的内容拷贝到内存i节点中,并设置i.count=1;
  • 分配文件表项。为已打开的文件分配一文件表项,使表项中的f.inode 指向内存索引节点;分配用户文件描述表项。

如有错误,敬请指正。

您的收藏与点赞都是对我最大的鼓励和支持!

Linux——文件管理(文件系统、目录管理、文件操作)相关推荐

  1. linux根-文件系统-目录管理-文件管理-用户及权限详解-用户组-用户管理-权限管理...

    一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上. 目录提供了管理文件的一个方便而有效的途径. Linux使用标准的目录结构,在安装的时候,安装 ...

  2. Linux虚拟文件系统vfs与文件操作始末

    虚拟文件系统(vfs)是Linux内核的子系统,其设计目的是对用户层(系统调用)屏蔽底层(各特定文件系统)实现的复杂性,对底层提供统一的接口与数据结构,使得能衔接各个特定文件系统(如ext2.ext3 ...

  3. Linux命令之目录和文件操作

    1 pwd:显示当前工作目录 [root@minion ~]# pwd /root 2 cd:切换当前工作目录 [root@minion /]# cd                   #切换到当前 ...

  4. Linux学习笔记之文件管理和目录管理类命令

    在开始理解Linux文件管理和目录类命令之前,有必要先说一下,关于操作系统在计算机中都做了哪些工作. 0.操作系统的工作 1.文件管理,增删改查 2.目录管理 3.进程管理 4.软件安装 5.运行程序 ...

  5. RHEL目录和文件操作:Linux文件系统管理

    实验名称:RHEL目录和文件操作:Linux文件系统管理 某企业的 Linux 服务器中新增了一块硬盘/dev/sdb,请使用 fdisk 命令新建/dev/sdb1 主分区和/dev/sdb2 扩展 ...

  6. Linux文件管理和用户管理

    Linux命令格式: 命令   [选项]   [参数] 命令:实现某种功能的程序.如ls.date 选项:命令中实现某种功能的字母(短选项)或单词(长选项)代号.如ls  --help  .  ls  ...

  7. Linux中/proc目录下文件详解 /proc/devices文件 /proc/modules文件

    http://blog.chinaunix.net/uid-10449864-id-2956854.html 原来对linux系统中的/proc目录不是很了解,只知道可以查看cpu,内存等相关的信息, ...

  8. linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...

    前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(oth ...

  9. Day07 红帽Linux —从命令行管理文件

    红帽Linux - 从命令行管理文件 文章目录 红帽Linux - 从命令行管理文件 一.目录文件夹内容及作用 练习题目 答案 二.路径定位和目录信息 路径定位 路径 切换目录 查看目录内容 ls指令 ...

  10. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

最新文章

  1. Houdini魔法特效制作学习教程
  2. js如何生成一个对象,并转化为json字符串
  3. Gemini论文笔记
  4. Scatec Solar拟在乌克兰建设60MW光伏电站
  5. 计算机科学与技术毕业答辩流程,计算机科学与技术学院毕业答辩工作细则
  6. 【Kafka】Kafka broker id 解释以及 自动生成id
  7. 一家独大的亚马逊,让人恐慌?
  8. android捕获全局异常,并对异常做出处理
  9. py+webdriver学习之旅6:cookie
  10. 批处理打开URL总结
  11. 成功解决生意参谋中transit-id和加密数据date
  12. Windows的cmd统计文件行数
  13. 深入理解Java内存模型的volatile语义
  14. pyká Unlimited for Mac(项目管理软件)
  15. 低延迟音频中的音频解码优化策略
  16. 科技英语写作中的动词时态和冠词的使用问题
  17. AES 轮密钥(子密钥如何生成).md
  18. xamarin android网络请求总结
  19. C——W小J的编程采坑与进步绪篇
  20. SHELL命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思

热门文章

  1. 1024网易程序员节,最上头的爱,给最好的你!
  2. 对讲机有哪些?如何选购对讲机?
  3. 百合网“免费”革命 一场饮鸩止渴的大戏
  4. 世纪佳缘与百合网结婚了!网络婚恋进入2.0时代 ?
  5. Kafka的运维利器-AdminClient
  6. 服务器集群速度文件传输,为什么要实现服务器集群
  7. Tinkpad笔记本双击开发Q盘不再提示创建恢复介质的对话框了,而且进入磁盘后文件夹是空的!
  8. 符冉迪 计算机 培训,采用多模糊支持向量机决策融合的积雨云检测.pdf
  9. IP地址介绍,子网划分(VLSM),构造超网(CIDR) 详解
  10. QtCreator插件开发(二)——QtCreator菜单和菜单项