什么是硬链接和软链接 --- 2021-11-08

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是硬链接和软链接 --- 2021-11-08相关的知识,希望对你有一定的参考价值。

参考技术A 硬链接:由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,
指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个一个硬链接,文件的链接
数就加 1 。
不足:

软链接:软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符
号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件
进行链接。

不足:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录
中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;
还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

实际场景下,基本是使用软链接。总结区别如下:
硬链接不可以跨分区,软件链可以跨分区。
硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。
删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。

备注:
创建软连接(原目录文件test,新目录文件newtest)

删除软连接

注意:不是 rm -rf newtest/

Linux课程笔记 软硬链接

1. 软硬链接的介绍和实践

1.1链接的概念

在linux系统中,链接分为硬链接和软链接。在默认不带参数的情况下,执行ln命令创建的是硬链接。

链接是指通过索引节点来进行链接。在linux系统中,多个文件名指向同一个索引节点是正常且允许的,这种是硬链接。硬链接的作用之一是允许一个文件有多个有效路径防止误删除源数据。

文件系统中,只要文件的索引节点还有一个以上的链接,只删除其中一个链接并不影响索引节点和其他的链接(即数据实体并未删除)。只有当最后一个链接被删除,此时如果有新数据要存储到硬盘时,被删除的文件的数据块及目录的链接才会被释放。

软链接实际上是一个文本文件,这个文件包含有软链接指向灵异文件的位置信息内容。

1.2示例

1.2.1文件示例:

[[email protected] test]# mkdir -p /test/qinbf

[[email protected] test]# cd /test/qinbf/

[[email protected] qinbf]# touch qinbf

[[email protected] qinbf]# ll

总计 4

-rw-r--r-- 1 root root 0 05-27 12:21 qinbf     #------à此时还没有创建链接,链接数为1

[[email protected] qinbf]# ln qinbf qinbf_hard_link  #----------à不加参数,默认创建硬链接

[[email protected] qinbf]# ll

总计 8

-rw-r--r-- 2 root root 0 05-27 12:21 qinbf  #-----------à此时由于硬链接的存在,链接数为2

-rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link

[[email protected] qinbf]# ln -s qinbf qinbf_soft_link

[[email protected] qinbf]# ll

总计 12

-rw-r--r-- 2 root root 0 05-27 12:21 qinbf

-rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link

lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf

[[email protected] qinbf]# ll -rti

总计 24

1409027 -rw-r--r-- 2 root root    0 05-27 12:21 qinbf_hard_link

1409027 -rw-r--r-- 2 root root    0 05-27 12:21 qinbf  #---à对边,发现qinbf文件和其硬链接文件的inode号是一致的

1409028 lrwxrwxrwx 1 root root    5 05-27 12:22 qinbf_soft_link -> qinbf  #------à而qinbf文件的软链接文件qinbf_soft_link的inode号则与qinbf文件inode号不一致

1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir

1409030 lrwxrwxrwx 1 root root    8 05-27 12:23 qinbfdir_soft_link -> qinbfdir

 

1.2.2目录示例:

[[email protected] qinbf]# mkdir qinbfdir

[[email protected] qinbf]# ll

总计 20

-rw-r--r-- 2 root root    0 05-27 12:21 qinbf

drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir

-rw-r--r-- 2 root root    0 05-27 12:21 qinbf_hard_link

lrwxrwxrwx 1 root root    5 05-27 12:22 qinbf_soft_link -> qinbf

[[email protected] qinbf]# ln qinbfdir qinbfdir_hard_link

ln: “qinbfdir”: 不允许将硬链接指向目录   #--------à目录不允许创建硬链接

[[email protected] qinbf]# ln -s qinbfdir qinbfdir_soft_link  #----------à目录可以创建软链接

[[email protected] qinbf]# ll -rti

总计 24

1409027 -rw-r--r-- 2 root root    0 05-27 12:21 qinbf_hard_link

1409027 -rw-r--r-- 2 root root    0 05-27 12:21 qinbf

1409028 lrwxrwxrwx 1 root root    5 05-27 12:22 qinbf_soft_link -> qinbf

1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir

1409030 lrwxrwxrwx 1 root root    8 05-27 12:23 qinbfdir_soft_link -> qinbfdir

 

1.2.3内容输入示例:

[[email protected] qinbf]# echo "qinbf is a student" >>qinbf_soft_link

[[email protected] qinbf]# cat qinbf_soft_link

qinbf is a student

[[email protected] qinbf]# cat qinbf_hard_link

qinbf is a student

[[email protected] qinbf]# cat qinbf

qinbf is a student

[[email protected] qinbf]# echo "yes,I do">>qinbf

[[email protected] qinbf]# cat qinbf

qinbf is a student

yes,I do

[[email protected] qinbf]# cat qinbf_hard_link

qinbf is a student

yes,I do

[[email protected] qinbf]# cat qinbf_soft_link

qinbf is a student

yes,I do

结论:无论是在软链接文件或者是硬链接文件还是源文件输入内容,这三种类型的文件内容都是同步的。

 

1.2.4删除示例:

[[email protected] qinbf]# rm -f qinbf  #-----------à删除源文件

[[email protected] qinbf]# ll -rti

总计 24

1409028 lrwxrwxrwx 1 root root    5 05-27 12:22 qinbf_soft_link -> qinbf[q1] 

1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir

1409030 lrwxrwxrwx 1 root root    8 05-27 12:23 qinbfdir_soft_link -> qinbfdir

1409027 -rw-r--r-- 1 root root   28 05-27 12:29 qinbf_hard_link

[[email protected] qinbf]# cat qinbf_soft_link  #------à此时,软链接文件失效

cat: qinbf_soft_link: 没有那个文件或目录

[[email protected] qinbf]# cat qinbf_hard_link  #------à硬链接文件内容还在

qinbf is a student

yes,I do

=============================以下是自己测试补充===========================

[[email protected] qinbf]# touch qinbf  #----------à之前已经删除,重新创建的同名新文件

[[email protected] qinbf]# ll -rti

总计 28

1409028 lrwxrwxrwx 1 root root    5 05-27 12:22 qinbf_soft_link -> qinbf[q2] 

1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir

1409030 lrwxrwxrwx 1 root root    8 05-27 12:23 qinbfdir_soft_link -> qinbfdir

1409027 -rw-r--r-- 1 root root   28 05-27 12:29 qinbf_hard_link

1409031[q3]  -rw-r--r-- 1 root root    0 05-27 12:33 qinbf

[[email protected] qinbf]# cat qinbf_soft_link #------àqinbf_soft_link文件和新文件qinbf内容一致,为空

[[email protected] qinbf]# echo "This is new file">>qinbf  #-----à新增文件的内容

[[email protected] qinbf]# cat qinbf_soft_link #-------àqinbf_soft_link文件和新文件qinbf内容一致

This is new file

[[email protected] qinbf]# cat qinbf_hard_link #------à此时qinbf_hard_link文件还是被删除的qinbf文件的内容

qinbf is a student

yes,I do

 

1.3链接总结

通过以上测试,我们可以得到以下几个结论:

(1)       删除软链接文件,对源文件和硬链接文件没有影响

(2)       删除硬链接文件,对源文件和软链接没有影响

(3)       删除源文件,对硬链接文件无影响,软链接失效

(4)       同时删除源文件,和硬链接文件,整个文件会真正的被删除

(5)       很多硬件设备的快照功能,就是利用了硬链接的原理

(6)       建立与被删除的源文件同名的新文件,软链接文件还是有效,而硬链接无效(inode号不一致),亲测。

 对于目录,不可以创建硬链接,但可以创建软链接;目录不能跨越文件系统。

 

1.4空间不能释放的原因

(1)       硬链接的存在

(2)       另一个进程还在使用这个文件

(3)       磁盘剩余空间维护出现了问题

 

以上是关于什么是硬链接和软链接 --- 2021-11-08的主要内容,如果未能解决你的问题,请参考以下文章

Linux中硬链接和软链接的区别与联系!

Linux系统硬链接和软链接详细介绍与实践

描述硬链接和软链接区别

硬链接的关于Linux系统的硬链接

Linux课程笔记 软硬链接

Linux课程笔记 Day03 课程内容总结