在我们存储文件时,文件的属性和数据是分开存放于文件系统中的,通过下图我们可以简单理解一下文件系统。
理解文件系统:
文件系统中包括:超级块、inode节点表-、数据区
创建一个新文件主要有四个操作:
1.存储属性:
内核先找到一个空闲的inode节点,内核把文件信息记录到其中。
2.存储数据:
该文件需要存储在某几个磁盘块中,内核会找到对应空闲的磁盘块数,将内核缓冲区的数据复制到其中。
3.记录分配情况:
文件内容按顺序存入到磁盘块,内核在inode上的磁盘分区记录了上述块列表。
4.添加文件名到目录:
新的文件名abc。内核将入口(inode节点号,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容以及属性链接起来。
理解软硬链接:
一、概念
1. 硬链接:从上面的例子我们可以发现,真正找到磁盘上文件的并不是文件名,而是inode节点。其实在Linux中可以让多个文件名对应于同一个inode。硬链接是通过inode引用另外一个文件。
举个栗子:
我们先创建了一个文件abc,然后通过ln命令创建了abc的硬链接文件def,通过查看文件信息我们发现这两个文件的链接状态相同,inode节点也是相同的:663983,硬链接数为2。
2.软链接:通过名字引用另外一个文件。
举个栗子:
我们先创建了一个文件abc,然后通过ln -s命令创建了abc的软链接文件abc.soft,通过查看文件信息我们发现在abc.soft后面有个“->”指向了abc,而且这两个文件的链接状态不同,inode节点也不一样,各自的硬链接数为1。
二、理解
接下来我们来详细了解软硬链接的区别:
1. 首先我们要知道如何找到一个文件:① 目录项(文件名称,文件对应的inode节点号)
② inode节点(文件的描述信息,其中有文件数据的存储信息)
图解:
2.软硬链接是怎么找到文件的:
由上图我们可以得出结论:软链接文件更像是一个文件的快捷方式,它针对的是文件名(目录项)
硬链接更像是对一个文件名(目录项)的备份
3.我们在删除一个文件时,会做两件事情,第一是在目录中将对应的记录删除,第二是将文件的硬链接数-1。若一个文件的硬链接数为0时,系统就会将对应的磁盘释放。
也就是说删除的是目录项与inode节点的连接,所以当我们分别删除软硬链接后,会发现软链接文件无法再打开,是因为软链接无法再通过数据中存储的指向文件路径名找到文件了,而硬链接因为有跟源文件inode相同的节点,所以仍能通过自身的inode节点找到这个文件信息。
三、总结
1.软/硬链接文件:
①如何产生一个软链接文件:ln -s 源文件 软链接文件
②如何产生一个硬链接文件:ln 源文件 硬链接文件
③什么是软链接文件:软链接文件更像是一个文件的快捷方式,它针对的是文件名(目录项)
④什么是硬链接文件:硬链接更像是对一个文件名(目录项)的备份
2.软/硬链接文件的区别:
①软链接有自己的inode节点号,是一个单独的文件
硬链接文件inode节点号与源文件相同,是一个文件别名
②软链接可以对目录进行操作
硬链接不能对目录进行操作
③删除源文件,软链接文件将无法使用
删除源文件,硬链接文件不受影响
④软链接可以跨分区建立
硬链接不能跨分区建立