您的位置:首页 > 运维架构 > Linux

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

2013-09-16 17:47 323 查看
该文件的注释的参考页码书籍: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
(图文件信息)





分析图:软连接创建的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



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



理解:创建硬链接时文件名指向原文件的的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件系统 磁盘 c linux