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

在实际应用中:

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

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

相关推荐
等等,要下雨30 分钟前
linux安装ollama
linux·运维·服务器
Starry_hello world5 小时前
Linux 的准备工作
linux·笔记·有问必答
Rverdoser6 小时前
服务器(一种管理计算资源的计算机)
运维·服务器
流浪法师126 小时前
SecProxy - 自动化安全协同平台
运维·安全·自动化
_考不上研究生不改名6 小时前
【完美解决】VSCode连接HPC节点,已配置密钥却还是提示需要输入密码
linux·服务器·vscode·远程连接·hpc·超算集群
_长银7 小时前
Vim搜索和替换
linux·编辑器·vim
刚入门的大一新生7 小时前
C++初阶-C++入门基础
开发语言·c++
IT _oA7 小时前
Active Directory 域服务
运维·服务器·网络·windows·笔记
weixin_428498498 小时前
Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法
c语言·c++·visual studio
·云扬·8 小时前
【BUG】阿里云服务器数据库远程连接报错
服务器·阿里云·bug