引言

inode 是一个Linux 非常重要的知识点,了解它有利于我们对Linux系统的进一步了解。

今天无意中看到了阮一峰老师对inode做的一个博客笔记,我这里简单的记录下学到的东西。

概念

存储单位:

  1. 扇区 (Sector),存世512字节(相当于0.5kb)

  2. 块(block),8个Sector 组成一个 block

文件存储分为两个部分:

  1. 数据存储

  2. 文件元信息

文件元信息就是inode

inode内容

inode文件元信息包含以下内容:

  1. 文件的字节数

  2. 文件拥有者的User ID

  3. 文件的Group ID

  4. 文件的读、写、执行权限

  5. 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  6. 链接数,即有多少文件名指向这个inode

  7. 文件数据block的位置

查看inode信息

stat 1.txt

查看硬盘的inode总数和已经使用数量

df -i

inode号码

每个文件都会有inode号码,相当于mysql 数据库里的表id,用来查找数据的。每个文件名都会对应一个inode号码,我们打开一个文件的时候实际经历了以下步骤:

  1. 通过文件名去找对应的inode号码

  2. 通过inode号码获取inode信息

  3. 通过inode信息查找数据所在的block,读取数据

查看文件/目录的inode号码

ls -i 1.txt

特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。

  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

篇尾

坚持每天学一点,知识是需要日积月累的,加油~ 分享给大家~

参考

个人博客

原文