Linux下软链接和硬链接的区别是什么?

2024-11-12 16:55:44
推荐回答(5个)
回答(1):

1、定义不同
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
硬链接就是一个文件的一个或多个文件名。把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。
2、限制不同
硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建;
软链接可对不存在的文件或目录创建软链接;可交叉文件系统;
/iknow-pic.cdn.bcebos.com/35a85edf8db1cb13784969b9d354564e92584b73"target="_blank"title="点击查看大图"class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/35a85edf8db1cb13784969b9d354564e92584b73?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="https://iknow-pic.cdn.bcebos.com/35a85edf8db1cb13784969b9d354564e92584b73"/>
3、创建方式不同
硬链接不能对目录进行创建,只可对文件创建;
软链接可对文件或目录创建;
4、影响不同
删除一个硬链接文件并不影响其他有相同inode号的文件。
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即danglinglink,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

回答(2):

在Linux系统中,链接分为两种,一种是硬链接(Hard link),另一种称为符号链接或软链接(Symbolic Link)。
我在黑马程序员课程学习中学到了他们的区别,如下:
①默认不带参数的情况下,ln创建的是硬链接,带-s参数的ln命令创建的是软链接。
②硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号,与源文件不同,
③ln命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。
④删除软链接文件,对源文件和硬链接文件无任何影响。
⑤删除文件的硬链接文件,对源文件及软链接文件无任何影响。
⑥删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。
⑦同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
⑧很多硬件设备的快照功能,使用的就是类似硬链接的原理。
⑨软链接可以跨文件系统,硬链接不可以跨文件系统。

回答(3):

为解决文件的共享使用,Linux系统引入了两种链接:硬链接和软链接。在Linux中,元数据中的inode号才是文件的唯一标识而非文件名,文件内容要通过inode号来寻找,犹如交通指示牌一样,指示着数据找寻的方向。

硬链接(Hard Link)

A和B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除其中一个,对另外一个没有任何影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。

注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块只有在inode节点链接数减少为0的时候才会被系统回收。

软链接(Soft Link)

A是B的软链接,A的目录项中的inode节点号与B的目录项中的节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名。A和B之间是主从关系,如果B被删除了,A依然存在,但指向的是一个无效的链接。

Linux中软链接和硬链接的区别:

概念不同:

软链接可以理解成快捷方式,和原文件的inode号不一样,它和Windows下的快捷方式的作用是一样的,软链接数据块中记录的亦是相对路径指向。

硬链接和原文件对应一个inode,就是对应一个文件,可以理解成一个文件有几个别名。

用法不同:

软链接可以理解成快捷方式,也清楚知道原文件在哪里。它和Windows下的快捷方式的作用是一样的,和Windows一样,删除源文件,快捷方式也就无法使用了。

硬链接可以看成一个备份,但并没有增加空间,因为文件就一个,这种可以防止源文件删除后不能使用问题;同时也有局限性,不能对目录和跨文件系统使用。

语法格式(ln):

硬链接:ln 源文件 链接名

软链接:ln -s 源文件 链接名

注意:链接的源文件路径要写绝对路径,否则会报错。

回答(4):

要深入理解软链接和硬链接,那么得先理解文件系统;
所以我只能粗略解释下软链接和硬链接;
硬链接:大小和block以及inode号都相同; 那么说明他们根本就是同一个文件; 打个比方: 从上海坐飞机去北京, 飞机可以直飞北京, 也可以先去纽约转一圈到北京, 这个就不同的飞行路线就是路径, 但是目的都是相同的---北京(文件位置);;;
软链接: 大小和block以及inode号都不同, 那么说明他们根本就不是同一个文件, 那么软链接存放的是什么呢? 存放的就是如何从上海到北京的路线(比如是从上海到纽约然后目标是北京的路线); 所以它得先到上海然后才能坐飞机到北京;
从上面的飞机例子中可以得出一个特性: 硬链接必须是上海到北京; 即: 必须是同一个文件系统;
软件可以是其他地方到上海然后坐飞机到北京; 可以他可以在不同的文件系统;
stat filename 这个命令记住; 看看Inode号, 就能知道硬链接和软链接是什么了; Inode对于文件系统非常重要; Inode是一个文件的元数据, 如果相同的; 那么根本就是同一个文件;;;
所以硬链接不是文件的复制2份; 说实话我不知道快捷方式的原理, 因为我没有去解读过NTFS文件系统; 所以软链接是不是快捷方式我不好说, 但是软链接其实就是存放着另一个文件的路径的文件;;

回答(5):

  1. 软连接 你可以理解为快捷方式

  2. 硬链接 你可以理解为同一个文件复制两份 更新任何一份 都会更新另一份