首页 热点资讯 义务教育 高等教育 出国留学 考研考公

符号链接和硬链接的区别

发布网友 发布时间:2022-04-22 15:43

我来回答

3个回答

热心网友 时间:2022-06-04 03:19

展开1全部符号链接和硬链接的区别
(1)创建一个硬链接
可以使用命令ln或者函数link()为文件创建一个链接。
#include <unistd.h>
int link( const char *path1, const char *path2 );
硬链接本身就是一个目录项,(比如文件名+索引节点号),可以将文件名与文件的位置关联起来;符号 
链接也称软链接,是指存储了一个字符串的文件。这个字符串可以在路径名解析的过程中,用于修改路径名。
目录项对应于单个链接,但是一个索引节点可能有几个链接的目标(对应几个目录项),因此索引节点中包含一个对链接到索引节点的链接数的计数。当用open()创建一个新的文件时,操作系统就会创建一个新的目录项,并分配一个空闲的索引节点来表示该文件。不能够对目录创建符号链接,不能够跨越文件系统创建硬链接。
硬链接只是建立一个目录项(包括inode号和文件名),这个目录项的inode号和被链接文件的inode号相同,我们建立1.src文件的硬链接过后,发现1.hard的inode号与1.src的inode号是相同的,
(2) 创建一个符号链接
使用ln命令带选项-s 或者函数symlink(),都可以创建符号链接。
#include <unistd.h>
int symlink ( const char *path1, const char *path2);
符号链接是一个包含了另一个文件或目录名字的文件。引用符号链接的名字会使操作系统去定位对应于那个链接的索引节点,知道最终遇到一个硬间接和一个真正的文件为止。如果过了一段时间,系统没有找到文件,则放弃并返回ELOOP错误。
符号链接,将建立一个文件,所以要占用一个inode节点,在这个inode节点中,存放了指向被链接文件的路径字符串,当建立1.src文件的符号链接后,1.sym的inode号和1.src是不一样的,1.sym的索引节点中存放了1.src的路径,通过这个路径就可以找到存放文件的索引节点。
当将符号链接指向的文件删除时,符号链接将无法使用,因为符号链接是通过路径名去找到被链接文件的,而硬链接通过增加被链接文件索引节点计数来达到链接目的,所以即使被链接文件删除了,硬链接仍然可以正常的使用,1.sym是1.src的符号链接,1.hard是1.src的硬链接,当1.src被删除过后,访问1.sym出现错误,因为此时系统想通过路径去访问1.src,而1.src已经被删除了。但是由于硬链接是直接通过增加inode的引用计数,所以源文件被删除过后,仍然可以正确的访问。

热心网友 时间:2022-06-04 03:19

在实际应用中硬链接和符号链接(即软链接)很难区分,但两者的确是有区别的:
硬链接,只能应用于文件,而不能应用于目录,而且不能跨文件系统(即分区)。
符号链接,可以应用于文件,而且可以应用于目录和可跨文件系统(分区)。
这是两者在应用上的区别。
底层的区别:
当创建了一个文件的硬链接时,硬链接会使用和文件相同的inode号,此时原来的文件的inode连接数由最初的1变为了2,实际上硬链接和文件使用了相同的inode,只不过是inode连接数增加了,删除文件不会影响硬链接,硬链接的inode数会从2变为1。
而在创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同,软链接的inode里存放着指向文件的路径,删除文件,软链接也无法使用了,因为文件的路径不存在了。当再次创建这个文件时(文件名与之前的相同),软链接又会重新指向这个文件(inode号与之前的不同了),而硬链接不会受其影响。

热心网友 时间:2022-06-04 03:20

硬链接:不同路径的文件指定的是同一个inode
硬链接不能跨分区存在
硬链接不能链接到目录(要避免循环引用)
删除硬链接只会减少文件被硬链接的次数,源文件不会动.
软链接:是一个的文件,有自己的inode
引用的是路径本身,不是inode
删除软链接,跟源文件没任何关系
软链接没有存储任何数据,只是存储了访问文件的另一种路径.
软链接可以对目录创建,也可以跨分区
源文件被删除,软连接将不可用.
如果有什么不懂的话可以去看看《Linux就该这么学》这本书,非常适合新手学习Linux。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com