linux 的硬链接和软连接(符号链接)

硬链接:

在文件系统里,每一个文件都会有一个索引节点(Inode Index),这个索引节点用来标识这个文件,硬链接就是通过这个索引节点进行链接。只有在同一文件系统中的文件之间才能创建硬链接,不能对目录进行创建(因为目录树可能会变成环,但软链接可以)。硬链接可以建立多个,也就是可以有多个文件指向同一个索引节点,或者说一个文件可以拥有多个路径名,因此一个文件可以对应多个文件名,当删除其中一个文件,指向这个索引节点的数目减一,当为0时,文件彻底删除。

命令:ln 源文件 硬链接文件
在这里插入图片描述
为文件a创建一个硬连接a1:两个文件指向同一块数据块,所以对任意文件修改都会反映到其它所有被链接的文件上。如果a被删除了,a1仍然有效,可以被使用。
在这里插入图片描述
在这里插入图片描述
删除a后:a1仍能正常使用

在这里插入图片描述

软连接:

软链接可以跨文件系统进行链接,可以理解为软链接的产生就是为了摆脱这个限制的。软链接文件可以是指向任意一个文件系统下的任意文件或目录,不仅如此,软链接还可以指向一个不存在的文件,但是不能对不存在的文件创建硬链接。

在创建软链接的时候要注意一个小问题,不要使用相对路径,就是一定要用绝对路径,不能用相对路径,相对路径创建的软链接无法访问,访问会报错:Too many levels of symbolic links.

软连接可以实现文件或者目录的共享,类似于Windows上的快捷方式。一旦a不存在了,那么a2也会失效。对a进行修改,a2内容也会改变,因为a2本身就是负责寻址a而已。

命令:ln -s 源文件 软链接文件
在这里插入图片描述

为文件a创建一个软连接a2:
在这里插入图片描述
在这里插入图片描述
删除a后:a2失效
在这里插入图片描述

这时只要在当前目录创建文本文件a,a2会恢复,这时a2指向新的a。

软链接和硬链接文件大小:

gui显示的软硬链接大小都等于产生链接时的源文件大小,之后源文件大小无论怎么改变,链接的大小都不变。
但实际上软链接会写上链接文件的文件名。一个字母一个字节,所以软链接的大小是链接文件名的大小。不随源文件大小改变
硬链接大小随源文件大小改变,始终等于源文件大小。

建立链接时:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
改变源文件a大小后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
!](https://img-blog.csdnimg.cn/a7b8c1f1707046e7bba44fe4fdef8987.png)

软链接使用实例:

一个程序main.c隐式调用了动态链接库libyz.so。
在这里插入图片描述
将libyz.so移动到别的目录:/home/yz/ 下,再在当前目录下创建软链接(使用绝对路径):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用软链接编译main.c:
在这里插入图片描述
成功在没有键入动态链接库的情况下使用了软链接实现编译。

在实际工程中,很多大的工程都是采用软链接来减小工程大小,因为linux大多常用的so文件都放在/urs/lib或/lib目录下,因此工程可以直接默认想要使用的so文件位置,并使用软链接代替。这样就使得多个工程共用系统上独一份的so,减小了多工程的总大小。
也有时候,有时候我们总是需要执行很多寻找路径的命令,如果这些命令要被多次执行,可以考虑使用软链接保存这些项目,之后就可以直接使用自己目录下的软链接,写代码较为方便。
在实际应用中,硬链接使用较少,软链接会使用的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值