【Linux】软硬链接

文章目录

软链接

软链接是一种指向文件或目录的快捷方式,是文件系统中非常重要的功能。它类似于Windows中的快捷方式,但更灵活,可以跨文件系统创建。

ln操作: ln是 Linux 中用于创建链接文件的命令,主要支持创建 硬链接 和 软链接。

创建软链接:

创建一个txt结尾的空文本文件。

cpp 复制代码
ln -s file.txt file

用上面这命令为file.txt创建软链接,软链接的名字是file。

查看一下这两个文件的inode:

可以看见这两个指向的是不同的inode,说明file是一个独立的文件。

我们向file中写入字符串,可以看见在file和file.txt中都能查看到。

软连接保存的是目标文件的路径,软链接就等同于Windows下的快捷方式,所以当我们修改file时,file.txt也会跟着改变,修改file.txt时,file也会跟着改变,软链接本质上底层保存的是对应文件路径,这个路径索引指定文件

硬链接

硬链接是指直接指向文件 inode 的链接,所有硬链接共享同一个 inode 和文件内容。硬链接在底层的机制与软链接不同,其主要特点在于它与目标文件紧密绑定。

创建硬链接:

cpp 复制代码
ln file.txt file-hard

通过对比硬链接和原文件,硬链接本质上不是一个独立的文件,因为硬链接的inode和原文件的inode相同,可以看见中间还有一行数字是1,2,2这一行数字是引用计数,记录硬链接数,我们打开Linux的代码:

可以看见在Linux的代码中,inode这个结构体中有一个count,这个count就是用来记录硬链接数的,当有一个文件名索引到这个inode的时候这个count就是1,两个文件名索引到这个文件名,这个count就会++。

理解了软硬链接之后,聊一聊软硬链接的使用场景

软硬链接的使用场景:

软链接的使用场景

快捷方式
上面这个图就是一个例子,Windows当中的快捷方式,存储的就是目标的路径,索引到目标位置。

硬链接的应用场景

首先我们来创建一空的目录。

可以看见新创建的文件的硬链接计数为什么是2呢?

进入到empty中,发现当中有....指向的是当前路径,我们来看看.的inode和empty的inode。

可以看见.的inode和empty的inode是相同的,说明.是empty的硬链接,这里.和empty同时指向一个inode,所以硬链接计数是2.

我们在硬链接中创建一个空目录。

在empty创建了一个空目录,为什么硬链接计数会变为3呢?

我们打开新建文件:

可以看见新建文件中有一个..,...是指向上一个文件的,而上一个文件就是empty,empty当中也也有一个.,这个指向的是本文件,也就是empty,三个文件名同事指向同一个inode,所以硬链接计数是3。,我们来对比一下inode:

可以看见三个文件名指向的确实是一个inode。

总结

软链接和硬链接是 Linux 文件系统中提供的两种链接方式,它们在功能和实现上有显著的区别。软链接通过路径指向目标文件,灵活性更强,可以跨文件系统,但目标文件被删除后会失效;硬链接直接指向文件的 inode,所有硬链接共享相同的文件数据,文件更改会同步,但不能跨文件系统且不能指向目录。

在实际应用中:

  • 软链接适合用于需要跨文件系统、指向目录或者希望链接易于修改的场景。
  • 硬链接则适用于在同一文件系统内需要保证文件数据持久存在的情况,例如备份或多点访问文件。

理解两者的特点和使用场景有助于在开发和管理文件系统时作出更优化的选择。

相关推荐
郝学胜_神的一滴7 小时前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
戴为沐8 小时前
Linux内存扩容指南
linux
zylyehuo18 小时前
Linux 彻底且安全地删除文件
linux
用户805533698031 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297911 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF1 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
卷无止境2 天前
C++ 的Eigen 库全解析
c++
卷无止境2 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴2 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
Web3探索者3 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh