本文摘自PHP中文网,作者巴扎黑,侵删。
这篇文章主要给大家介绍了在Linux中关于inode的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。背景
最近在复习Linux命令,到df的时候发现了一个之前忽略的东西。也就是 -i 这个选项,列出文件系统分区的inode信息。这个inode,是个什么东西?
inode是用来做什么的
inode是用来存储文件元信息的区域。中文译名叫做“索引节点”。
关于inode的背景知识
我们先复习下文件存储的一些内容。我们知道,文件存储在硬盘上,硬盘的最小存储单元呢,又被称为扇区,扇区的大小是512字节。
操作系统在硬盘上读取信息时,是按照一次性读取多个扇区的方式来的,而这多个扇区也叫块。通常,块的大小是4KB,大概有8个扇区的大小。需要注意的是,读取的块是连续的空间。
这个时候我们能知道,文件是存储在“块”中的,就像我们写C语言程序的时候,我们知道,当我们声明一个数组的时候,不仅仅会存储放在数组里面的值,还会存储对应的数组信息,比如数组的首地址、文件类型和数组长度等等,同样的,需要找一个地方存储文件的元信息,类似于文件的创建相关的信息、文件的长度等等。而这个地方,我们称做inode。
inode中存储的内容
inode包含着所存储文件的元信息,包含着这些内容:
文件的字节数。
文件创建者的ID。
文件的Group ID。
文件的读写等权限。
文件的相关时间戳。具体的有三个:ctime-->inode上一次变动的时间;mtime-->文件内容上一次变动的时间;atime-->文件上一次打开的时间。
链接数
文件数据的块位置
inode号码
第一次看到上面的存储内容后,我想大家多少会有相同的疑问,既然inode是存储文件相关信息的,为什么不存储文件名呢。理由就是,文件名并不是Unix/Linux操作系统识别不同文件的标准。
操作系统是通过inode号码来识别不同文件的。
在Unix/Linux系统中,用户层名是通过文件名来打开文件的,系统层面主要是通过了三个步骤来打开文件:
根据文件名找到对应的inode号码。
通过inode号码获取inode信息。
根据inode信息,找到文件数据所存的块,并独处数据。
inode的特殊作用
Unix/Linux系统中inode号码和文件名分离,这导致了系统中一些特别的现象:
删除inode节点,即是删除文件。有些文件可能无法正确删除,这时我们直接删掉对应的inode节点,就可以起到删除文件的作用。
移动文件或者重命名文件,不改变inode号码,仅仅只是改变文件名。
通常来说,系统是无法通过inode号码得到文件名的,当打开一个文件,系统往后就通过inode来识别该文件,不再考虑文件名。
因为inode号码的存在,系统可以在软件不关闭的情况下进行更新。系统通过inode号码,识别运行中的文件,更新过程中,文件以相同的文件名,新的inode存在,而不会影响到目前运行中的文件。而原先旧版的inode会在软件下一次打开时被回收,文件名会自动指向新的inode号码。
相关阅读 >>
更多相关阅读请进入《Linux》频道 >>