目录
我们今天来学习动态库和静态库!!!
深刻理解软硬链接
软链接
使用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的..指向。