​ 元数据和节点表构成了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
2
格式:
# ln 文件名 [硬链接文件名]

符号链接 symbolic/软链接 soft

​ 符号链接和软链接的叫法都是正确的,就如同硬连接一样,一个文件可以有不同的名字。

​ 软链接文件本质上是一个快捷方式,与原文件在本质上不属于同一个文件

软链接特点

  • 一个软链接的内容是它所指向的文件路径
  • 目录也可以充当软链接指向的目标
  • 软链接可以跨挂载分区创建
  • 软链接指向的是另一个文件的路径;其大小取决于路径字符串的长度。不会影响原文件的inode的引用计数
  • 在创建软链接时,如果原文件使用相对路径,则是对于软链接文件所在路径的相对路径,而非当前的工作目录。
1
2
3
4
5
格式:
ln -s <文件绝对路径> <软链接绝对路径>

查看链接文件指向的原文件:
readlink <软链接文件路径>

硬连接和软链接的区别

1.本质

​ 硬链接:本质是同一个文件

​ 软链接:本质不是同一个文件

2.跨设备

​ 硬链接:不支持

​ 软链接:支持

3.inode

​ 硬链接:相同

​ 软链接:不同

4.链接数

​ 硬链接:创建新的硬链接,链接数会增加。删除硬链接,链接数减少

​ 软链接:创建或删除,链接数不会变化

5.文件夹

​ 硬链接:不支持

​ 软链接:支持

6.相对路径

​ 硬链接:原始文件相对路径是相对于当前工作目录

​ 软链接:原始文件的相对路径得从软链接文件路径开始写,不如直接写绝对路径

7.删除原文件

​ 硬链接:知识链接数减一,但链接文件的访问不受影响

​ 软链接:链接文件将无法访问

8.文件类型

​ 硬链接:和原文件相同

​ 软连接:独属于连接文件,与原文件类型无关

9.文件大小

​ 硬链接:和原文件相同

​ 软链接:大小去决定原文件的路径字符串长度