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怎么维护文件,在文件系统中有怎么样的地位,这又是一个比较枯燥的知识内容。毕竟这也是文件系统中一个比较小的模块,文件系统的组成太多了。不过,这些内容做了解也足够用了,有兴趣的小伙伴可以自己了解一下。

相关推荐
北辰水墨6 分钟前
深入理解软硬链接
linux·经验分享·笔记·软硬链接
huanzghui9 分钟前
在远程 Linux 服务器上运行 Jupyter Notebook(.ipynb 文件)
linux·服务器·jupyter
孫治AllenSun12 分钟前
【Linux】curl命令详解
linux·运维·服务器
牛十二17 分钟前
Mac本地部署DeekSeek-R1下载太慢怎么办?
linux·运维·ubuntu
虾球xz22 分钟前
游戏引擎学习第89天
linux·学习·游戏引擎
weixin_4415785142 分钟前
Centos 8 离线升级openssh 9.9
linux·运维·centos
NiNg_1_23443 分钟前
Docker最佳实践:安装Nacos
运维·docker·容器
m0_748233361 小时前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway
timerring1 小时前
Docker 101
运维·docker·容器
m0_548049701 小时前
Nginx 请求超时
运维·nginx