文章目录

  • 系列博文
  • 硬链接
    • 当前minix文件系统目录结构
    • 创建filelevel2.txt的硬链接文件
    • 创建filelevel2.txt的软链接文件
    • 当前minix文件系统目录结构
    • hexdump文件系统
    • 二进制分析硬链接文件
  • 软链接
    • 技术参考

系列博文

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

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

文章目录

  • 系列博文
  • 硬链接
    • 当前minix文件系统目录结构
    • 创建filelevel2.txt的硬链接文件
    • 创建filelevel2.txt的软链接文件
    • 当前minix文件系统目录结构
    • hexdump文件系统
    • 二进制分析硬链接文件
  • 软链接
    • 技术参考

硬链接

当前minix文件系统目录结构

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

创建filelevel2.txt的硬链接文件

ln dirdemo/filelevel2.txt hardlink2filelevel2.txt

创建filelevel2.txt的软链接文件

ln dirdemo/filelevel2.txt -s softlink2filelevel2.txt

当前minix文件系统目录结构

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文件

二进制分析硬链接文件

  根节点的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。

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

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

软链接

   根节点的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节点不同,软链接指向的是其链接文件的相对路径,所以软链接是可以跨越文件系统的。

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

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

技术参考
  1. 技术视频参考:https://ke.qq.com/course/417774?flowToken=1040946
  2. 参考文献:https://ke.qq.com/course/417774?flowToken=1040946

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

  1. linux hard link和soft link(硬链接和软链接)的简单介绍

    文件由何决定? 首先需要说明linux的文件的概念,我们如何分辨两个在linux里边的文件(以下简称文件)是不同的文件?由此就不得不说到一个东西,inode. 根据维基的定义: inode是指在许多& ...

  2. Linux - 操作系统查找文件的过程以及硬链接与软链接的区别

    例:系统查找文件/var/log/messages的过程 内核知道 / 的inode号,根据这个inode号可以查找到inode表内 / 对应的的磁盘块,磁盘块内存放有 / 下面的目录以及对应的ino ...

  3. 硬链接与软链接 (符号链接)的区别与联系

    在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 硬链接与软链接 是 Linux 文件系统中的一个重要概念,其涉及 ...

  4. linux硬连接脚本,linux 硬链接和软链接深入理解

    在学习linux的过程中,我经常把软硬链接,所以今天专门查了一些资料,然后整合在自己的博客中,方便以后复习,查看. 一方面也是因为看了vamei的linux的概念与体系系列文章,感觉不全的做些补充. ...

  5. linux硬链接与软链接

    详细文章链接:https://www.cnblogs.com/crazylqy/p/5821105.html (上面这个也是转载的!) 区别: 1.硬链接原文件/链接文件公用一个inode号,说明他们 ...

  6. 实例讲解Linux系统中硬链接与软链接的创建

    导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ...

  7. Linux 硬链接和软链接的区别

    硬链接和软链接的区别 Linux 与其他类 UNIX 系统一样并不区分文件与目录:目录是记录了其他文件名的文件.我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user ...

  8. 理解 Linux 的硬链接与软链接

    Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键盘 ...

  9. Linux 系统的硬链接和软链接详解

    文章目录 什么是链接 链接用来干什么的 硬链接和软链接的区别 硬链接和软链接的图示 总结 我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 ...

最新文章

  1. Nature Protocols:整合高通量组学数据集鉴定潜在机制联系的计算框架
  2. 系统搜索功能不能使用,弹出“无法找到运行搜索助理需要的一个文件”
  3. 八十三、Eureka实现相互注册
  4. mvc:default-servlet-handler标签的作用
  5. 使用Python可以做些什么
  6. 今天没事做了个MBTI职业倾向测试
  7. java 注册监听_java注册监听模型
  8. Linux服务器部署常用命令
  9. BIO、NIO、AIO,还傻傻分不清?
  10. kotlin中文开发文档
  11. 雷神开机logo更改_笔记本电脑开机LOGO太丑?大神教你来更换
  12. Tensorflow-gpu2.0.0安装【显卡型号:GTX1050 TI】
  13. 微信支付认证和ssl-https
  14. 计算机网络复习总结(中)
  15. RMAN实战1:RMAN备份数据库、控制文件、参数文件、FRA、归档日志
  16. python中的end的作用
  17. 保护8亿终端 阿里聚安全携手信通院打造B2C资金安全闭环 1
  18. 优化算法——模拟退火算法
  19. win7 无法启动此程序,因为计算机中丢失glut32.dll
  20. 派森小镇(六)熊孩子

热门文章

  1. 函数可导但是导函数不连续的例子
  2. 《PyTorch深度学习实践》 课堂笔记 Lesson7 神经网络多维特征输入的原理推导与实现
  3. 老板,你知道APP是怎么死的吗?
  4. 标题:未来五年的中国
  5. Django admin后台管理页面的常用设置
  6. js选出给定数组中所有的偶数/奇数/n的倍数(filter)
  7. 学习 Python3 这一篇就够了
  8. Boris FX Continuum Complete 2019(AE基础特效插件)v12.0.3.4169中文版
  9. Maven: Non-resolvable import POM:Failure to find *** in *** was cached in the local repository.
  10. 关于配置文件config的学习