【文件系统】

news2024/12/24 20:47:00

目录

1 inode

 2 软链接

3 硬链接


1 inode

当我们创建一个文件时,用带上 -i 选项可以查看文件的inode:

 其中第一个选项就是文件的inode,除此之外另外几列表示的是:

  • 模式
  • 硬链接数
  • 文件所有者
  • 所属组
  • 大小
  • 最后修改时间
  • 文件名

 ls -l读取存储在磁盘上的文件信息,然后显示出来:

 那么究竟什么是inode呢?

为了能解释清楚 inode 我们先简单了解一下文件系统:

Linux ext2 文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的 block 。一个 block 的大小是由格式化的时候确定的,并且不可以更改。例如 mke2fs -b 选项可以设 block 大小为 1024 2048 4096 字节。而上图中启动块( BootBlock )的大小是确定的。
  • Block Groupext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck inode的总量,未使用的blockinode的数量,一个blockinode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了 。
  • GDTGroup Descriptor Table:块组描述符,描述块组属性信息。
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用 。
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • inode节点表:存放文件属性 如文件大小,所有者,最近修改时间等 。
  • 数据区:存放文件内容 。

 注意:

1 为什么文件系统中Super Block 在每一个文件的属性信息都有呢?

这是为了防止由于属性信息损坏使超级块被损坏而导致文件系统本身的结构信息丢失。

2 如何理解删除文件?

删除文件本质是直接在将inode Bitmap中对应文件的比特位置为0,并不需要修改数据区的内容。

3 文件名与inode的区别?

linux系统只认识inode编号,文件的inode属性中是不存在文件名的,文件名只是给用户看的。我们在一个目录上多个建立文件实质上是该目录维护了文件名与inode的关系,所以我们能够通过文件名找到该文件。

4 既然每一个数据块大小已经确定了,那么文件过大应该怎么管理呢?

实际inode会通过维护一张表来帮助我们管理文件,我们通过这张表建立索引来表示哪些数据块是属于哪一个文件,也就是一个文件可能够对应着多个数据块,这样即便是大文件我们依旧可以很好的管理起来。

5 有没有可能文件数据块没用完,但是inode没有了?或者inode还有,但是数据块没有了?

这两种情况都是有可能发生的。数据块没用完,但是inode没有了,可能是建立了很多的空文件(小文件);inode还有,但是数据块没了可能建立的文件太大了。

 将属性和数据分开存放:

创建一个新文件主要有一下 4 个操作:
1. 存储属性
内核先找到一个空闲的 i 节点(这里是 263466 )内核把文件信息记录到其中。
2. 存储数据
该文件需要存储在三个磁盘块,内核找到了三个空闲块: 300,500 800 。将内核缓冲区的第一块数据复制到 300 ,下一块复制到 500 ,以此类推。
3. 记录分配情况
文件内容按顺序 300,500,800 存放。内核在 inode 上的磁盘分布区记录了上述块列表。
4. 添加文件名到目录
新的文件名 abc linux 如何在当前的目录中记录这个文件?内核将入口( 263466 abc )添加到目录文件。文件名和 inode 之间的对应关系将文件名和文件的内容及属性连接起来。

 2 软链接

首先来看看基本命令是啥?

ln -s 源文件名字 要生成的软链接文件名字 //可以指定路径生成

 不知道大家观察到了没有,通过软链接生成的文件inode编号与源文件不一样,也就是说生成的软链接文件与源文件是两个文件,那么软链接有啥作用吗?

我们换一个应用场景:

我们创建一系列的目录,在最后一个目录中创建一个文件,形成这种结构:

 当我们想要在与a目录同级目录下运行可执行文件可以使用这种方式:

 这种方式就是软链接,通过软链接我们就能够直接用./test-sortt的方式运行可执行文件,再也不用一个一个指定路径来查找了,这种方式类似与Windows中的桌面快捷方式。


3 硬链接

与软链接对应,硬链接的命令如下:

ln 源文件名字 要生成的硬链接文件名字

 通过硬链接我们不难发现生成的硬链接文件的inode编号与源文件的一摸一样,说明此时并没有产生新的文件,只是给源文件取了一个别名,我们观察到第3列的数据也能够知道,其中上图第3列的数据表示的是硬链接数。

我们想要去掉硬链接除了可以用rm删除外还可以用unlink(软链接也可以用这个命令删除)。

我们创建一个普通文件的默认硬链接数是1,那么我们创建一个目录的默认硬链接数是多少?

我们可以来试试:

 为啥是2呢?

我们观察观察下面图:

 这时由于我们默认创建的目录下有两个隐藏的目录 ...  其中.代表的是当前路径,.与dir共用一个inode,而..是dir路径的上一个路径(lesson14)的inode,所以这也就很好的解释了为啥创建目录的默认硬链接数是2。

问题来了,我们能够为目录创建硬链接吗?

 答案是否定的,也就是操作系统并不会让用户自己为目录创建硬链接,为什么呢?

其实也很好解释,如果操作系统允许用户创建目录的硬链接的话,那么目录的树形结构就有可能被破坏,而成了图形结构,那么查找文件或者目录时就会出现问题。

之前再讲解linux基本命令时就已经提出了文件的3个时间:

  • Access 最后访问时间
  • Modify 文件内容最后修改时间
  • Change 属性最后修改时间

 最后两个都比较好理解,关键是第一个Access,其实在讲解makefile时我已经讲了,当我们没有修改文件的内容时,文件的最后访问时间是不会变的,也就是上次make的时间早于文件内容修改的时间,所以就不让你再make了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/481236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows编译安卓源码记录

环境 Windows10 vmware17 ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools安装情况,如果vmtools异常很麻烦,试了n多方法,最后还是重新安装系统解决, 如果ok的话,再继续下步骤,否…

【C++入门第四期】类和对象 ( 上 )

前言类的使用类的定义类的两种定义方式:成员变量名的定义建议 类的访问限定符类的作用域类的实列化如何计算类的大小结构体内存对齐规则 this指针this指针的特性 前言 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过…

Linux的目录结构

在Linux世界里,一切皆文件硬件如显卡、cpu等都会映射成一个文件具体的目录结构/bin 是Binary的缩写,这个目录存放着最经常使用的命令 /sbin(/usr/sbin、/usr/local/sbin) s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序 /h…

Elasticsearch扫盲篇

1. 什么是搜索? 在日常的工作和学习中,当我们说想找查询任何的信息的时候,可能第一时间会想到上百度或者谷歌去搜索一下。比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻。但是百度和谷歌不…

QML基础模型(Basic Model)

最基本的分离数据与显示的方法是使用Repeater元素。它被用于实例化一组元素项,并且很容易与一个用于填充用户界面的定位器相结合。 最基本的实现举例,repeater元素用于实现子元素的标号。每个子元素都拥有一个可以访问的属性index,用于区分不…

第11章 项目人力资源管理

文章目录 项目人力资源管理 过程11.2.1 编制项目人力资源计划的工具与技术 375(1)层次结构图(工作、组织、资源 分解结构)(2)矩阵图(责任分配矩阵,RAM)(3&…

KinectFusion中的ICP算法

投影数据关联-求匹配点 利用算法projective data association对前一帧和当前帧的(Vertex、Normal)进行匹配,算法如下: 在当前帧 i 的深度图像上的每一个像素 U并行计算;对于深度值大于0的像素,求该像素点…

从破解虫脑到攻克人脑:一条“永生之路”的新赛道?

从破解虫脑到攻克人脑:一条“永生之路”的新赛道? 首张果蝇大脑连接组:耗费十余年,重建三千神经元,超50万突触! 论文地址 果蝇幼虫大脑的连接组。 所有脑神经元的形态学都经过了突触分辨率的电子显微镜成像…

聊天机器人开发实战--(微信小程序+SpringCloud+Pytorch+Flask)【后端部分】

文章目录 前言架构SpringCloud服务构建后台搭建Python服务调用 Python算法服务app 总结 前言 趁着五一有时间,先把大三下个学期的期末作业做了,把微信小程序和Java开发的一起做了。顺便把机器学习的也一起做了。所以的话,我们完整项目的技术…

如何用ChatGPT做书籍、报告、文件的读取与互动式问答?故事人物活起来

该场景对应的关键词库(15个): 书籍、报告、文件、详细信息、查询、主题、作者、出版日期、出版社、问题、方面、原则、方法、概括、主要观点、解释。 注意: ChatGPT的知识库截止于2021年9月,对于更新的数据或最新出版…

系统化思维:大数中心原理与限制性选择原理。

系统化思维:大数中心原理与限制性选择原理TOC 许多人的思考特点都是混乱而复杂的,只有受过严格训练的人才能做到系统化思维。这里将讨论系统化思维的基础考量。 大数中心原理:大数中心原理是客观而真实的普遍存在,应用在思维上就…

ImageJ实践——拟合矩形选区探究(bounding rectangle),左侧优先法则

在上一篇ImageJ实践中ImageJ实践——测量大小/长短(以细胞为例),我勾选了Set Measurements中的Bounding rectangle以测量细胞的长和宽(实际上是拟合矩形的长短边),文末我也提出了自己的疑惑:拟合…

【GORM框架】模型定义超详解,确定不来看看?

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: GORM框架学习 近期目标:写好专栏的每一篇文章 目录 一、GORM…

Ansible自动化运维工具---Playbook

Ansible自动化运维工具--playbook 一、playbook1、playbook简介2、playbook应用场景3、yaml基本语法规则4、yaml支持数据结构 二、Inventory中的变量1、inventor变量参数 三、playbook实例1、编写httpd的playbook2、tasks列表和action3、条件测试4、迭代5、with_items模块6、te…

5.4.1树的存储结构 5.4.2树和森林的遍历

回忆一下树的逻辑结构: 双亲表示法(顺序存储) 如果增加一个结点M,L。毋须按照逻辑上的次序存储。 如果是删除元素: 方案一:比如说删除元素为G,设置其双亲结点为-1。 方案二: 把尾部的结点提上…

真题详解(对象)-软件设计(六十四)

真题详解(DNS)-软件设计(六十三)https://blog.csdn.net/ke1ying/article/details/130448106 TCP和UCP都提供了_____能力。 端口寻址 解析: UDP是不可靠无连接协议,没有连接管理,没有流量控制,没有重试。 面向对象…

MySQL 常用命令

#--------------------------- #----cmd命令行连接MySql--------- cd C:\Program Files\MySQL\MySQL Server 5.5\bin # 启动mysql服务器 net start mysql # 关闭mysql服务器 net stop mysql # 进入mysql命令行 mysql -h localhost -u root -p 或mysql -u root -p #---------…

推荐算法实战项目:AutoRec模型原理以及案例实战(附完整 Python 代码)

本文要介绍的AutoRec模型是由澳大利亚国立大学在2015年提出的,它将自编码器(AutoEncoder)的思想与协同过滤(Collaborative Filter)的思想结合起来,提出了一种单隐层的简单神经网络推荐模型。 可以说这个模型的提出,拉开了使用深度学习解决推…