动态库和静态库

目录

深刻理解软硬链接

软链接

硬链接

软硬链接的应用

几个注意事项


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

深刻理解软硬链接

软链接

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

相关推荐
星如雨落3 分钟前
Linux VScode 安装PHP环境
linux·php·visual studio code
IT 小阿姨(数据库)30 分钟前
PostgreSQL通过pg_basebackup物理备份搭建流复制备库(Streaming Replication Standby)
运维·服务器·数据库·sql·postgresql·centos
深思慎考1 小时前
Linux二进制查看工具——hexdump
linux·c++·二进制·文件查看·hexdump
云边有个稻草人1 小时前
从内核调优到集群部署:基于Linux环境下KingbaseES数据库安装指南
linux·数据库·金仓数据库管理系统
Raymond运维1 小时前
MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
linux·数据库·mysql
夜月yeyue2 小时前
ART 加速器、流水线与指令预测的关系详解
linux·服务器·c语言·单片机·嵌入式硬件·性能优化·嵌入式高阶技巧
---学无止境---2 小时前
Linux中select的实现
linux
旗讯数字2 小时前
企业OCR实战:基于OCR技术实现双节差旅报销单表格解析与文字信息自动化采集
运维·自动化·ocr·表格识别
bst@微胖子2 小时前
Harmony中EventHub实现发布订阅
linux·运维·ubuntu
爱奥尼欧3 小时前
【Linux】系统部分——线程安全与线程的单例模式
linux·安全·单例模式