深入解析Linux软硬链接:原理、区别与应用实践

Linux系列


`

文章目录


前言

上篇文章我们详细的介绍了文件系统的概念及底层实现原理,本篇我们就在此基础上探讨Linux系统中文件的软链接(Symbolic Link)和硬链接(Hard Link)。


学习本篇前,强烈建议你先去看一下上篇文件系统

一、软硬链接的概念引入

在Linux系统中,链接是一种将一个文件或目录与另一个文件见或目录关联起来的方法,分为硬链接和软链接(符号链接)两种。

1.1 硬链接

我们先来简单了解一下:

第一个是test.c文件对应的inode编号,第二个则表示该文件对应的硬链接数。

建立硬链接:

bash 复制代码
ln 目标文件  源文件  ----使用源文件与目标文件建立硬链接

可以看到我们两个文件的inode编号相同,链接数由1-->2,而上篇我们说过每个独立的文件,必须拥有自己的inode编号,所以硬链接并不会创建新的文件,那我们该如何理解呢?其实所谓的建立硬链接本质上就是在特定目录的数据块中新增一个,文件名和指向文件的inode编号的映射关系!!!

下面来进行一个测试:

下面我们将test.c删除:

可以看到将test.c删除后并不会对hardLink文件的存在产生影响,但是链接数由2-->1,这是因为在inode内部会存在一个引用计数 ,用来标记有多少个文件名与该inode建立了映射,当与该inode建立映射的文件名增加时,引用计数增加,反之减小,当计数为0时则将该inode标记为可释放。

验证文件的硬链接关系,还可以通过对比ls +选项显示出的文件信息进项验证,源文件与链接的目标文件信息是相同的,你可以试着改变文件权限来验证,这里就不演示了

1.2 软链接

建立软连接:

bash 复制代码
ln -s 目标文件 源文件------使用目标文件与源文件建立软连接

可以看到,使用的源文件softLinkinode编号与目标文件的inode编号不同,这表明源文件是独立的文件,建立软链接会创建新文件。软链接文件拥有独立的的ioode和数据块,其数据块存储的是目标文件的路径。

当你对目标文件进行删除后,软链接文件就失去了存在的价值。

二、软硬链接的使用场景

2.1 软链接

软链接文件存储的是目标文件的路径,这就好像Windows下软件的快捷方式一样:

Windows下创建的快捷方式本质就是通过路径查找对应的可执行文件,当我们直接去找软件的可执行文件去启动它,是非常不方便的。

在Linux系统下软链接文件就像目标文件的快捷方式一样,当目标文件存在于当前目录,而我们想在其他目录执行它,就可以在其他目录与他建立软连接:

c 复制代码
  1 #include<stdio.h>
  2 
  3 int main()
  4 {                                                                                                                                 
  5   printf("softLink--->\n");
  6   printf("softLink--->\n");
  7   printf("softLink--->\n");
  8   printf("softLink--->\n");
  9   printf("softLink--->\n");
 10   return 0;                
 11 }        

我们想在/home/ltn目录下执行/home/ltn/dir/dir2下的test文件,就可以在/home/ltntest建立软链接。

这样利用这种方法我们就可以在任意目录下执行任意目标文件了。
你可以尝试将软链接文件,创建在/user/bin路径下,这样就可以像执行指令一样执行源文件了

2.2 硬链接

我们先来看下面这个场景:

对于新建的目录文件,它的硬链接数为2,而普通文件的硬链接数为1,这时为什么呢?在新建目录下存在两个默认的目录

大家对这两个目录应该是非常熟悉的,.为当前目录,也就是与mydir目录建立的硬链接,而..为上级目录也就是与mydir的上级目录建立的硬链接,所以在加上,上级目录下的两个默认目录,于是就呈现出当前目录的硬链接数为2,上级目录的硬链接数为3。而我们平时就会使用这两种硬链接进行路径定位或切换,总的来说硬链接 可以帮助我们在Linux中进行路径索引。

需要注意的是,Linux下不允许随便对目录文件进项硬链接,原因如下:

我们知道,在Linux下文件目录呈现出一颗多叉树的形状,当用户使用find在家目录下查找一个文件时,就可能发生从目录0--->1----->2------>3----->0,发生循环引用的问题。

三、总结

  1. inode关联:硬链接与原文件共享同一个inode,而软链接有自己的inode。
  2. 跨文件系统:硬链接只能在同一个文件系统内创建,因为inode是文件系统级别的;而软链接可以跨文件系统,因为它只是存储路径字符串。
  3. 目录链接:硬链接不能链接到目录,这是为了防止在文件系统中形成循环,而软链接可以链接到目录。
  4. 删除原文件的影响:删除原文件后,硬链接仍然有效,因为inode的引用计数减1,但只有当计数为0时才会删除数据;而软链接则会失效。
  5. 文件大小:硬链接不会占用额外空间,因为它们共享数据块;而软链接会占用少量空间来存储目标路径。
  6. 创建方式 :使用ln命令创建硬链接,ln -s创建软链接。
相关推荐
FoldWinCard9 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计10 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud12310 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质11 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX11 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.11 小时前
Linux系统管理
linux·运维
阿龙的工作记录11 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手12 小时前
Linux的基本指令
linux·运维·服务器
hkj880812 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动14 小时前
Linux编程笔记3【个人用】
linux·笔记