深入理解软硬链接
Posted 做1个快乐的程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解软硬链接相关的知识,希望对你有一定的参考价值。
软硬链接
软硬链接不管是在Linux系统还是Windows系统中都无处不在,我们windows下,桌面的各种应用图标就是一种链接,那这种链接是软链接呢?还是硬链接呢?那我们把QQ的图标删除之后,QQ是不是就不能再使用了,这些都与链接有关,本篇文章小编将详细介绍软硬链接的区别和他们的创建。
1. 软链接的创建
软链接的建立命令是ln -s,如下图,我们目录下只有test.c这一个文件,我们尝试创建一个软链接来看看,ln -s test test.c,该命令行就创建了一个名为test的软链接文件,用后者test.c指向前者test,也就是说用后者链接前者。此时我们就看到生成了一个test文件,并且test文件指向test.c,这个就叫做软链接。
2. 硬链接的创建
ln不带任何选项建立的链接叫做硬链接,同样我们执行命令:ln test.c TEST,此时即建立了硬链接,TEST就是test.c的硬链接。
3. 软硬链接的区别(inode、硬链接数)
3.1 软链接inode
我们下面从inode编号和硬连接数来讲解软硬链接的区别,我们使用-i命令可查看文件的inode编号,如图上面软链接的创建过程,我们黄框标起来的是inode编号,红框标起来的就是我们的硬连接数,因我们是建立的软链接,所以硬连接数始终为1,我们观察inode编号,我们创建了test文件指向test.c,这个test就是test.c的软链接,我们观察这两个文件的inode,发现是不一样的
因为一个文件对应一个inode编号,所以软链接形成的文件是一个独立的文件,他有自己独立的inode,有自己独立的数据,这个软链接test的内容相当于保存了test对应的路径,这个特别像windows中的快捷方式。
我们通过cat打印两个文件的内容,发现两个文件的内容也是一模一样的,那么当软链接一个可执行程序呢?我们发现两个文件都是可以执行的,且运行结果一样。
|
|
3.2 硬链接inode和硬链接数
还是上图的硬链接,我们可以看的它的硬链接数为2,着我们应该可以理解,因为我们确确实实创建了一个硬链接文件TEST,所以硬链接数为2。这里值得注意的是,两个文件的inode是一样的,说明硬链接并没有创建新的文件,因为新文件的创建必定会有信inode编号的生成。
当我们新建一个硬链接文件,硬链接数变为1,那么当我们删除之后,硬链接数会有什么变化呢?我们通过实例来观察。
我们通过示例观察到,当我们删除test.c时,对硬链接文件TEST的影响无非就是硬链接数减1,还是可以正常打印文件中的内容,但是我们的软链接文件test,后面指向的文件一直在闪烁,并且其文件中的内容无法打印。
这里我们不禁疑问,如果是可执行程序呢?如果删除了源链接文件,创建的软硬链接文件还可以执行吗?我们接下来用实际行动表达结果。如图中,exe是我们的源文件,exe-h是创建的硬链接文件,exe-s是我们创建的软链接文件,我们现在将exe文件删除,查看结果。同样,硬链接文件可以正常执行,软链接文件报错。
|
|
3.3 总结
软硬链接的区别:a.软链接是一个独立的文件,有自己的inode,硬链接没有独立的inode。换言之建立软链接和曾经创建普通文件没有任何差别。b.软链接相当于快捷方式,硬链接呢?硬链接本质没有创建文件,只是建立了一个文件名和已有的inode的映射关系,并写入当前目录。有点像给文件取了个别命。
|
|
4. 软硬链接的作用
4.1 软链接的作用
软链接就相当于创建快捷方式,我们可以将这个快捷方式放到任意位置,可以便捷的访问源文件。那么硬链接的作用呢?
4.2 硬链接的作用
我们上面建立的硬链接是建立的文件,那么目录有没有软硬链接呢?目录的软链接和文件的软链接一模一样,这里不加以赘述,我们接下来重点研究目录的硬链接。
当我们创建了目录后,我们发现目录的硬链接数都是2,这点是和文件不一样的,我们创建文件时,硬链接数默认都是1的,这是为什么呢?普通文件的初始硬链接数为1,是因为在任何情况下,只有一组文件名和当前文件的inode关系。那目录的硬链接为什么是2呢?比如1目录,这个目录本身和inode有一个映射关系,当我们进入Test目录后,cd .也是一直处于当前目录,而且我们发现,Test目录的inode和进入Test目录后.的inode是一样的。相当于这里的.就是1目录的别命。所以我们运行程序的时候用./+可执行程序运行,这里的.就相当于上级目录。所以一个目录除了目录本身,在目录下还有一个.也代表该目录,所以目录的硬链接数为2。
|
|
这就在目录中建立了若干硬链接的连接,所以硬链接的作用就是方便目录之间通过相对路径方式进行跳转。
以上就是关于Linux中软硬链接的问题,各位有不明白的地方请及时私信小编,小编定会知无不言言无不尽。我们一起进步,加油!!!
以上是关于深入理解软硬链接的主要内容,如果未能解决你的问题,请参考以下文章
Linux深入理解重定向inode详解与软硬链接的概念及区别
Linux深入理解重定向inode详解与软硬链接的概念及区别