hello,各位读者大大们你们好呀
系列专栏:【Linux初阶】
✒️✒️本篇内容:初识软硬链接,软硬链接的区别,理解软硬链接,软硬链接的应用,文件acm时间
作者简介:计算机海洋的新进船长一枚,请多多指教( •̀֊•́ ) ̖́-
建立一个软连接文件 soft_file.link
:假设我们有一个 makefile.txt文件,可以使用ln -s
命令,将我们的soft_file.link 对 makefile.txt进行软连接。
ln -s myfile.txt soft_file.link
通过观察,我们可以发现这是一个l
开头的文件,这种文件我们称之为 链接文件
。同时,通过观察链接文件与被链接文件的 inode,它们具有相互独立的 inode,我们可以知道这是两个独立的文件。
总结,软连接文件权限以 l 开头,具有独立的 inode。
———— 我是一条知识分割线 ————
建立一个硬连接文件 hard_file.link
:假设我们有一个 makefile.txt文件,可以使用ln
命令,将我们的hard_file.link 对 makefile.txt进行硬连接。
ln myfile.txt hard_file.link
———— 我是一条知识分割线 ————
软硬链接的区别:是否具有独立的 inode
总结:我们以 是否有独立的 inode判断软硬链接。
———— 我是一条知识分割线 ————
通过观察,我们不难发现,硬链接的 inode和被链接文件的 inode是同一个!假如我们在 makefile.txt中写入内容,没有在 hard_file.link中写入内容,分别输出 makefile.txt 和 hard_file.link的内容,我们可以发现它们的输出内容也一样。
也就是说:建立硬链接,根本没有建立新文件。因为系统没有给硬链接分配 独立的 inode。既然没有建立文件,也就没有自己的属性集合和内容集合,因此我们不难推断出,它使用的是被链接文件的属性集合和内容集合。
总结:硬链接共享被链接文件的 inode。
———— 我是一条知识分割线 ————
其中 inode里面包括一个引用记数 count
:它记录的是有硬连接数。当有多一个文件名链接 inode时,count++,count初识数为1。我们可以通过 ll -li
指令查看文件的 count,观察下图,创建硬链接后,makefile.txt 和 hard_file.link 的 count 由1变为了2.
总结:inode中由count引用记数,用于记录本 inode硬链接数。
———— 我是一条知识分割线 ————
什么时候一个文件被真正删除呢?答案是,当一个文件 inode的硬链接数变为 0,也就是 count变为 0的时候一个文件才被真正删除。下图示例中将硬链接被链接文件删除,本质上只改变了 count,没有删除文件。
总结:硬连接数(count)变为 0,一个文件才被真正删除。
———— 我是一条知识分割线 ————
我们删除源文件后发现,软连接文件进行了报错,因为还有硬链接文件(count=1),源文件的 inode依旧存在,说明软连接并不是用 inode进行标记的。
我们可以思考一下,我们在计算机使用过程中,是使用什么方法查找文件的,不就是通过文件的路径和文件名进行查找的吗?实际上,软连接通过 目标文件的路径(具体路径 - 其中包括目标文件的文件名),对目标文件进行标定
。
我们进一步做推断,这个路径只能放在这个软链接文件的数据块中。因此,将目标文件(源文件)删除,这个路径就失效了(不完整了),软连接也就失效了。
总结:软连接文件是独立文件,拥有自己的数据块,数据块中存储的是目标文件的路径(包括目标文件名、很具体的那种),它可以通过目标文件的路径,找到目标文件。
补充:删除目标文件,软连接失效,新建同名目标文件,软连接恢复。 删除软连接,对目标文件无影响。
为什么我们双击电脑的快捷键图标,能运行我们的程序呢?答案就是,快捷键属性中保存有我们目标可运行程序的路径,双击操作之后通过软连接的方式完成了跳转。
快捷方式的意义:方便快捷的获得服务。
总结:软连接 = 快捷方式
Linux下,会有不同深度的目录,我们可以通过软连接的方式,将软连接文件放在不同于目标文件的目录下,使用户在不同的目录下,也可以快捷简便的运行或打开该文件。
软连接的存在,让文件在非存在目录下也可以被访问。
创建一个空目录,通过指令我们可以发现,目录的默认 count为2,这是为什么呢?下面我们做一个实验:创建一个名为 empty的空目录,进入目录并通过 ls -lina
查看所有文件(包括隐藏文件)
最终我们可以发现,其中还有两个文件,一个是 .
,另一个是 ..
;注意,点也是一个文件。根据我们之前所学知识,我们知道, .
代表的含义就是当前目录, ..
代表的含义为上一级目录。
普通文件 count默认为 1,这是因为目录本身的文件名与对应的 inode有映射关系。而目录文件 conut默认为 2,这是因为目录中还有一个隐藏文件 .
,它与目录的 inode也具有映射关系。
当我们在 empty的空目录下再创建一个空目录,empty的 count会变成 3,这是因为它的下级目录中会有一个隐藏文件 ..
(代表上级目录)与 empty的 inode形成映射关系。
我们可以通过观察 inode进行验证:这是硬链接应用的一种体现。
至此,我们就明白了指令 cd ..
的原理是什么了。 实际上就是因为 ..
作为上级目录的硬链接文件,指向的是上级目录的路径。
总结:硬链接帮助树状结构的目录实现了,向下查找和向上回退。
操作系统为了保证文件查找流程稳定,防止出现目录与目录之间形成闭环,导致无法顺利按树状结构进行向下查找和向上回退的情况出现,它:不允许用户给目录建立硬链接。
注意:操作系统不允许用户给目录建立硬链接。
对于我们任何一个文件来说都有三类时间:
我们可以通过 stat
指令进行查阅,下面举一个简单的例子:
stat test.c
总结:
软硬链接 和 文件acm时间 的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!