linux中,软硬链接的作用和使用

一、软硬链接的作用

软硬链接,是大家所熟系的内容了。链接就是方便人使用电脑上访问文件、方便进程访问文件的工具。比如软连接大家都有见过,在安装某款软件的时候要不要添加快捷方式。在windows系统上,我们右键点击文件的时候按's'就能创建文件的快捷方式,这个就是软连接。硬链接在windows中的使用倒是少一些,不过之后会讲解硬链接的使用方法

1. 软链接

根据windows中快捷方式的属性,我们能够理解,快捷方式中并不包含源文件中的内容。只是方便我们找到源文件的位置和打开它。

图1-1 软链接示意图

如图1-1所示,在文件夹中"easy"和"hard"分别是"test.c"和"dir"的软连接。

2. 硬链接

硬链接是修改了新文件名和iNode的映射关系。提到这里就不得不介绍一下inode的作用了。我们知道linux有文件管理系统,在这个系统下,我们可以通过文件名在磁盘中找到对应的内容。而inode记录的就是这些内容的位置和大小。在文件夹中会有文件名和inode的映射关系,我们在文件夹中就能够通过输入文件名,然后通过映射关系找到inode,再从inode找到对应的文件内容。而硬链接就是新建一个映射关系给inode和软连接中找到原文件的文件名是不一样的。

图1-2 硬链接示意图

如图1-2所示,这里的"thard"是"test.c"的硬链接。和软连接相比,硬链接不容易看出来,但是如果查看inode会发现这两个文件的iNode号码相同,文件属性也相同。查看方式:在ls查看文件内容的时候增加"-i"选项。

图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"。

图2-1 对文件夹进行软链接

再比如说对应用文件建立"test.c"建立软链接rc。

图2-2 对应用进行软连接

这样都建立完毕了,没有出错。

2. 建立硬链接

2.1. 使用格式

ln 目标路径 快捷方式名称

比软链接简单,硬链接就不需要更多的命令行参数了。

2.2. 使用举例

硬链接不能使用程序主动建立文件夹的链接,如果要建立文件夹"dir"的硬链接"y",那么将会报错。

图2-3 对文件夹建立硬链接报错

这也是系统设计上的考虑,才不让建立文件夹的硬链接的。理由如下:

不让用户建立上级目录的硬链接,防止形成环路径使查找找回上级目录,导致在环路径上循环查找,从而得不到所需的结果。

在此之上系统自己会设计特殊的文件"."和".."这其实就是当前文件夹和上级目录的硬链接,文件夹的硬链接是存在的,所以为什么又会有呢?答案是系统自己认识"."和".."文件,查找的时候会跳过。同理软连接也会因为自己的文件性质是"l"而被查找跳过。这些也许在设计之初就被考虑到了。

对应用文件建立硬链接倒是可以,比如对"test.c"建立硬链接"yc"。

图2-4 对应用建立硬链接

可以看到文件属性后面的计数变为了3,这是因为建立了硬链接所以计数增加了。

同时我们可以从图2-4中看到文件"."的计数为3。这是因为"."自己算一个,上级目录也记录了inode所以有一个,然后文件夹"dir"中有一个".."也表示它,所以总计三个。

3. 删除链接

对软硬链接的删除都能直接指定然后删除,例如这里将之前创建的链接"r"、"rc"、"yc"全部删除。

图2-5 删除链接

如图2-5所示,用rm指定文件便删除完毕了。对于硬链接来说,计数也减少了,没有问题。

作者结语

这个章节还是比较简单的,主要需要知道inode是用来维护文件的。文件的属性和大小都通过inode维护。具体inode怎么维护文件,在文件系统中有怎么样的地位,这又是一个比较枯燥的知识内容。毕竟这也是文件系统中一个比较小的模块,文件系统的组成太多了。不过,这些内容做了解也足够用了,有兴趣的小伙伴可以自己了解一下。

相关推荐
Lana学习中20 分钟前
【运维杂记】连接不上远程服务器的问题处理
运维·服务器
1892280486128 分钟前
NV023固态MT29F16T08GWLCEJ9-QBES:C
大数据·服务器·人工智能·科技·缓存
AOwhisky1 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
Peace1 小时前
【Prometheus】
linux·运维·prometheus
LZZ and MYY3 小时前
RTS 在windows和Linux之间ShareMem
linux·运维·服务器
aningx3 小时前
openSUSE Leap 16.0 运行 sunshine 报错的解决方法
linux
爱学习的徐徐3 小时前
Linux 基础IO
linux·服务器
蛋蛋的学习记录3 小时前
C#窗体应用中使用EasyModbusCore通讯
服务器·c#·tcp
zt1985q3 小时前
本地部署源代码管理解决方案 Bitbucket Data Center 并实现外部访问
运维·服务器·数据库·网络协议·postgresql·源代码管理
xiaobobo33303 小时前
面向对象:linux内核中函数转数据的用法
linux·面向对象·隔离·函数指针绑定