Linux文件系统:minix文件系统二进制分析3(硬链接与软链接)

系列博文

Linux文件系统:minix文件系统二进制分析1

Linux文件系统:minix文件系统二进制分析2

硬链接

当前minix文件系统目录结构

  在上一章中,我们创建了minix如下的目录结构,并且进行了二进制的分析,本篇将在上一篇文章的基础上,继续对文件系统的硬链接和软链接进行二进制分析。

image-20211208205451207

创建filelevel2.txt的硬链接文件
ln dirdemo/filelevel2.txt hardlink2filelevel2.txt
创建filelevel2.txt的软链接文件
ln dirdemo/filelevel2.txt -s softlink2filelevel2.txt

image-20211208102941850

当前minix文件系统目录结构

image-20211208205559847

hexdump文件系统
hexdump -C /dev/sdb > chapter3.hex

  chapter3.hex内容如下

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400  60 15 00 40 01 00 02 00  b0 00 00 00 00 1c 08 10  |`..@............|
00000410  8f 13 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000800  3f 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |?...............|
00000810  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000aa0  00 00 00 00 00 00 00 00  00 00 00 00 fe ff ff ff  |................|
00000ab0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00000c00  3f 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |?...............|
00000c10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000013e0  00 00 00 00 00 00 00 00  00 00 fe ff ff ff ff ff  |................|
000013f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00001400  ed 41 00 00 c0 00 00 00  7f 18 b0 61 00 03 b0 00  |.A.........a....|
00001410  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001420  ed 41 00 00 60 00 00 00  9d 1c a1 61 00 02 b1 00  |.A..`......a....|
00001430  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001440  a4 81 00 00 0c 00 00 00  77 1c a1 61 00 01 b2 00  |........w..a....|
00001450  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001460  a4 81 00 00 08 00 00 00  9d 1c a1 61 00 02 b3 00  |...........a....|
00001470  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001480  ff a1 00 00 16 00 00 00  7f 18 b0 61 00 01 b4 00  |...........a....|
00001490  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0002c000  01 00 2e 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c020  01 00 2e 2e 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c040  02 00 64 69 72 64 65 6d  6f 00 00 00 00 00 00 00  |..dirdemo.......|
0002c050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c060  03 00 66 69 6c 65 2e 74  78 74 00 00 00 00 00 00  |..file.txt......|
0002c070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c080  04 00 68 61 72 64 6c 69  6e 6b 32 66 69 6c 65 6c  |..hardlink2filel|
0002c090  65 76 65 6c 32 2e 74 78  74 00 00 00 00 00 00 00  |evel2.txt.......|
0002c0a0  05 00 73 6f 66 74 6c 69  6e 6b 32 66 69 6c 65 6c  |..softlink2filel|
0002c0b0  65 76 65 6c 32 2e 74 78  74 00 00 00 00 00 00 00  |evel2.txt.......|
0002c0c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0002c400  02 00 2e 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c410  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c420  01 00 2e 2e 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c430  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0002c440  04 00 66 69 6c 65 6c 65  76 65 6c 32 2e 74 78 74  |..filelevel2.txt|
0002c450  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0002c800  68 65 6c 6c 6f 20 6d 69  6e 69 78 0a 00 00 00 00  |hello minix.....|
0002c810  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0002cc00  6c 65 76 65 6c 20 32 0a  00 00 00 00 00 00 00 00  |level 2.........|
0002cc10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0002d000  64 69 72 64 65 6d 6f 2f  66 69 6c 65 6c 65 76 65  |dirdemo/fileleve|
0002d010  6c 32 2e 74 78 74 00 00  00 00 00 00 00 00 00 00  |l2.txt..........|
0002d020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
01000000

  将创建软硬链接文件之前和之后的minix文件系统二进制数据进行比较,如下图所示,可以看到第一个inode节点(根目录)的数据区多了hardlink2filelevel2.txtsoftlink2filelevel2.txt文件

image-20211209105335688

二进制分析硬链接文件

  根节点的data区,关于硬链接文件hardlink2filelevel2.txt的二进制描述如下,从前两个字节我们可以知道,hardlink2filelevel2.txt文件指向了第4个inode节点。

0002c080  04 00 68 61 72 64 6c 69  6e 6b 32 66 69 6c 65 6c  |..hardlink2filel|
0002c090  65 76 65 6c 32 2e 74 78  74 00 00 00 00 00 00 00  |evel2.txt.......|

  如下图所示,我们从创建软硬链接之前和之后的二进制数据中看出:第14个字节i_nlinks由01变成了02,而第14字节的含义就是引用计数i_nlinks,在创建硬链接之前,该inode节点仅被filelevel2.txt文件所引用,所以第14字节i_nlinks为1。

image-20211208211928250

  如下图所示,hardlink2filelevel2.txtfilelevel2.txt文件均指向第4个inode节点,所以i_nlinks变为2。所以硬链接相当于给一个文件取了个别名,它们都指向同一个inode节点,inode中的i_nlinks属性即为硬链接计数,既然是指向了同一个inode节点,那么他们数据区也指向的是存储介质中同一个位置,如下图所示。

  所以硬链接只能指向本文件系统里的文件,不能跨越文件系统创建硬链接。

image-20211209105715190

软链接

   根节点的data区,关于硬链接文件softlink2filelevel2.txt的二进制描述如下,从前两个字节我们可以知道,softlink2filelevel2.txt文件指向了第5个inode节点。

0002c0a0  05 00 73 6f 66 74 6c 69  6e 6b 32 66 69 6c 65 6c  |..softlink2filel|
0002c0b0  65 76 65 6c 32 2e 74 78  74 00 00 00 00 00 00 00  |evel2.txt.......|

  可以看到,第5个inode节点指向的数据区内容为“dirdemo/filelevel2.txt”,和硬连接指向inode节点不同,软链接指向的是其链接文件的相对路径,所以软链接是可以跨越文件系统的。

image-20211209110208372

  其实,从inode的bitmap我们也可以看出,文件系统并未给软链接分配一个inode节点,如下图inode bitmap对比图所示。

image-20211209110551269

  在创建了软硬链接各一个文件后,inode bitmap仅置位了1个bit,根据我们前面对软硬链接的二进制分析可知,软链接文件是不占用inode节点的。

技术参考
  1. 技术视频参考:https://ke.qq.com/course/417774?flowToken=1040946
  2. 参考文献:https://ke.qq.com/course/417774?flowToken=1040946
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明故宫的记忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值