引言
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则被回收。
篇尾
坚持每天学一点,知识是需要日积月累的,加油~ 分享给大家~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。