“Yeah It’s on. ”
解析文件系统原理
Inode and Block 概述
文件储存在硬盘上,硬盘的最小储存单位叫“扇区”(sector),每个扇区拥有 512 字节
操作系统从硬盘上读取数据时,不会按照扇区的方式读取,这样读取效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(Block,由多个扇区的空间组成)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是 4KB,即连续八个 sector 组成一个 Block。 Block 存储文件数据。
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的所属用户、文件所属组、文件的类型、文件的权限、文件的创建时间、文件的修改时间、文件的访问时间、文件使用的 Block 信息、文件的硬链接数、文件的大小等等属性信息。这种储存文件元信息的区域叫做 node。中文译名为“索引节点”,也叫i 节点。
Inode 和 Block 是文件系统组成的基本核心概念,文件系统是在分区格式化的时候形成的,文件系统负责组织文件在分区上的存放的。
注意:
inode 不包含文件名。文件名是储存在目录的目录项中
一个文件必须占用一个 inode,至少占用一个 block。
查看文件的inode信息:stat

| 英文 | 别称 | 中文翻译 | 何时修改 | 查看命令 |
|---|---|---|---|---|
| access | Atime | 访问时间 | 读取 | ls -lu |
| modify | Mtime | 修改时间 | 写入、修改 | ls -l |
| change/create | ctime | 改变时间/创建时间 | 修改文件名、写入、修改、改权限、做链接 | ls -lc |
目录文件的结构
目录也是一种文件,每个inode都有一个号码,操作系统用inode 号码来识别不同的文件,文件系统内部不使用文件名引用文件,而是使用 inode 号码来识别文件。对于文件系统来说,文件名只是 inode 号码便于识别的别称,文件名是目录的数据。
文件系统访问文件的步骤:
1、用户在目录中看到要访问的文件名
2、通过目录的数据找到这个文件名对应的inode号码
3、通过inode号码,获取inode信息(文件的元信息)
4、根据inode信息,找到文件数据所在的block,读出数据
查看文件的inode号码
- ls -i 文件名
- stat 文件名
-
find ./ -inum inode号 xargs rm -rf #删除乱码文件
删除指定inode号所对应的文件
格式:find ./ -inum inode号 -exec rm -i {} \;
find ./ -inum inode号 -exec rm -i {} \;这个命令是find命令找到文件后,对每个文件执行rm -i命令,即交互式地删除文件。这种方式会对每个文件都启动一个rm进程,如果文件数量很多,效率会比较低。find ./ -inum inode号 | xargs rm -rf这个命令是find命令找到文件后,将所有文件的名字都传递给xargs命令,然后xargs命令将这些文件名作为rm命令的参数,一次性启动一个rm进程来删除所有文件。这种方式在处理大量文件时会更高效。
从/root/目录下查找 3 天内修改的文件,并复制到/tmp下 find /root/ -mtime -3 -a -type f -exec cp } /tmp \;
查看文件系统的inode与block的信息
df -i 设备名(文件系统已挂载时查询,查询inode总数与已用数量)
格式化时指定文件系统的 inode 个数与 block 大小
mkfs.ext4 -N inode 数 -b 块大小(单位字节) 设备名
Linux 文件系统软硬链接原理
软硬连接对比
| 硬链接 | 软连接 | |
|---|---|---|
| 指向 | inode号 | 文件名 |
| inode号是否相同 | 相同 | 不同 |
| 是否可以针对目录 | 不可针对目录 | 可以针对目录 |
| 可否跨文件系统 | 不可跨文件系统 | 可跨文件系统 |
| 删除、重命名、移动源文件 | 不受影响 | 失效 |
| 创建命令 | ln 源文件 目标文件 | ln -s 源文件或目录 目标文件或目录 |