文件系统

文件系统存储文件属性、文件内容和目录。这些内容是怎样在文件系统中存储的呢?Linux将磁盘块分成了3部分。

未命名文件.png

其中,

超级块用来存储文件系统本身的信息。

i-node节点表存放i-node节点,它存储了文件属性、所有者、权限等元数据信息

数据区分块存储文件数据,它是不连续存储的,一个文件的内容可能散落在数据区内部。

超级块

它是文件系统的第一个块。这个块存放文件系统结构信息,如每个区的大小,还记录这个磁盘块未使用空间信息。

i-node节点表

每个文件的属性信息存放在这个表中,以i-node号为索引,所有i-node大小相同,是一个i-node数组,每个文件在都对应着唯一一个i-node号,即一个唯一的i-node节点。但是某个i-node节点可能对应多个文件名,这个后面提到。

只需要记住:表中每个节点按位置标识。

数据区

数据区存放文件实际内容。磁盘是按固定大小分块的,如果一个文件的大小超过了一个块的内容,那就为它分配多个块来存储。一个文件可能散落在好几百个磁盘块上,那么文件系统是如何跟踪这些块的呢?

文件和目录的工作过程

1. 创建文件的过程

文件有文件名、文件属性和文件内容。文件名存放在目录中,并与i-node号建立关联,文件属性存放在i-node中,文件内容存放在数据区。

因此,创建文件的四个主要操作如下:

存储文件属性:内核在i-node表中找一个空的i-node

存储文件数据:根据文件大小分配合适数量的空磁盘块,(Unix使用成组链接法管理空闲盘块

记录分配情况:在第1步的i-node节点上记录了第2步分配的磁盘序列

添加文件名到目录:以的形式在目录中建立文件名和实际的物理块号的关联。

2. 目录的工作过程

目录说白了就是包含了文件名的列表,按上面的理解,本质上就是有个包含i-node节点号和文件名的列表。

要查看文件名和i-node,只需要在 ls命令加上 -i选项

Snip20190111_10.png

由上可知,所有从文件中读取数据的命令,例如cat, more, who等,以及高级接口调用,都是把文件名传给open系统调用。内核首先根据文件名在目录中寻找文件名,进而知道这个文件名对应的i-node号,然后拿这个i-node号在i-node表中定位目标i-node,获取这个文件属性信息,内核这时候根据文件的权限位和执行者的UID判断是否有权限执行这个操作,如果没有,open返回 -1,并设置全局变量errno为EPERM。如果权限允许,则根据i-node中保存的磁盘块序列到数据区按序读取文件内容。

一个问题:Linux如何跟踪大文件呢?

综合上面的讨论,我们知道,一个大的文件需要很多磁盘块,并且还知道i-node节点存放磁盘块的分配列表。问题就在于,固定大小的i-node如何存储大量,甚至超出节点范围的磁盘序列呢?

Unix/Linux的做法是:将磁盘分配列表的大部分存储在数据块,在i-node节点中存放指向那些块的指针

链接

1. 多重i-node和交叉链接

一个磁盘可以格式化为某一种类型的文件系统,一个文件系统自身是一棵独立目录树,而Linux允许多文件系统存在的原因是,它允许多个文件系统通过挂载形成一棵目录树(其实是树的树)。

Snip20190111_11.png

上图中,/dev/disk1s1 分区挂载在根目录/上, devfs挂载在/dev上。

注:分区是物理的,目录是逻辑的,分区必须挂载在具体目录上才能使用。

上面我们知道,一个磁盘中有i-node表,多个文件系统有多个i-node表。多棵树(文件系统)相互连接意味着一个i-node号并不唯一标识文件了,如不同文件系统的231号i-node指涉到不同的文件。

因此,Linux不允许从不同的文件系统生成指向同一文件的链接。

2. 符号链接

硬链接是将目录链接到树的指针,同时也是将文件名和文件本身(i-node)链接的指针。硬链接不能指向其他系统的i-node,即不能跨系统链接。为了支持跨系统,Linux提供了软连接(符号链接)。顾名思义,符号链接通过文件名引用文件,而不是i-node。

Snip20190111_12.png

如图所示,分别建立了a.txt 的硬链接 hardlink 和软链接 softlink ,检查发现,硬链接和源文件拥有同一个i-node号,而软链接与源文件的i-node不一样,softlink并不是原始文件a.txt, 但是读写它时,看起来跟原始文件一样。

Linux使用引用计数思想管理i-node,实际上一个文件名并不是实际的文件,只是一个指针,指向i-node,当i-node不再被指向,引用计数为0时,才实际删除文件数据。

硬链接按i-node引用文件的含义是:链接文件与原始文件引用同一个i-node,创建一个硬链接实际上增加一个到指定i-node的引用计数,删除某个硬链接只是减少一次计数,原始文件名仍指向该i-node,原始文件照常存在。

软链接按文件名引用的含义是:ln -s生成的文件是原始文件名的一个符号链接,这个软链接文件的文件属性(修改时间,文件大小等)都不同于原始文件,正因为它不涉及原始文件的i-node,因此才支持跨系统和到目录的链接。在交叉设备链接情况下,如果保存原始文件的目录被删除了,或原始文件改名了,符号链接失效。

Snip20190111_14.png

总而言之,硬链接按i-node引用文件, 软链接按文件名引用文件,硬链接类似于复制,软链接类似于快捷方式。

参考

《Unix/Linux编程实践教程》

linux目录详解i-node,i-node节点与链接相关推荐

  1. Linux 目录详解 树状目录结构图

    1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/ ...

  2. FHS Linux目录详解

    <一>FHS与Linux目录一般配置 FHS简述 Filesystem Hierarchy Standard(文件系统层次化标准),是为了规范Linux distributions开发团队 ...

  3. Linux目录详解,软件应该安装到哪个目录

    转自:https://www.w3h5.com/post/336.html 我们应该知道 Windows 有一个默认的安装目录专门用来安装软件.Linux 的软件安装目录也应该是有讲究的,遵循这一点, ...

  4. Linux目录详解以及软件安装规范

    目录 一.前言 二.目录介绍 三.建议 一.前言 我们在使用Linux服务器过程中,会困惑系统自带的每个目录的作用是什么? 以及我们软件安装该安装在哪个目录下比较合适?以至于不会混乱,方便后续查找文件 ...

  5. Linux /proc目录详解

    Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...

  6. 异星工厂mod位置linux,异星工厂怎么打MOD 异星工厂游戏目录详解-游侠网

    异星工厂怎么打MOD?异星工厂是允许玩家自定义MOD来玩的,加上MOD也可以提升游戏体验,下面小编就给大家带来异星工厂游戏目录详解,一起来看看吧. 异星工厂游戏目录详解 \Root\config-pa ...

  7. Linux中etc目录详解

    Linux中etc目录详解 /etc目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc   or/etc/rc.d   or/etc/rc*.d   启动.或改变运行级时运行的sc ...

  8. linux下/etc目录详解

    Linux /etc目录详解 /etc目录  包含很多文件.许多网络配置文件也在/etc 中.  /etc/rc   or/etc/rc.d   or/etc/rc*.d    启动.或改变运行级时运 ...

  9. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解和Linux系统各个目录的作用 标签: linuxtcpfunctionclassfirefoxtimer 2012-01-11 23:08 45517人阅读 评论(2) ...

最新文章

  1. 内存问题分析的利器——valgrind的memcheck
  2. Ubuntu Tensorflow object_detection API 目标检测环境搭建
  3. Android底层开发之旅—蓝牙系统分析
  4. 远程桌面与远程协助的区别mstsc /console
  5. 博导眼里本科生的科研能力:“他们还在玩泥巴”
  6. mysql php pdo_php PDO mysql写法
  7. 高精度矢量汉字的一种填充方法_惯导解算数学基础4(等效旋转矢量解,圆锥补偿解)...
  8. Log4j介绍,log4j.properties配置详解
  9. flask加载配置文件的三种方法
  10. VM14安装及使用环境配置
  11. 杨强教授新番!破解机器学习数据孤岛和数据保护难题
  12. 短视频直播app源码——软件系统开发方案
  13. Mac 安装Nessus
  14. html页面会出现浏览器崩溃,Chrome浏览器所有页面全部崩溃解决办法。
  15. 【原创】基于SSM的医院预约挂号系统(医院预约挂号系统毕设源代码)
  16. 《山里的日子(记录片)》观后感——回不去的农村
  17. 首旅如家:夜间赏樱、采茶旅拍和登高许愿成为2021打开春天的新方式
  18. QListWidget动态添加内容,交换两行内容
  19. 企业计算机系统管理基本要求,药品经营企业计算机系统介绍.ppt
  20. MACD与OBV结合,用OBV进行改进MACD指标公式

热门文章

  1. 如何使用TCP/IP开发网络程序
  2. 图神经网络,这到底是个什么?
  3. 懂分析、会预测,你见过这样的华为云DAS吗?
  4. GaussDB(DWS)应用实践丨负载管理与作业排队处理方法
  5. 如何利用小熊派获取MPU6050六轴原始数据
  6. 链家信息python
  7. 优达学城深度学习之六——TensorFlow卷积神经网络
  8. 数字图像处理 阈值分割 MATLAB实验
  9. 【方便自己使用】KKT条件
  10. hashmap怎么取值_HashMap?面试?我是谁?我在哪