动态库和静态库

目录

深刻理解软硬链接

软链接

硬链接

软硬链接的应用

几个注意事项


我们今天来学习动态库和静态库!!!

深刻理解软硬链接

软链接

使用ln -s 待链接文件 生成的软链接文件名,指令格式可以创建软链接,这个ln指令是用来创建链接的,创建软连接时必须带-s指令,这个-s是区分创建的是软链接还是硬链接的依据。然后软连接名是随意的,取什么都可以,没有link等的后缀都可以的,但不能是单纯的路径。

我们可以看到,对file.txt建立了软链接,此时权限后面的数字都是1,这个数字是inode的引用计数count,就是计算有几个指针指向了这个文件(的inode),奇怪呀,软链接都链接了文件,为什么不是2,自己的文件名映射了inode是1嘛,为什么不是2,所以软链接其实没有真正的链接了文件,只是仅仅保存了目标文件的路径。这是软链接和硬链接的核心区别之一。

如上图可以看出我们如果删除了原文件,那这个路径就消失了,所以对于只保存路径的软链接来说就失去了链接对象,但是之前我们看到了软连接里面的内容和原本的file.txt里面的是一样的,说明软连接的本质就是原文件,就是一个独立的文件,使用软连接就是在使用原文件,软链接是相对独立的,软链接有独立的inode,这种特性有点像windows的快捷方式。既然软链接不算真正的链接,那count计数记的是什么呀,count引用计数记的是一个目录或者文件的硬链接数。

硬链接

ln指令不加 -s,默认创建硬链接,名字还是随便的。

我们创建硬链接,为什么硬链接的引用计数和原文件一样,为什么呢,系统创建一个新目录项 file_hard.link,但它指向了和原文件相同的 inode,多了一个硬链接所以变成2了,所以硬链接本质不是一个独立的文件,没有独立的inode,他的存在更像Linux里的文件备份,硬链接的本质是一组文件名和已经存在的文件的映射关系。我们创建一个新的文件,此时引用计数就是1,可得创建新文件的本质就相当于创建硬链接,是文件名和inode的硬链接。由于硬链接和原文件是独立的,所以就算我们删除了原文件也可以查看到硬链接里面的备份。

软硬链接的应用

由于软连接相当于快捷方式的特点,今天我们可以在自己的当前目录下运行code.exe,但是需要声明在当前的目录,我们可以使用软连接将这个文件链接到/usr/bin目录下,这样直接运行软链接就可以找到code.exe直接运行了。

链接到这个目录下需要root权限的,然后不对呀为什么填写的是从一个路径链接到一个路径呢,你不是说软链接不能是路径吗,这里是的软链接是code,前面的路径只是放置的位置。code里面放置的就是code.exe吧,那直接运行code就是在变向的运行code.exe吧。

我们的系统头文件都放在/usr/bin/include路径里面,我们可以使用软链接在当前目录里面链接这个路径,这样直接访问软链接,那所有的系统头文件是不是都在当前目录看到了。

几个注意事项

Linux下禁止了对目录的硬链接,这是为了放置目录自己形成回路,为什么软链可以,因为系统会自动略过软链接,反正只是存储路径,而且前面也讲过了,软链接不是真的链接了!!!

目录的引用计数会因为多了一个.指向当前目录而多一个,而如果会存在下级目录,那又会因为下级的..指向它而又多一个。

所以dir1等于3就是这么来的 count(dir1) = dir1(本身名字指向) + dir1的.指向 + dir2的..指向。

相关推荐
Johny_Zhao13 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash3 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行4 天前
Linux和window共享文件夹
linux
木心月转码ing4 天前
WSL+Cpp开发环境配置
linux