linux 软链接 硬链接 分析

前言:

1. linux除了进程之外,其余的都是文件。  目录也是文件。 链接也是文件

2.是文件就由两部分组成: 1.元数据 2. 用户数据。 其中元数据包含inode, 其中inode包含inode号。 可以ls -il可以查看inde号。也可以根据find -inum 查询文件名。 

3. 文件名是不只是test.txt. 它是包含路径的。 

4. 根据文件的inode号访问文件的用户数据。 

5. 文件名、inode号、用户数据之间存在映射关系。 多个文件名可能对应一个inode号。 但是一个文件名不能对应 多个inode号。 其中用户数据同inode号是一一对应的。 关系如下图所示

更详细的可以参看:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

 

查看文件内容过程。 

目录的inode -找到->目录的用户数据-->文件的inode-->文件的用户的数据。 

核心:文件的inode是保存在目录的用户数据中的。 
具体的可参看:https://www.cnblogs.com/crazylqy/p/5821105.html

 

硬链接:ln soure taret

软连接: ln -s source targe

在A下面执行ln ../B/b hard_link_b 会发生什么呢?

答:

在目录(文件)A的数据区中, 会增加一条信息如下:

当你cat hard_link_b的时候, 会从文件A的数据区中查找hard_link_b对应的inode号. 根据inode号访问b的用户数据。 

在A下面执行ln -s ../B/b soft_link_b会发生什么呢?

在目录(文件)A的数据区中, 会增加如下一条信息:

metadatauserdata
文件名inode 
soft_link_b34115383../B/b

当你cat soft_link_b的时候, 会根据soft_link_b 查找到inode号 34115383, 根据34115383访问软连接的用户数据, 其中是个文件名。 根据这个文件名../B/b然后再去查找inode号, 再访问其中的数据。 

总之:

硬链接是将hard_link_b的文件名和文件b的用户数据直接建立联系。 

软连接是将soft_link_b同文件b的文件名(../B/b)直接建立联系。 这就是相当于windows的快捷方式。 windows的快捷方式怎么操作, 软链接就怎么操作。 

因此:改变文件b的名字或路径(../B/b), 软连接失效。 而硬链接继续有效。 

此处需要再解释一下。 

rm -f ../B/b 只是将目录B的用户数据区中的b文件名、及其inode删除掉。 b的用户数据及其inode仍旧存在。 所以你可以通过硬链接来访问他。 

为什么b的用户数据及其inode仍旧存在?

答:

一个文件,如果没有文件名关联他的inode的时候, 才会被真正的删除。 这也是其他的博文中说的, 使用硬链接可以防止文件被误删。 rm -f ../B/b, 此时仍有hardlink这个文件名同其inode关联。 所以b并没有被真正的删除。 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值