【Linux】文件系统的inode是什么?软硬链接是什么?了解意义

当我们在 LIiux 中输入 ll-i 指令时,会显示文件信息:

权限、拥有者、所属组等这些我都知道,但是最前面的比如 1051810 是什么,还有权限后面的3和6是什么呢?本章我们就来讲解一下 inode 和 硬链接数。

透析文件系统:

        在磁盘文件中,包含了文件属性+文件内容,文件属性包含了文件的元信息,每一个文件为了方便查找,会起一个唯一的编号:inode,为了方便理解,inode 号我们可以认为它是一个文件的身份证。

        inode 是任何一个文件的属性集合,是储存文件元信息的区域,中文译名为"索引节点"。Linux 中几乎每个文件都有,因为存在大量的文件,为了区分才有的 inode。我们的文件内容一般存在硬盘中,硬盘中会有许多扇区,扇区中的块,块就是用来储存内容的,现在的块一般大小是 4k。

        我们日常输入的 ls 和 cat 指令,其实本质就是指令变成进程,在磁盘上找到对应的文件信息和文件内容,把其加载到操作系统上,给到用户。

磁盘结构:

我们先来了解一下磁盘文件系统图:

        1 和 2 一般是用来描述 inode 和 data blocks 的使用情况,使用了多少?还剩多少?

        inode Table 中包含了文件属性信息,而 Data table 包含了文件的数据,它们的空间使用由对应的位图 Bitmap 决定。

        iode Table 中包含了属性 inode ID 和 数据 inode blocks[15] 等,数组中的每个下标对应的是使用的块,每一块储存数据后,写入到 blocks 中,每一块是 4kb。

 

        查看文件信息时,就是通过指针或者 inode ID 找到属性,在找到数据;而 inode Bitmap 和 Block Bitmap 是为了查看 inode Table 和 Data Blocks 有哪些被占用,用位图查看比特位的方式。

对常见现象的一些理解:

1、如何理解空文件?

        空文件的数据为 0kb,但空文件也有对应的属性信息,所以在 inode Table 上占用了空间,没有在 Data Table 占用空间。

2、创建文件的过程,写入 1kb 是什么过程:

        在 touch test.c 后,首先遍历 inode Bitmap,从右向左或者从左向右查找哪个比特位为 0,把它置为 1,随后再区 inode Table 中申请空间给 test.c,填充文件属性信息。

        写入 1kb 数据时,先在 Bitmap 中找到 indoe 是几,在 inode Table 中找到 inode {},找到 int blocks[],发现没有开辟空间,要去申请空间,扫描 Block Bitmap,置 1 表示占用,把数据写到 bock 块中。

3、如何理解删除数据?

        假设要删除 inode 为 1 的文件,只需区 inode Bitmap 中找到对应的比特位,置为 0,找到 inode 对应的数据块,在 Block Bitmap 中置为 0。

        通常我们理解的删除并非完全删除,而是假删除,所以我们就能理解,删除文件为何特别快,拷贝时特别慢,删除了文件还可以恢复,因为闪一个文件只需置为无效即可,不会占空间,下次只需覆盖就行。而拷贝文件需要区位图上申请空间,拷贝数据,所以慢。

4、如何理解目录?

        目录的 inode 保存在 inode Table 中,blocks 中放的是目录的数据,数据是里面的文件名与其对应的映射关系 inode 号。但是,目录的文件名并不存在于 inode 中,因为 Linux 底下一切皆文件,所以是保存到数据当中,比如 ' . '。

        我们的指令都是通过 inode 号到 inode Table 中找的,而不是通过文件名找的。

软硬链接:

软链接指令:

ln -s 文件名 链接文件名

硬链接:

ln 文件名 链接文件名

我们在软链接后,可以看到权限属性,是 L,代表着是软连接文件。

        通俗易懂地理解,我们可以把软链接看作是文件的快捷方式,大小特别小;硬链接可以看作是给文件起别名,类似 C++ 的引用,其实 a.out 和 c.out 都是一个文件罢了。

软硬链接的区别:

        1、软链接是一个独立的文件,有自己的 inode;

        2、硬链接的作用是恢复数据,方便目录之间通过相对路径跳转;

        3、目录下多个文件为何硬链接数那么多,因为目录下的 . 和 .. 都是别名。

这个3怎么理解呢?

        我们可以看得出,其实 . 和 .. 都是硬链接,它们是上级目录和上上级目录的别名,有的时候看到硬链接数就可以找到底下有多少个目录。

ls -id // 查看上级目录
ls -i  // 查看当前目录

        在 inode 中有一个整型变量 ret,可以看作是 count,代表着硬链接数,硬链接加一 ret 加一,当捡到 0 时,才说明文件被干掉了。

其他

 Boot Block:

        表示分区码,在磁盘分区的开头,起引导找到操作系统代码的作用。

acm:

stat xxx

        文件三个时间,a 代表最后访问时间,m 代表文件内容修改时间,c 代表文件属性修改时间。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值