linux目录详解i-node,i-node节点与链接
文件系统
文件系统存储文件属性、文件内容和目录。这些内容是怎样在文件系统中存储的呢?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节点与链接相关推荐
- Linux 目录详解 树状目录结构图
1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/ ...
- FHS Linux目录详解
<一>FHS与Linux目录一般配置 FHS简述 Filesystem Hierarchy Standard(文件系统层次化标准),是为了规范Linux distributions开发团队 ...
- Linux目录详解,软件应该安装到哪个目录
转自:https://www.w3h5.com/post/336.html 我们应该知道 Windows 有一个默认的安装目录专门用来安装软件.Linux 的软件安装目录也应该是有讲究的,遵循这一点, ...
- Linux目录详解以及软件安装规范
目录 一.前言 二.目录介绍 三.建议 一.前言 我们在使用Linux服务器过程中,会困惑系统自带的每个目录的作用是什么? 以及我们软件安装该安装在哪个目录下比较合适?以至于不会混乱,方便后续查找文件 ...
- Linux /proc目录详解
Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...
- 异星工厂mod位置linux,异星工厂怎么打MOD 异星工厂游戏目录详解-游侠网
异星工厂怎么打MOD?异星工厂是允许玩家自定义MOD来玩的,加上MOD也可以提升游戏体验,下面小编就给大家带来异星工厂游戏目录详解,一起来看看吧. 异星工厂游戏目录详解 \Root\config-pa ...
- Linux中etc目录详解
Linux中etc目录详解 /etc目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc or/etc/rc.d or/etc/rc*.d 启动.或改变运行级时运行的sc ...
- linux下/etc目录详解
Linux /etc目录详解 /etc目录 包含很多文件.许多网络配置文件也在/etc 中. /etc/rc or/etc/rc.d or/etc/rc*.d 启动.或改变运行级时运 ...
- Linux /dev目录详解和Linux系统各个目录的作用
Linux /dev目录详解和Linux系统各个目录的作用 标签: linuxtcpfunctionclassfirefoxtimer 2012-01-11 23:08 45517人阅读 评论(2) ...
最新文章
- 内存问题分析的利器——valgrind的memcheck
- Ubuntu Tensorflow object_detection API 目标检测环境搭建
- Android底层开发之旅—蓝牙系统分析
- 远程桌面与远程协助的区别mstsc /console
- 博导眼里本科生的科研能力:“他们还在玩泥巴”
- mysql php pdo_php PDO mysql写法
- 高精度矢量汉字的一种填充方法_惯导解算数学基础4(等效旋转矢量解,圆锥补偿解)...
- Log4j介绍,log4j.properties配置详解
- flask加载配置文件的三种方法
- VM14安装及使用环境配置
- 杨强教授新番!破解机器学习数据孤岛和数据保护难题
- 短视频直播app源码——软件系统开发方案
- Mac 安装Nessus
- html页面会出现浏览器崩溃,Chrome浏览器所有页面全部崩溃解决办法。
- 【原创】基于SSM的医院预约挂号系统(医院预约挂号系统毕设源代码)
- 《山里的日子(记录片)》观后感——回不去的农村
- 首旅如家:夜间赏樱、采茶旅拍和登高许愿成为2021打开春天的新方式
- QListWidget动态添加内容,交换两行内容
- 企业计算机系统管理基本要求,药品经营企业计算机系统介绍.ppt
- MACD与OBV结合,用OBV进行改进MACD指标公式