论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
【Linux】文件体系中inode与软硬链接以及读写权限问题 ...
【Linux】文件体系中inode与软硬链接以及读写权限问题
王國慶
金牌会员
|
2024-6-9 12:33:46
|
显示全部楼层
|
阅读模式
楼主
主题
805
|
帖子
805
|
积分
2419
前言
一、 简单明白文件体系
我们接下来以磁盘举例:
文件=文件内容+文件属性
Linux中文件内容与属性是分开存储的。
文件内容:在数据块中存着
文件属性:在inode中存着
Block Group:ext2文件体系会根据分区的大小分别为数个Block Group。而每个Block Group都有着相同的结构构成。政府管理各区的例子
超级块(Super Block):存放文件体系本身的结构信息。记载的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次查验磁盘的时间等其他文件体系的相关信息。 Super Block的信息被粉碎,可以说整个文件体系结构就被粉碎了
GDT,Group Descriptor Table:块组描述符,描述块组属性信息
块位图(Block Bitmap):Block Bitmap中记载着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
i节点表:存放文件属性 如文件大小,所有者,最近修改时间等
数据区:存放文件内容
Linux体系中,一个文件,一个inode,每一个inode都有自己的inode编号是唯一的(inode的设置是以分区为单位的,也就是1号分区inode编号从1到500,2号分区也是1到500,分区之间编号互不影响),inode为一个结构体,里面存着文件的所有属性,文件名并不属于inode属性
格式化:
每一个分区在被使用之前,都必须提前先将部分文件体系的属性信息提前设置进对应的分区当中(也就是分别好Block Group ,GDT,inode位图等),方便我们后续使用这个分区或者分组
二、文件操纵具体步调
1.新建文件
首先会分配到一个空余的分组中,在分组中通过GDT来判定是否有剩余的位置放入,在inodeBitmap中查找最近的没有使用的下标,将其从0置为1,之后用这个inode编号去inodeTable中这到这个位置,将自己的信息(大小,修改时间之类的)写入到struct inode结构体中,文件就完成了创建
如果要写入数据,首先判定要写入数据大小必要几个数据块大小,之后根据BlockBitmap在位图中找到未使用的数据块,之后将其置为1,把块号填到inode中block数组对应的位置,之后到DataBlock中写入数据
删除=允许被覆盖,可以提高体系服从
2.删除文件
我们根据我们当前文件所处的目次确定我们属于哪个分区的,根据文件inode大小确定我们是哪个分组的,通过inode编号找到我们对应inode的属性,根据属性中blocks数组的内容,去BlockBitmap中将对应位置的置为0,之后再将inode编号的位置在inodeBitmap中置为0
3.查找文件
我们根据我们当前文件所处的目次确定我们属于哪个分区的,根据文件inode大小确定我们是哪个分组的,通过inode编号在inodeTable中找到我们对应inode的属性,根据inode结构体里面block数组去对应的位置DataBlock找数据,将对应块载入内存,虽然我们载入了整个块大小的数据,但我会根据我当前文件大小来在块中读取对应字节的数据
三、目次的重新明白
文件那些操纵的条件都是基于我们有文件的inode编号,但我怎么获得我们inode编号呢?我们平时都是直接用文件名进行操纵的。
首先目次也是文件,Linux体系下统统且文件,所以我目次也有自己的属性+内容,也必要数据块来存储数据。
问:目次里存放的是什么?
答:存放的是文件名与文件名其inode编号的映射关系。
问:既然这样那我又是怎么获得目次的inode编号呢?我们得先知道目次的inode编号读取其数据内容才气获得文件名与inode编号啊!!!
答:我们会一起向上递归到根目次,根目次的位置是确定的,inode编号也是确定的,我们根据根目次中存的数据,找到目次和inode的对应关系
1.目次下没有w权限,无法对其下的文件进行创建与删除
由于即便我们把文件创建出来,文件名与inode的映射关系,我们没有w权限,我们就无法将这个关系存入目次的数据当中。
2.目次下没有r权限,无法对其下的文件进行查看
我们要先获得文件的inode编号,才气去对应数据块中找文件的数据,但现在目次都不让我读啊!我都没办法获取到文件的inode编号,拿什么去读文件?
3.目次下没有x权限,无法进入这个目次
进入目次,就是cd进去, 将体系的情况变量做更新,给当前路径做更新,并给目次信息做更新,但没有x权限我们就无法实行这一操纵。
四、软链接
软链接是一个独立的文件,有一个独立的inode,也有独立的数据块,他的数据块中保存的是指向文件的路径(相当于windows中的快捷方式)
命令:
ln -s 要链接的文件名 创建的软链接文件名
由于软链接中存着链接文件的路径,所以我们可以选择将我们的软链接文件放入可实行文件的目次/usr/bin
``
这样我们就可以以直接实行我们自己写的可实行步伐了
五、硬链接
硬链接不是一个独立的文件,由于其没有独立的inode编号,所谓建立硬链接,本质其实是在特定目次的数据块中新增文件名和指向文件名inode编号的映射关系(相当于取别名)
命令:
ln 要链接的文件名 创建的硬链接文件名
每个inode内部都有一个引用计数器(记载有多少个文件指向我)
1.Linux不允许目次建立硬链接,会造成闭环问题
我们假设可以创建目次硬链接
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
金牌会员
这个人很懒什么都没写!
楼主热帖
webman
React技巧之发出http请求
Jupyter Notebook,太强大了
【Shashlik.EventBus】.NET 事件总线, ...
导入例子体验鸿蒙开发工具的hello worl ...
【网络】https单向认证和双向认证 ...
【云原生架构】阿里云 —— 主要架构模 ...
Bluecmsv1.6-代码审计
手记系列之四 ----- 关于使用MySql的经 ...
2022-08-16 数据库查询语言之-------D ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表