1 挂载分区
文件系统1中已经知道了能够根据inode号在指定分区找文件了,也已经能根据目录文件内容,找指定的inode了,在指定的分区内,就可以对文件进行操作了。但是还有几个问题,那就是inode是不能跨分区的,Linux下有多个分区,那Linux下是我们是如何知道自己在那一个分区的?
1.分区写入文件系统,无法直接使用,需要和指定的目录关联,进行挂载才能使用。
2.因此,可以根据访问目标文件的"路径前缀"准确判断我在哪⼀个分区。
例如:
/home/iu/study/test1/home/iu/study/test2
将两个分区分别挂载到这两个目录下时,在该分区下创建文件,对文件进行操作,需要进行路径解析,进行路径解析时,路径前缀就会有一部分是该分区的路径,这样就能确定该文件在哪个分区里面了。
总结(文件系统的大致操作流程):
2 软硬连接
2.1 硬链接
前面我们知道,每个文件名对应一个inode,那多个文件名是否可以对应多个inode呢?其实这是可以的。这就是建立硬链接。
命令:
ln [被链接的文件名] [链接的文件名]
硬链接,其实可以理解为重命名,可以用来文件备份。本质是并没有创建新的文件,而是在指定的目录文件下(内容中),建立了一个新的文件名与inode的映射关系。
利用ls命令查看文件信息时,可以看到这里数字2,1,2这是什么呢?其实是引用计数,一个文件inode对应了多少个文件名,在删除时,引用计数--,当减为0时才会将对应磁盘上的文件删除。
注意:目录文件不能创建硬链接
前面说过,访问文件时需要路径解析,会构建dentry树结构,如果创建了目录的硬链接,就会形成路径环路问题。
还有一点就是我们在创建一个目录文件时,默认引用计数为2,这是因为有 . (当前路径)的存在,在当前目录文件下再创建一个目录文件时,引用计数就会变成3,是因为在新的目录文件下存在 .. (上一级路径),相等于有三个指向同一个inode了。
这里不是系统都创建目录文件的inode了吗?不会形成环路问题吗?
其实这是经过特殊处理的,可以理解为在构建dentry树结构时,. 和 ..,被作为递归出口,将这两个忽略掉了。
2.2 软连接
硬链接是通过inode引用另外⼀个文件,软链接是通过名字引用另外⼀个文件,但实际上,新的文件和被引用的文件的inode不同(这是两个不同的文件),其实软连接中的文件内容对应的是,对应文件的文件路径字符串。应用主要是创建一些快捷方式。
命令:
ln -s [被链接的文件名] [链接的文件名]
2.3 软硬连接对比
软连接是独立文减件
硬链接只是文件名和目标文件inode的映射关系