linux的硬链接和软连接的区别

Linux中有两种链接文件

1)软链接(符号链接symbol),等同于Windows中快捷方式

ln -s 源文件名 符号链接文件名,源文件名和符号链接文件名是主从关系,源被删了,符号链接也就失效了

eg:ln -s src.c linker.c(linker.c就是src.c的一个符号链接文件);

2)硬链接,ln 源文件名 符号链接文件名,源文件名和符号链接文件名是并列关系,源被删了,符号链接依然有效。硬链接实际上和源文件在硬盘中是同一个东西,效果类似于硬盘上的一个文件,在文件系统上,在我们看来有好多个文件一样。每次删除一个文件时,只要他还有其他的硬链接存在,这个文件就不会被真正删除。只有等所有的链接文件都删除掉了,这个文件才会被真正从硬盘上删除

软链接与硬链接的区别(通俗):

硬链接可认为是一个文件拥有两个文件名;

而软链接则是系统新建一个链接文件,此文件指向其所要指的文件

若源文件改名,则软连接不可用(找不到源文件);硬链接可正常访问到源文件;

修改软连接、硬链接和源文件,访问三者都是同步变化的。

软链接

首先,我建立link_test.txt的测试文件,建立软连接指向测试文件

ln -s 源文件 软连接

查看软连接的内容和源文件内容一样,接着编辑了软连接后,查看软连接和原测试文件

说明编辑软连接就是编辑原文件。测试删除软连接后原文件正常,删除源文件后软连接失效。

同样,当我们修改任何一个软链接文件都会使内容发生改变,文件都保持同步变化。我们也可以看到软链接只有18Kb并不会占用磁盘空间。它只是一个原文件的引用,当我们将原文件删除以后,引用将会失效。

硬链接

ln 源文件 硬连接

建立硬链接后发现,硬链接的大小和原文件一样,并且索引节点号也一样。当我们改变硬链接的文件内容时,同样也会改变原文件的内容。

改变原文件内容,软硬链接内容也都同步改变:

删除原文件

软连接失效,硬链接正常

复制软、硬链接到新的文件

当我们用cp命令复制软链接时,我们复制的是原文件,而不是一个软链接。

复制软、硬链接后,对复制文件修改,都不会影响原文件。

什么是硬链接和软链接

硬链接

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

不足:

1. 不可以在不同文件系统的文件间建立链接;

2. 只有超级用户才可以为目录创建硬链接。

软链接

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

不足:

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

实际场景下,基本是使用软链接。

总结区别如下:

硬链接不可以跨分区,软件链可以跨分区。

硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。

删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

发表回复