【Linux】理解Linux中硬链接和软链接
Linux中硬链接和软链接
- 0 引言
- 1 硬链接(Hard Link)
- 1.1 让文件之间产生硬链接关系
- 1.2 不能给目录创建硬链接
- 2 软链接(Sort Link)
- 2.1 让文件产生软链接关系
- 2.2 目录也可以产生软链接关系
- 2.3 软链接的应用场景
- 3 总结
0 引言
在之前的文章中:Linux EXT2文件系统,我们讲到每个文件都有自己的一个inode,并且inode表里面并没有存储文件的名称,也就是说OS想识别一份文件,只要知道inode即可。那么文件名其实是给用户使用的,也就是说,每个文件名都有一个inode与之对应,这种对应关系本质上是一种硬链接,与之对应的还有软链接。下面将解释什么是硬链接和软链接。
1 硬链接(Hard Link)
硬链接是指通过索引结点来进行链接。
而这个索引结点就是我们的inode,通过硬链接的文件,inode是相同的,也就是说,一个inode可以对应多个文件。
1.1 让文件之间产生硬链接关系
$ touch test.txt//创建一份测试文件
$ ln test.txt hard_link_test//ln 命令不加参数默认硬链接
$ ll -il//查看文件的inode
我们可以看到这两个文件的inode是相同的,硬链接数是2
Linux中文件的硬链接数默认是1,因为一份inode与文件名硬链接。
然后我们刚才让test.txt和hard_link_test这两个文件产生了硬链接关系,所以现在是2。
这两份产生硬链接关系的文件中,当我们任意改变一份文件的内容,另外一份文件的内容也会随之改变。
当我们删除这两份文件中的任意一份,另外一份文件还得以保留。
1.2 不能给目录创建硬链接
需要注意的是,OS不允许我们给目录创建硬链接,虽然OS自己可以给目录创建硬链接,但是OS管理的一般比较好。
Linux的目录其实是一颗多叉树
如果OS允许我们给目录硬链接的话,就容易产生环形结构,当我们要定位目录下的文件的时候,就不能简单通过文件名去定位了。
$ mkdir test1
$ ln hard_test test1
ln: ‘test1’: hard link not allowed for directory
//不允许给目录硬链接
2 软链接(Sort Link)
Linux中,软链接就像Windows的快捷方式一样。
我们可以把软链接理解成一个链接或是一个路径,通过这个链接或路径我们打开指定的文件。
值得注意的是,上面说的硬链接只能在同一个文件系统下创建,而软链接可以指向不同的文件系统。 软链接的产生可以说就是为了摆脱这个限制的。
同时,目录不能产生硬链接,而可以产生软链接。
2.1 让文件产生软链接关系
$ ln -s test.txt sort_test//ln 加s参数就是软链接
我们可以看到这两份文件的inode并不相同
2.2 目录也可以产生软链接关系
$ mkdir test1//创建一个目录
$ ln -s test1 sort_test1//软链接该目录
我们可以看到,目录可以产生软链接关系
和硬链接一样,这两份文件当任意一方的内容发生变化时,另外一方也会同步发生变化。
创建软链接一定要使用绝对路径,不要像上面使用相对路径,否则可能会出问题。
当我们不想使用这个软链接的时候,像Windows系统下一样,直接删除这个快捷方式就好了。
当我们直接把软链接指向的路径文件给删了,这个软链接也就失效了。
2.3 软链接的应用场景
- 有时候我们总是需要执行很多的命令,而且执行的这些命令又是对应不同的目录的路径,有些路径真是又长有难记,敲出整个路径真是费劲,效率也变低了,这时候软链接的作用就体现出来了,把这些又长又臭的路径创建一个软链接到当前的路径下,是不是路径简单多了。
- 当我们想使用第三方库的时候,方便链接库。
3 总结
硬链接和软链接的区别就在于
1.硬链接产生的inode相同,软链接不同。
2.硬链接只能在同一文件系统使用,软链接可以指向不同的文件系统。
3.OS不允许我们将目录硬链接,软链接可以。
4.硬链接的文件,删除了一份,另外一份还得以保留。软链接的话,不能删除被指向的文件,否则软链接失效。
虽然硬链接和软链接的文件,都会随内容同步变化,但是在实际应用中硬链接使用的比较少,更多的是使用软链接。