文件元数据和节点表结构
元数据和节点表构成了Linux的文件系统,现在我们来详细讲解一下这些东西到底是怎么样的
inode 表结构
每个文件的属性信息:文件的大小、时间、类型等,被称为文件的元数据(meta data),这些元数据是存放在inode(index node)表中。inode表中有很多条记录组成,每一条记录对应了一个存放的文件元数据信息
每一个inode表记录了文件的以下信息:
- inode number: 唯一标识文件的节点号
- 文件类型: 七种文件类型表示
- 权限: 读(r:4)、写(w:2)、执行(x:1) 权限
- UID: User ID,文件所有者用户ID
- GID: Group ID,文件所属用户组ID
- 链接数: 指向该inode的文件名路径数量(到0前不会删除)
- 文件大小: 字节为单位
- 时间戳: atime、mtime、ctime
- 数据块指针: 指向磁盘存储位置的物理块地址
- 其他数据
**注:**当inode号耗尽时,即使磁盘有再多的空间,此时也无法再创建新文件。因为inode号已经分配完毕
目录
目录是一个特殊文件,目录文件的内容包含了此目录中文件的列表及inode号的对应关系
- 文件引用的是一个inode号
- 人是通过文件名来引用一个文件
- 一个目录是目录下的文件名与文件inode号之间的映射
命令cp
:
- 会分配一个空闲的inode号,在inode表中生成新文件
- 在目录中创建一个目录项,将名称与inode编号关联
- 拷贝的只有数据,文件是新生成的
命令rm
:
- 链接数递减,如果链接数到0将会释放inode号用于重用
- 将数据块标记为空闲,之后有新的写入才会覆盖掉原数据
- 删除目录项
- 数据如上文所述,还有恢复的可能。除非另一个文件使用数据块时将其全部覆盖了
命令mv
:
- 如果mv的目标和原文件在相同的挂载分区中。只会出现文件的新建和删除。但不影响inode表或磁盘上的数据位置,数据保持不动。但时间戳会改变
- 如果目标和原文件不在相同的挂载分区中,那mv指令就相当于先执行cp拷贝再使用rm删除
硬(hard)链接
硬链接本质上就是给文件起一个新的名称,但物理内存上使用的是相同文件。与快捷方式不同,有本质区别。
硬链接特性:
- 创建硬链接会在目录中增加记录项,如同正常文件一样
- 文件指向同一挂载分区上的同一个物理文件
- 两个文件的inode号相同
- 创建时文件的链接数会增加
- 删除其中一个文件时:rm命令指挥减少链接的计数和对应的目录记录项。除非将硬链接和文件本体都一起删除才会导致物理文件的删除
- 不能跨越挂载分区
- 目录不支持创建硬链接
1 | 格式: |
符号链接 symbolic/软链接 soft
符号链接和软链接的叫法都是正确的,就如同硬连接一样,一个文件可以有不同的名字。
软链接文件本质上是一个快捷方式,与原文件在本质上不属于同一个文件
软链接特点
- 一个软链接的内容是它所指向的文件路径
- 目录也可以充当软链接指向的目标
- 软链接可以跨挂载分区创建
- 软链接指向的是另一个文件的路径;其大小取决于路径字符串的长度。不会影响原文件的inode的引用计数
- 在创建软链接时,如果原文件使用相对路径,则是对于软链接文件所在路径的相对路径,而非当前的工作目录。
1 | 格式: |
硬连接和软链接的区别
1.本质
硬链接:本质是同一个文件
软链接:本质不是同一个文件
2.跨设备
硬链接:不支持
软链接:支持
3.inode
硬链接:相同
软链接:不同
4.链接数
硬链接:创建新的硬链接,链接数会增加。删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
5.文件夹
硬链接:不支持
软链接:支持
6.相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径得从软链接文件路径开始写,不如直接写绝对路径
7.删除原文件
硬链接:知识链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
8.文件类型
硬链接:和原文件相同
软连接:独属于连接文件,与原文件类型无关
9.文件大小
硬链接:和原文件相同
软链接:大小去决定原文件的路径字符串长度