【Linux】学习-文件的软硬链接

文件的软硬链接

在上一篇拓展篇—文件系统中我们介绍过文件元的概念:

【Linux】学习-文件的软硬链接_第1张图片

我们在使用ls -l命令查看文件元信息的时候,有一个硬链接数,说明文件的硬链接数属于文件的属性之一,那么硬链接究竟是什么呢?软链接又是什么呢?他们又有什么区别呢?下面我们就来介绍一下

软链接

我们可以通过命令:ln -s 创建一个文件的软链接:

【Linux】学习-文件的软硬链接_第2张图片

软链接有什么用

  • 软链接本质上是属于一个新的文件,他有自己的inode,而文件内容就是指向文件的执行路径。如果一个可执行程序在路径中藏得很深,每次执行时要么进到程序对应的目录下要么要携带路径太麻烦了,因此用软链接的方式可以快速执行,跟在windows下在桌面创建一个程序的快捷方式一个道理

没创建软链接时执行:

!【Linux】学习-文件的软硬链接_第3张图片

创建软链接后:

【Linux】学习-文件的软硬链接_第4张图片

则可以在当前路径下很方便的执行程序

硬链接

我们可以通过ln 命令创建硬链接:

【Linux】学习-文件的软硬链接_第5张图片

硬链接有什么用?

硬链接创建的文件并不是一个独立的文件,他是与关联文件共享一个inode,说白了就是给文件起了一个别名,而文件元所显示的硬链接数就是此文件对应的inode下所有映射文件名的文件数。

有硬链接的文件被删除时会发生什么?

  • 在目录中将对应的记录删除
  • 将硬链接数-1,如果硬链接数变为了0,才将对应的磁盘释放

软硬链接区别

软链接的inode

我们通过ls -i 命令来观察软链接创建的文件:

image-20230926165729132

我们观察到,这两个文件的inode编号是不一样的,也就是说他们是不同的文件,有着不同的属性

  • 软链接有着独立的inode!

硬链接的inode

同样的,通过命令 ls -i 观察:

【Linux】学习-文件的软硬链接_第6张图片

我们观察到,这两个文件有着相同的inode编号,所以创建硬链接的本质就是在指定的目录下,建立了文件名和指定inode的映射关系,也就是一个inode对应了多个文件名,给文件起了个别名,仅此而已!在命令ls -l 下能查看硬链接数,其实就是查看此文件的inode一共映射有多少个文件名!

image-20230926170309805

同一inode下有两个文件名,因此硬链接数为2。本质上这是一个引用计数,当新建映射时++,删除时则–,减到0时此inode才会正式被回收。

软硬链接的区别:

  • 软链接有独立inode,硬链接没有

为什么空目录的硬链接数为2?

  • 目录本身自己是一个映射
  • 目录内部有一个隐藏文件:当前文件 “.” 也是一个映射

image-20230926172000751

【Linux】学习-文件的软硬链接_第7张图片

如果目录内存放有n个目录的话,则硬链接数为2+n,因为目录内还有一个隐藏文件:“…"上级目录,也是与inode的一个映射

你可能感兴趣的:(linux,学习,运维)