一、软硬链接的作用
软硬链接,是大家所熟系的内容了。链接就是方便人使用电脑上访问文件、方便进程访问文件的工具。比如软连接大家都有见过,在安装某款软件的时候要不要添加快捷方式。在windows系统上,我们右键点击文件的时候按's'就能创建文件的快捷方式,这个就是软连接。硬链接在windows中的使用倒是少一些,不过之后会讲解硬链接的使用方法
1. 软链接
根据windows中快捷方式的属性,我们能够理解,快捷方式中并不包含源文件中的内容。只是方便我们找到源文件的位置和打开它。
![](https://i-blog.csdnimg.cn/direct/d0b77a42f5df442fb749a1d446af3bce.png)
图1-1 软链接示意图
如图1-1所示,在文件夹中"easy"和"hard"分别是"test.c"和"dir"的软连接。
2. 硬链接
硬链接是修改了新文件名和iNode的映射关系。提到这里就不得不介绍一下inode的作用了。我们知道linux有文件管理系统,在这个系统下,我们可以通过文件名在磁盘中找到对应的内容。而inode记录的就是这些内容的位置和大小。在文件夹中会有文件名和inode的映射关系,我们在文件夹中就能够通过输入文件名,然后通过映射关系找到inode,再从inode找到对应的文件内容。而硬链接就是新建一个映射关系给inode和软连接中找到原文件的文件名是不一样的。
![](https://i-blog.csdnimg.cn/direct/367c44a5be4e442cab2ee3119b873af3.png)
图1-2 硬链接示意图
如图1-2所示,这里的"thard"是"test.c"的硬链接。和软连接相比,硬链接不容易看出来,但是如果查看inode会发现这两个文件的iNode号码相同,文件属性也相同。查看方式:在ls查看文件内容的时候增加"-i"选项。
![](https://i-blog.csdnimg.cn/direct/f6845318f5ef4510886e395be9a38942.png)
图1-3 查看文件inode
3. 软硬链接的特性
**共同点:**都能够通过链接的方式找到资源文件。
**不同点:**硬链接如果删除原文件后仍然能够使用。软链接作为快捷方式,如果原文件被删除了之后将无法继续使用。这是因为硬链接增加了inode的映射关系而软链接没有。原文件删除之后,原来的文件名就找不到inode了,于是inode所记录的内容被自动销毁。软链接就找不到inode,但是硬链接仍然可以。这些在图1-3和1-1中可以看出,在建立硬链接后文件拥有者前面有个计数。这个计数就是inode和几个文件名有联系,如果删除一个硬链接或者原文件,那么这个计数会减一,而软链接不会。
需要注意的是,软链接是单独的一类文件,属性在linux中是"l"。而硬链接就相当于复制了一份原文件,但是实际只是增加了对原文件inode进行了映射而已。
二、 软硬链接的使用方法
首先,建立软硬链接都需要用到一项程序------"ln"。使用这个命令建立软硬链接,然后通过对应的命令行去选择它的行为。使用起来相当方便,接下来会细致讲解使用格式和注意事项。
1. 建立软链接
1.1. 使用格式
ln -s 目标路径 快捷方式名称
1.2. 使用举例
对文件夹"dir"做一个软链接"r"。
![](https://i-blog.csdnimg.cn/direct/ff242ebd302f4afbac22006fef80c6e1.png)
图2-1 对文件夹进行软链接
再比如说对应用文件建立"test.c"建立软链接rc。
![](https://i-blog.csdnimg.cn/direct/c13888bfe9f34a2592b4d97de9924f1c.png)
图2-2 对应用进行软连接
这样都建立完毕了,没有出错。
2. 建立硬链接
2.1. 使用格式
ln 目标路径 快捷方式名称
比软链接简单,硬链接就不需要更多的命令行参数了。
2.2. 使用举例
硬链接不能使用程序主动建立文件夹的链接,如果要建立文件夹"dir"的硬链接"y",那么将会报错。
![](https://i-blog.csdnimg.cn/direct/5ac21ba0964b4e8895aada9e9c2fa5a2.png)
图2-3 对文件夹建立硬链接报错
这也是系统设计上的考虑,才不让建立文件夹的硬链接的。理由如下:
不让用户建立上级目录的硬链接,防止形成环路径使查找找回上级目录,导致在环路径上循环查找,从而得不到所需的结果。
在此之上系统自己会设计特殊的文件"."和".."这其实就是当前文件夹和上级目录的硬链接,文件夹的硬链接是存在的,所以为什么又会有呢?答案是系统自己认识"."和".."文件,查找的时候会跳过。同理软连接也会因为自己的文件性质是"l"而被查找跳过。这些也许在设计之初就被考虑到了。
对应用文件建立硬链接倒是可以,比如对"test.c"建立硬链接"yc"。
![](https://i-blog.csdnimg.cn/direct/4fdfdad3f42d4262b7e67fefb766f253.png)
图2-4 对应用建立硬链接
可以看到文件属性后面的计数变为了3,这是因为建立了硬链接所以计数增加了。
同时我们可以从图2-4中看到文件"."的计数为3。这是因为"."自己算一个,上级目录也记录了inode所以有一个,然后文件夹"dir"中有一个".."也表示它,所以总计三个。
3. 删除链接
对软硬链接的删除都能直接指定然后删除,例如这里将之前创建的链接"r"、"rc"、"yc"全部删除。
![](https://i-blog.csdnimg.cn/direct/05315b0d5aa24ddca0df251010944e53.png)
图2-5 删除链接
如图2-5所示,用rm指定文件便删除完毕了。对于硬链接来说,计数也减少了,没有问题。
作者结语
这个章节还是比较简单的,主要需要知道inode是用来维护文件的。文件的属性和大小都通过inode维护。具体inode怎么维护文件,在文件系统中有怎么样的地位,这又是一个比较枯燥的知识内容。毕竟这也是文件系统中一个比较小的模块,文件系统的组成太多了。不过,这些内容做了解也足够用了,有兴趣的小伙伴可以自己了解一下。