引言
inode 是一个 Linux 非常重要的知识点,了解它有利于我们对 Linux 系统的进一步了解。
今天无意中看到了阮一峰老师对 inode 做的一个博客笔记,我这里简单的记录下学到的东西。
概念
存储单位:
扇区 (Sector),存世 512 字节(相当于 0.5kb)
块(block),8 个 Sector 组成一个 block
文件存储分为两个部分:
数据存储
文件元信息
文件元信息就是 inode
inode 内容
inode 文件元信息包含以下内容:
文件的字节数
文件拥有者的 User ID
文件的 Group ID
文件的读、写、执行权限
文件的时间戳,共有三个:ctime 指 inode 上一次变动的时间,mtime 指文件内容上一次变动的时间,atime 指文件上一次打开的时间。
链接数,即有多少文件名指向这个 inode
文件数据 block 的位置
查看 inode 信息
1 | stat 1.txt |
查看硬盘的 inode 总数和已经使用数量
1 | df -i |
inode 号码
每个文件都会有 inode 号码,相当于 mysql 数据库里的表 id,用来查找数据的。每个文件名都会对应一个 inode 号码,我们打开一个文件的时候实际经历了以下步骤:
通过文件名去找对应的 inode 号码
通过 inode 号码获取 inode 信息
通过 inode 信息查找数据所在的 block,读取数据
查看文件/目录的 inode 号码
1 | ls -i 1.txt |
特殊作用
由于 inode 号码与文件名分离,这种机制导致了一些 Unix/Linux 系统特有的现象。
有时,文件名包含特殊字符,无法正常删除。这时,直接删除 inode 节点,就能起到删除文件的作用。
移动文件或重命名文件,只是改变文件名,不影响 inode 号码。
打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从 inode 号码得知文件名。
第 3 点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过 inode 号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的 inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的 inode 则被回收。
篇尾
坚持每天学一点,知识是需要日积月累的,加油~ 分享给大家~