linux理解软硬链接

 软硬连接

在linux下面链接文件有两种,一种是类似window的快捷方式功能的文件,可以让你快速链接到目标文件(或目录),叫做软链接,另一种则是通过文件系统的inode链接来产生新的文件名,而不是产生新的文件,这种叫做硬链接。这是完全不一样的东西。

1.软链接(symbolic link也叫符号链接)

软链接是一个独立的链接文件,有自己的inode,也有自己的inode属性和内容,内部放的是自己所指向的文件的路径,当被链接的原文件出现问题后,该链接则不能使用。

创建命令 

ln -s 目标文件    新的链接文件名(自定义的)

示例: 

与文件建立软链接

与目录建立软链接

 

 软链接可运用的地方:将一个路径很深的程序,或者库,或者对应的头文件,建立到当前目录下,或者是很好找的路径下,让我们快速去访问到这个文件。

2.硬链接(hard link)

硬链接和目标文件共用一个inode,不会创建新文件,当我们添加一个硬链接时,只更改了当前目录的内容:在目录中增加了新的文件名,添加了原文件的inode和文件名的映射关系。而这个映射关系有一个计数,每多一个硬链接,这个链接数就会+1,这是创建的时候,当我们要删除文件的时候也是,只有等这个连接数为0时,这个文件才算真正意义上的被删除。在没完全删除之前我们都可以通过该文件的其他硬链接来进行访问。(我们其实可以将硬链接当做一个浅拷贝的过程,也就是多增加一个指针指向同一个文件)

 

                                                      红圈出来的数代表硬链接数 

创建命令

ln 目标文件     新的链接文件名(自定义的)

 与文件建立硬链接

 无法与目录建立硬链接

 3.解除软硬链接

unlink  软链接名/硬链接名

为什么新建的文件夹硬链接数是2呢?

因为文件夹名和inode构成一组映射关系,而文件夹里面的隐藏文件  .  其实是文件夹的硬链接 

4.不能给目录建立硬链接

但是我们上面也说了目录中的一个点(.)代表的其实是文件夹的硬链接,代表当前路径,这又是怎么回事呢?

原来操作系统只允许自己给目录建立硬链接,不允许用户创建,是为了避免环路问题。 

举个栗子(假设真的能给目录建立硬链接)

我们都知道目录文件(文件夹)实际上是一种多叉树结构,在目录中找到其他的文件夹名即可用cd 文件夹名进行访问(图中红箭头),也可以cd .. 返回到上级目录(图中蓝箭头),现在我们在d3目录下建立一个d2的硬链接,再创建一个test.c文件,现在要用find命令从d1目录下开始递归式查找test.c文件,但是当我们进入d3的时候遇到hard-link时,又会回到d2里重新找,这样循环往复就出不来了。

再举一个详细的栗子

如果使用hard link链接到目录时,链接的数据需要连同被连接目录下面的所有数据都建立链接,就是说如果你要将/etc使用硬链接来创建一个/etc_hd目录时,那么在/etc_hd目录下面的所有文件名同时都与/etc下面的文件名要创建硬链接,没那么简单,并且,未来如果在/etc_hd下面创建新文件时,连带的,/etc下面的数据又得要创建一次hard link,过于复杂,所以hard link目前对于目录来说暂时不支持。

 但是隐藏文件 . 和 .. 又这么解释呢?

它们不也会构成环路问题,这个其实是操作系统进行维护的,而且链接的路径不深。只需要操作系统进行特殊处理就行,但是如果也允许用户这样搞的话,有可能链接的路径很深,这样比如在执行查找或者路径切换的时候就会出问题。

5.总结:

硬链接

1.不能跨文件系统

2.不允许给目录创建硬链接

3.只有当硬链接数为0时,该文件才会完全删除。

4.创建只是在某个目录下添加文件名,以及inode和文件名的映射关系(链接数+1)

 软链接

1.可以跨文件系统

2.允许给文件创建软链接

3.是一个独立的文件,有自己的inode,会占用block

4.链接文件被删除,该链接也没有用了

补充: 

stat 文件名

显示文件的三个时间

access 最后访问时间

modify 文件内容最后修改时间

change 属性最后修改时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值