【Linux】文件体系中inode与软硬链接以及读写权限问题

打印 上一主题 下一主题

主题 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 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表