从文件系统本质看硬链接和软连接的区别

该文件的注释的参考页码书籍:linux c编程一站式学习

1、 首先把一个文件作为分区格式化。然后在这个文件系统中分析硬链接和软连接的区别

$ Dd  if=/dev/zero of=fscount=256 bs=4k

该语句详细解释在P510

 

2、 用常规文件制作成的文件系统也可以像磁盘分区一样mount 到某个目录。

$Sudo mount –o loop  fs /mount

该语句详细解释在P511

 

3、 切换到挂载的目录,在该目录下添加删除文件,这些操作会自动保存到fs文件中去

$cd /mnt

4、 建立第一个文件$sudo vim hello.c

5、 创建硬链接 $ ln hello.c hi.c

6、 建立软链接 $ ln –s hello.c h.c

7、 查看文件的信息$ ls –l (图文件信息)

从文件系统本质看硬链接和软连接的区别_第1张图片

分析图:软连接创建的hi.c指向hello.c ,字节数是7.这7个字节就是”hello.c”7个字符。

硬链接创建的h.c 和hello.c的属性一样。

关于硬链接和软链接的分析在P509页

 

8、 将这个分区从/mnt目录下umout 下来,确保所有的改动都保存在文件中了。

$Sudo  umount  /mnt

9、 切换到/home目录下,用二进制查看工具查看这个文件系统的所有字节。

$Sudo  od –tx1 –Ax  fs

该语句的详细介绍P512

 

10、同时与dunpe2fs 工具的输出分区的超级块和块组描述符表信息相比较。

$ Dumpe2fs fs

该语句详细介绍P510

 

10、查看hello.c 的inode信息

$ Debugfs  fs

在debugfa的提示符先输入stat hello.c ,显示hello.c 的inode 的信息。

输入stat hi.c ,显示hi.c 的inode信息(硬链接)。

hi.c 和hello.c 的inode 信息相同如下:

该语句详细介绍P514

从文件系统本质看硬链接和软连接的区别_第2张图片

h.c 的inode 的信息(软连接)

从文件系统本质看硬链接和软连接的区别_第3张图片

理解:创建硬链接时文件名指向原文件的的inode ,

创建软链接时,新创建了一个inode。

10、找到inode 的的位置

计算公式:(Inode-1)*80+2000

hello.c 和hi.c 的inode 位置是2600,查看下图可知

根据node 的内容顺序

数据块位置由上图可知2eX0X400=b800,在od 输出中找到00b800地址

理解:通过inode指出的数据块的地址, 找到相应的数据块,读取内容。


h.c 的inode 位置是2580 ,看图可知 h.c 的数据块内容为hello.c

理解:软链接文件的inode 指向了hello.c ,需要通过hello.c 的inode找到数据块,

      读取内容。 

      读inode 的详细内容P515

12、hello.c 和硬链接hi.c 文件的数据块位置由上图可知2eX0X400=b800,在od 输出中找到00b800地址。

该地址中的内容为创建hello.c 文件时写入的内容"#include"对应的ASCCI码。

数据块的读取详细内容P515


你可能感兴趣的:(linux,/c,文件系统,磁盘,c,linux)