你真的对 Linux 中的 Inode 了解吗?
引言#
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 信息#
stat 1.txt
查看硬盘的 inode 总数和已经使用数量#
df -i
inode 号码#
每个文件都会有 inode 号码,相当于 mysql 数据库里的表 id,用来查找数据的。每个文件名都会对应一个 inode 号码,我们打开一个文件的时候实际经历了以下步骤:
-
通过文件名去找对应的 inode 号码
-
通过 inode 号码获取 inode 信息
-
通过 inode 信息查找数据所在的 block,读取数据
查看文件 / 目录的 inode 号码#
ls -i 1.txt
特殊作用#
由于 inode 号码与文件名分离,这种机制导致了一些 Unix/Linux 系统特有的现象。
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除 inode 节点,就能起到删除文件的作用。
2. 移动文件或重命名文件,只是改变文件名,不影响 inode 号码。
3. 打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从 inode 号码得知文件名。
第 3 点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过 inode 号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的 inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的 inode 则被回收。
篇尾#
坚持每天学一点,知识是需要日积月累的,加油~分享给大家~
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: