【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间

hello,各位读者大大们你们好呀
系列专栏:【Linux初阶】
✒️✒️本篇内容:初识软硬链接,软硬链接的区别,理解软硬链接,软硬链接的应用,文件acm时间
作者简介:计算机海洋的新进船长一枚,请多多指教( •̀֊•́ ) ̖́-


文章目录

  • 一、软硬链接初识
    • 1.软连接初识
    • 2.硬链接初识
    • 3.软硬链接的区别
  • 二、理解 硬链接 和 软连接
    • 1.理解硬链接
      • (1)硬链接原理
      • (2)count记录硬连接数
      • (3)文件真正删除(count=0)
    • 2.理解软连接
      • (1)删除目标文件,软连接会失效
      • (2)软连接 = 快捷方式
  • 三、软硬链接的应用
    • (1)软连接的应用 - 快捷方式
    • (2)硬链接的应用 - 目录
  • 四、文件 acm时间
  • 结语


一、软硬链接初识

1.软连接初识

建立一个软连接文件 soft_file.link:假设我们有一个 makefile.txt文件,可以使用ln -s命令,将我们的soft_file.link 对 makefile.txt进行软连接。

ln -s myfile.txt soft_file.link

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第1张图片

通过观察,我们可以发现这是一个l开头的文件,这种文件我们称之为 链接文件。同时,通过观察链接文件与被链接文件的 inode,它们具有相互独立的 inode,我们可以知道这是两个独立的文件。

总结,软连接文件权限以 l 开头,具有独立的 inode

———— 我是一条知识分割线 ————

2.硬链接初识

建立一个硬连接文件 hard_file.link:假设我们有一个 makefile.txt文件,可以使用ln命令,将我们的hard_file.link 对 makefile.txt进行硬连接。

ln myfile.txt hard_file.link

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第2张图片

———— 我是一条知识分割线 ————

3.软硬链接的区别

软硬链接的区别:是否具有独立的 inode

  • 软连接具有独立的 inode – 可以被当作独立文件看待
  • 硬链接不具有独立的 inode – 那硬链接我们应该如何理解呢?让我们继续向下研究。

总结:我们以 是否有独立的 inode判断软硬链接

———— 我是一条知识分割线 ————

二、理解 硬链接 和 软连接

1.理解硬链接

(1)硬链接原理

通过观察,我们不难发现,硬链接的 inode和被链接文件的 inode是同一个!假如我们在 makefile.txt中写入内容,没有在 hard_file.link中写入内容,分别输出 makefile.txt 和 hard_file.link的内容,我们可以发现它们的输出内容也一样。

也就是说:建立硬链接,根本没有建立新文件。因为系统没有给硬链接分配 独立的 inode。既然没有建立文件,也就没有自己的属性集合和内容集合,因此我们不难推断出,它使用的是被链接文件的属性集合和内容集合。

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第3张图片

总结:硬链接共享被链接文件的 inode

———— 我是一条知识分割线 ————

(2)count记录硬连接数

其中 inode里面包括一个引用记数 count:它记录的是有硬连接数。当有多一个文件名链接 inode时,count++,count初识数为1。我们可以通过 ll -li指令查看文件的 count,观察下图,创建硬链接后,makefile.txt 和 hard_file.link 的 count 由1变为了2.

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第4张图片

总结:inode中由count引用记数,用于记录本 inode硬链接数

———— 我是一条知识分割线 ————

(3)文件真正删除(count=0)

什么时候一个文件被真正删除呢?答案是,当一个文件 inode的硬链接数变为 0,也就是 count变为 0的时候一个文件才被真正删除。下图示例中将硬链接被链接文件删除,本质上只改变了 count,没有删除文件。
加粗样式

总结:硬连接数(count)变为 0,一个文件才被真正删除。

———— 我是一条知识分割线 ————

2.理解软连接

(1)删除目标文件,软连接会失效

我们删除源文件后发现,软连接文件进行了报错,因为还有硬链接文件(count=1),源文件的 inode依旧存在,说明软连接并不是用 inode进行标记的。

我们可以思考一下,我们在计算机使用过程中,是使用什么方法查找文件的,不就是通过文件的路径和文件名进行查找的吗?实际上,软连接通过 目标文件的路径(具体路径 - 其中包括目标文件的文件名),对目标文件进行标定

我们进一步做推断,这个路径只能放在这个软链接文件的数据块中。因此,将目标文件(源文件)删除,这个路径就失效了(不完整了),软连接也就失效了。

加粗样式

总结:软连接文件是独立文件,拥有自己的数据块,数据块中存储的是目标文件的路径(包括目标文件名、很具体的那种),它可以通过目标文件的路径,找到目标文件
补充:删除目标文件,软连接失效,新建同名目标文件,软连接恢复。 删除软连接,对目标文件无影响

(2)软连接 = 快捷方式

为什么我们双击电脑的快捷键图标,能运行我们的程序呢?答案就是,快捷键属性中保存有我们目标可运行程序的路径,双击操作之后通过软连接的方式完成了跳转。

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第5张图片

快捷方式的意义:方便快捷的获得服务。

总结:软连接 = 快捷方式


三、软硬链接的应用

(1)软连接的应用 - 快捷方式

Linux下,会有不同深度的目录,我们可以通过软连接的方式,将软连接文件放在不同于目标文件的目录下,使用户在不同的目录下,也可以快捷简便的运行或打开该文件。

软连接的存在,让文件在非存在目录下也可以被访问

(2)硬链接的应用 - 目录

创建一个空目录,通过指令我们可以发现,目录的默认 count为2,这是为什么呢?下面我们做一个实验:创建一个名为 empty的空目录,进入目录并通过 ls -lina查看所有文件(包括隐藏文件)

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第6张图片

最终我们可以发现,其中还有两个文件,一个是 .,另一个是 ..;注意,点也是一个文件。根据我们之前所学知识,我们知道, .代表的含义就是当前目录, ..代表的含义为上一级目录。

普通文件 count默认为 1,这是因为目录本身的文件名与对应的 inode有映射关系。而目录文件 conut默认为 2,这是因为目录中还有一个隐藏文件 .,它与目录的 inode也具有映射关系。

当我们在 empty的空目录下再创建一个空目录,empty的 count会变成 3,这是因为它的下级目录中会有一个隐藏文件 ..(代表上级目录)与 empty的 inode形成映射关系。

我们可以通过观察 inode进行验证:这是硬链接应用的一种体现。

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第7张图片

至此,我们就明白了指令 cd ..的原理是什么了。 实际上就是因为 ..作为上级目录的硬链接文件,指向的是上级目录的路径。

总结:硬链接帮助树状结构的目录实现了,向下查找和向上回退

操作系统为了保证文件查找流程稳定,防止出现目录与目录之间形成闭环,导致无法顺利按树状结构进行向下查找和向上回退的情况出现,它:不允许用户给目录建立硬链接。

注意:操作系统不允许用户给目录建立硬链接


四、文件 acm时间

对于我们任何一个文件来说都有三类时间:

  • Access 最后访问时间
  • Modify 文件内容最后修改时间
  • Change 属性最后修改时间

我们可以通过 stat指令进行查阅,下面举一个简单的例子:

stat test.c

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 & 文件acm时间_第8张图片

总结:

  1. 当我们对文件属性进行修改,文件对应的 Change(属性最后修改时间)也会被修改。
  2. 当我们对文件内容进行修改,文件对应的 Modify 和 Change 都会被修改;这是因为,文件内容被改时,文件的属性很大概率也会被改变,因此这两个时间都变了。
  3. 当文件被访问时,操作系统会根据策略(访问一定时间或次数)对 Access修改。

结语

软硬链接 和 文件acm时间 的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!

你可能感兴趣的:(Linux初阶,linux,服务器,java,开发语言,运维)