文件系统 --- 软硬链接

序言

 经过上一篇的学习 在磁盘中的文件,我们大致了解了磁盘的物理结构,逻辑抽象结构以及文件在磁盘上的存储方式。在这篇文章中,我们会基于上一篇文章的部分知识点来介绍软链接,硬链接。


1. 软链接

1.1 软链接的概念

 软链接是一个特殊的文件类型,它包含了 对另一个文件或目录的引用(即路径名)。
当你通过软链接访问文件或目录时,系统会根据软链接中的路径去找到并访问实际的目标文件或目录。

1.2 软链接的使用场景

1. 快捷方式

 大家平时都使用过快捷方式吧,就比如我们打开一个文件,该文件实际存储在我们的 D盘 ,但是我们却可以在桌面打开使用他:
在这里插入图片描述

这就是因为该快捷方式存储了该文件的实际位置。

2. 共享文件

 在多用户环境中,可能需要在多个用户之间共享文件。通过创建指向共享文件的软链接,每个用户都可以在自己的工作区域中访问这些文件,而无需复制它们到各自的目录中。

3. 跨文件系统访问

 由于软链接可以跨文件系统创建,因此它们可以用于 在不同文件系统之间建立文件或目录的引用关系。这对于需要在不同分区或不同存储设备之间共享数据的场景特别有用。
💡知识清单 - 文件系统: 对于不同的分区可以采用不同的文件系统,文件系统的信息存储在该分区的 Super Block 中,不同的文件系统为该分区赋予专属的特性。

1.4 环境变量和路径设置

 在配置环境变量或系统路径时,可以使用软链接来指向特定的目录或文件。这有助于简化配置过程,并确保系统能够正确地找到所需的资源。

1.3 实现软链接

 我们在这里实现一个非常简单的程序:

 1 Test.cc                                                                                                                                                                                                      
   1 #include <iostream>
   2 
   3 
   4 int main(){
   5     std::cout << "I am just a test." << std::endl;
   6     return 0;
   7 }

 得到可执行程序 a.out ,正常情况下如果我们在其他路径下打开该可执行程序是非常繁琐的,就比如:./ubuntu/8_8/a.out。你必须直到该可执行程序具体在哪个文件,然后输入该文件的路径。
 但是建立软链接之后就非常轻松了,指令是 ln -s [目标文件或目录] [链接名]。现在我们试一下:ln -s /home/ubuntu/8_8/a.out Run。现在不管你在哪个路径,不管你离可执行文件有多远,你都只需要执行 ./Run 就好啦!
 在这里我们使用的是绝对路径来创建软链接,这种情况下不论软链接在哪里都可以被使用,但是如果你采用了相对路径来创建软链接,那么如果你的软链接不是位于 创建链接时的位置 那么就会失效,如:

上者是绝对路径创建的,下者是相对路径创建的:
在这里插入图片描述

现在统一将他们移向上一个目录,我们再看:
在这里插入图片描述
可以看到相对路径创建的已经失效了。


2. 硬链接

2.1 硬链接的概念

 硬链接用于文件和目录链接的一种机制。它 允许一个文件在文件系统中拥有多个文件名(或路径)。这些文件名指向同一个文件数据在磁盘上的物理位置。

2.2 硬链接的使用场景

1. 提高灵活性

 当需要在不同的目录下访问同一个文件时,可以为该文件创建多个硬链接。这样,用户就可以从多个路径访问到该文件,无需复制文件内容,提高了文件访问的灵活性。

2. 数据的备份与恢复

 当你误删一个文件时,如果该文件存在硬链接,那么该文件不会被真正的删除,因为我们知道 文件采取了引用计数的操作,当你删除时该文件的计数减一,只有计数为 0 时才会被真正删除。

3. 数据共享

 由于硬链接指向的是文件的实际数据而非数据的副本,因此使用硬链接可以节省磁盘空间。这在处理大型文件或需要频繁访问的文件时特别有用。

2.3 实现硬链接

 我们写一个简单的文件:

 1 log.txt +                                                                                                                                                                                                    X 
   1 hello, Linux!                  

现在我们使用硬链接来为该文件创建一个备份,指令:ln [选项] 源文件 目标文件,我们尝试一下:ln /home/ubuntu/8_8/log.txt log.txt.backup,创建成功:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4e8f01d352b841f88faab85c339443d1.png


3. 软硬链接的区别

3.1 定义与本质

 当我们创建软链接时,我们实实在在的创建了个文件,该文件存储的是我们目标文件的路径。
 当我们创建硬链接时,我们没有创建任何文件,硬链接和目标文件指向磁盘上同一个文件,我们只是新创建了 一个文件名 和 inode_number 的映射关系,存入目录中。
💡知识清单 - inode_number: 在一个文件分区中,每一个文件都具有一个独一无二的inode_number 来代表他,上一篇文章中进行了详细的介绍。 👉点击查看

3.2 依赖性与存在性

 硬链接与源文件相互独立。删除源文件不会影响硬链接的使用,只要存在至少一个硬链接指向文件的 inode_number,文件的数据就会存在。
 软链接依赖于源文件。如果源文件被删除或移动,软链接将指向一个无效的路径,导致无法通过软链接访问到目标文件。此时,软链接会失效。


3.3 跨文件系统能力

 硬链接不能跨文件系统使用,因为不同文件分区之间的 inode_number 是独立的,也就是说可以是不分区之间的 inode_number 是可以重复的。硬链接指向的 inode_number,在其他分区中代表的不是他自己分区的文件。
 软链接具有跨文件系统能力,他存储了目标文件的路径字符串,不依赖于文件系统的 inode_number


4. 总结

 在这篇文章中,主要介绍了软硬件的概念,本质,使用,以及两者之间的区别,希望大家有所收获😃。

  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值