当前位置: 首页 > article >正文

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


http://www.kler.cn/a/534986.html

相关文章:

  • MATLAB中matches函数用法
  • 网络工程师 (20)计算机网络的概念
  • mounted钩子函数里如何操作子组件的DOM?
  • 前端开发中的“原生模块化”——深入解析ES模块(ESM)的使用与优化
  • 基于HTML生成网页有什么优势
  • 【Leetcode】4. 寻找两个正序数组的中位数
  • 大数据方向知识图谱及发展前景分析
  • mysql 学习9 约束-作用于表中字段上的规则,目的是保证数据的正确,有效性和完整性,约束关键字,外键约束
  • MySQL万能备份脚本
  • 股指入门:股指期货是什么意思?在哪里可以做股指期货交易?
  • 阿里云 | DeepSeek人工智能大模型安装部署
  • 如何利用Python爬虫获取商品销量详情实战指南
  • Ubuntu下npm运行报错Error: Cannot find module ‘node:path‘
  • 5 计算机网络
  • 深入解析:如何获取商品销量详情
  • A New Benchmark In Vivo Paired Dataset for Laparoscopic Image De-smoking
  • 封装Redis模块(最全面的教程!)
  • spark 性能调优 (一):执行计划
  • Android_P_Audio_系统(2) — AudioTrack
  • 微信小程序获取openid和其他接口同时并发请求如何保证先获取到openid
  • Zookeeper(34)Zookeeper的延迟问题如何解决?
  • 网络编程day1
  • langchain教程-9.Retriever/检索器
  • python基础入门:2.3字符串高级操作
  • 自由学习记录(34)
  • 深入浅出 DeepSeek V2 高效的MoE语言模型