【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,所有硬链接共享相同的文件数据,文件更改会同步,但不能跨文件系统且不能指向目录。

在实际应用中:

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

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

相关推荐
志栋智能1 小时前
运维超自动化的版本控制与回滚机制
运维·自动化
中云DDoS CC防护蔡蔡2 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
ClickHouseDB2 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
欧米欧2 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
Sakura_j_h_2 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
todoitbo3 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
时间售卖铺3 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw3 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos