软硬链接

什么是软硬链接

在linux里面我们可以首先创建一个文件

然后使用指令ln -s创建一个软链接,ln指令创建一个硬链接

image-20230723151330931

我们成有独立inode的链接称之为==软链接==

没有独立inode的链接称之为==硬链接==

==这就是软硬链接最大的差别!==

具有独立inode的软连接——可以被当做独立的文件看待!

如何理解硬链接

image-20230723151430104

我们可以看到硬链接无论是创建时间,还是所属组,除了名字之外几乎都是一样的!

image-20230723151915822

当我们对myfile进行写入,我们可以发现硬链接的大小也一起改变了!但是软链接没有任何变化!

image-20230723152050459

使用cat读取文件我们发现里面的内容以一模一样的!

==硬链接完全没有新增任何文件!因为没有给硬链接分配独立的inode!硬链接所用使用属性和内容都是使用链接的文件的!没有自己的属性集合和内容集合!==

image-20230723153351087

这个计数器称之为——引用计数——又叫硬链接数!

==硬链接本质就是在指定的路径下,新增文件名和inode编号的映射关系!==

image-20230723153833768

如何理解软链接

image-20230723154621505

这个我们也可以看出来,软链接来识别一个文件不是依靠inode来实现的!

而是依靠目标文件的文件名来进行标识的!

==软链接具有独立的inode!也就是说具有独立的数据块!——那么其实软链接的数据块里面存的就是这个文件的路径==

这就是为什么当我们删除文件的时候这个软链接就失效了!

image-20230723155059184

无论是重新创建一个==同名的硬链接==还是重新创建==一个同名的文件==!

我们发现都可以使得该软链==接重新生效!==

我们也可以通过unlink指令来去掉软链接

image-20230723155413351

硬链接也可以通过unlink去除

==软链接——其实就是Windows下的快捷方式!==

软链接的作用

==软链接的作用就是帮助我们快速的找到该文件——就是如同快捷方式一样==

例如:我们在一个很深的文件下有一个可执行程序,如果正常的使用我们就得将整个路径都打出来,但是有了软链接之后,我们就可以直接使用这个软链接来打开这个可执行文件!

image-20230723161208664

像是一个这样的程序

image-20230723161419082

我们可以通过软链接来简单的使用这个可执行程序! ——==这就是软链接最广泛的应用==

硬链接的作用

image-20230723161848959

我们创建一个空文件夹——我们会发现空文件夹一开始的硬链接数就是2!

而一个普通文件则是1——这是为什么?因为普通文件创建后本身就有一个文件名和inode就有一个映射关系,但是为什么空目录是2呢?

image-20230723162324705

任意一个目录里面其实都是 一个点和两个点我们发现,==目录的inode和一个点的inode是一致的==!这就是为什么一个点是==当前目录==的含义!这个一个点就是当前目录的硬链接

image-20230723163455822

我们在该空文件夹里面再创建一个文件,不出所料的,这个空文件夹也有两个硬链接!

==但是我们发现了dir文件里面的两个点和我们这个空文件的inode编号是一模一样的!==

==而且创建了dir后,硬链接数也增加了!==——这是因为dir里面的两个点作为==上一个目录==所以自然也要硬链接到上一个目录的inode!

image-20230723164005281

==这就是一个文件的树状图==

这也是==硬链接的应用==

image-20230723164234626

硬链接是不可以硬链接文件夹的!——普通用户不允许,只有操作系统自己允许,所以才会有一个点和两个点这两个硬链接

amc时间

Acesss:最后访问时间

Modify:文件内容最后修改时间

change:文件属性最后修改时间

image-20230723165813863

对于任意一个文件都有这三个时间!

image-20230723165839617

当我们修改文件的权限的时候——其实就是修改了文件的属性!所以change就是修改了文件的属性!

image-20230723165938129

==当我们尝试对文件写入的时候我们发现modify改变了!但是为什么change也改变了?不是说change只有文件属性改变了才会一起修改吗——因为文件大小也是属性!我们写入了文件就变大了,所以文件的属性自然也一起改变了!==

当我们尝试访问的时候,我们就会发现access也会发生变化!

==但是当我们过一会(过个十几二十秒)在访问的时候我们会发现时间还是没有变化!——这是为什么?==

因为访问相比修改一般是更加的频繁的!早期的linux确实是一访问就修改!但是这样子在高频率的访问下效率就变低了!因为每一次都要去硬盘修改一下access时间!所以linux现在有一定的策略,再过来一定的时间或者一定的访问次数之后才会更新access时间!