动态库和静态库

目录

深刻理解软硬链接

软链接

硬链接

软硬链接的应用

几个注意事项


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

深刻理解软硬链接

软链接

使用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的..指向。

相关推荐
@半良人30 分钟前
Jenkins流水线部署+webhook2.0
运维·jenkins
邹诗钰-电子信息工程33 分钟前
嵌入式基础知识复习(C语言)
linux·c语言·vim
瀚高PG实验室1 小时前
CentOS 8 安装HGDB V4.5 psql命令执行报错
linux·运维·centos·瀚高数据库
小醉你真好1 小时前
6、CentOS 9 安装 Docker
linux·docker·centos
chaofan9801 小时前
AI驱动的浏览器自动化革命:Claude Code + BrowserCat MCP深度实践指南
运维·自动化·claude code
Fireworkitte3 小时前
DevOps 详解
运维·devops
平生不喜凡桃李3 小时前
Linux 线程概念与控制
java·linux·运维
獭.獭.3 小时前
Linux -- 文件【中】
linux
无敌的牛4 小时前
Linux重定向的理解
linux·运维·服务器
java叶新东老师4 小时前
docker in docker - 在docker容器中使用宿主机的docker
linux·运维·flink