文件的软硬链接
在上一篇拓展篇—文件系统中我们介绍过文件元的概念:
我们在使用ls -l命令查看文件元信息的时候,有一个硬链接数,说明文件的硬链接数属于文件的属性之一,那么硬链接究竟是什么呢?软链接又是什么呢?他们又有什么区别呢?下面我们就来介绍一下
软链接
我们可以通过命令:ln -s 创建一个文件的软链接:
软链接有什么用
- 软链接本质上是属于一个新的文件,他有自己的inode,而文件内容就是指向文件的执行路径。如果一个可执行程序在路径中藏得很深,每次执行时要么进到程序对应的目录下要么要携带路径太麻烦了,因此用软链接的方式可以快速执行,跟在windows下在桌面创建一个程序的快捷方式一个道理
没创建软链接时执行:
!
创建软链接后:
则可以在当前路径下很方便的执行程序
硬链接
我们可以通过ln 命令创建硬链接:
硬链接有什么用?
硬链接创建的文件并不是一个独立的文件,他是与关联文件共享一个inode,说白了就是给文件起了一个别名,而文件元所显示的硬链接数就是此文件对应的inode下所有映射文件名的文件数。
有硬链接的文件被删除时会发生什么?
- 在目录中将对应的记录删除
- 将硬链接数-1,如果硬链接数变为了0,才将对应的磁盘释放
软硬链接区别
软链接的inode
我们通过ls -i 命令来观察软链接创建的文件:
我们观察到,这两个文件的inode编号是不一样的,也就是说他们是不同的文件,有着不同的属性
- 软链接有着独立的inode!
硬链接的inode
同样的,通过命令 ls -i 观察:
我们观察到,这两个文件有着相同的inode编号,所以创建硬链接的本质就是在指定的目录下,建立了文件名和指定inode的映射关系,也就是一个inode对应了多个文件名,给文件起了个别名,仅此而已!在命令ls -l 下能查看硬链接数,其实就是查看此文件的inode一共映射有多少个文件名!
同一inode下有两个文件名,因此硬链接数为2。本质上这是一个引用计数,当新建映射时++,删除时则–,减到0时此inode才会正式被回收。
软硬链接的区别:
- 软链接有独立inode,硬链接没有
为什么空目录的硬链接数为2?
- 目录本身自己是一个映射
- 目录内部有一个隐藏文件:当前文件 “.” 也是一个映射
如果目录内存放有n个目录的话,则硬链接数为2+n,因为目录内还有一个隐藏文件:“…"上级目录,也是与inode的一个映射