通俗理解Linux上的硬链接和软链接

假设目录“~”下面不存在a, b, c这样的文件,在该目录下面执行如下命令:
题目步骤
$ echo hello > a
$ ln a b
$ ln -s a c
$ rm a
$ echo world > a
请问接下来执行“cat b”输出什么?执行"cat c”输出什么?解释为什么!详细论述其中关于inode等的变化
■基本概念


一.文件在linux上的构成

1.inode(索引节点)
文件的唯一标识
可以理解为数字,这个数字与具体的文件内容所在存储介质上的位置唯一对应
比如: inode(1234)---->文件内容1

2.dentry(目录项)
dentry中记录着多组「文件名与inode之间的对应关系」
可以理解为一个数组,而数组的每一项是一对儿关系
比如:
dentry[]中有3项元素:
①a----->inode(1234)
②b----->inode(5678)
③c----->inode(1589)

3.文件内容

3.总结
结合上面简单理解,linux在对文件操作(比如读内容),大体流程为:
・文件名----->dentry---->inode---->文件内容
比如:
「文件名a」---->「①a----->inode(1234)」—>「inode(1234)」—>「文件内容1」

二.符号链接和硬链接

1.基于题目,简单的对应关系
・文件a创建后
$ ln a b (b是a的硬链接)
$ ln -s a c (c是a的符号链接)

・dentry与inode对应关系如下:
在这里插入图片描述

2.总结:
・b, a不同文件名指向相同inode,对应相同文件内容
・b, c不同文件名指向不同inode,对应不同文件内容、且符号链接c对应的文件内容是a的文件路径

■解题过程

$ echo hello > a
在这里插入图片描述

$ ln a b
在这里插入图片描述
$ ln -s a c
在这里插入图片描述
$ rm a
在这里插入图片描述

※注意:rm 这个命令仅仅删除dentry中的内容,并非文件内容 所以dentry中的第一项被删除
但是,当dentry中,表示此文件的(文件名–>inode)都被删除了,那么文件内容就会被删除

$ echo world > a
在这里插入图片描述

■最终答案:
cat a: hello
cat c: world

■补充说明:cat c的流程
在dentry中遍历,看看数组项中是否有c这个文件名
  →数组第一项符合条件即:①c----->inode(1589)
   →获取inode(1589),根据1589找到文件内容:「/home/xx/xx/a」
     →发现内容居然是路径…根据路径继续查找
     →dentry中找a文件名
      →a->inode(2888)->内容3(world)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值