理解linux inode
?
?
1. inode的由来和作用
2. inode表中包含什么内容
3. 文件系统如何通过inode读取文件
4. 一个特殊的存在类型:硬链接
5. 目录文件的结构
?
?
1、inode的由来和作用
?
?硬盘创建文件系统时,会把物理磁盘的扇区(512字节)创建为由多个扇区组成的“块”(目前常用的为4KB,即8个扇区)。当操作系统从磁盘读取数据时,磁头从“块”上读取数据。为了快速查找数据,必须在磁盘上专门划分出一个专门的区域存储数据的“索引”,以方便快速查找数据。这种数据区域的“索引”就称为inode(index node)。
图片来自马哥教育马永亮讲课PPT,画的比较抽象,但是就是这个意思,反正我也画不出来好的。
?
?
2、inode表中包含什么内容?
?
?inode的内容包含文件的大小、权限、属主属组、时间戳、数据块指针。可通过linux系统中的stat命令,可以查看文件的inode信息。
?
[[email protected] ~]# stat abc
File: ‘abc’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 50350850 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-01-14 13:52:33.155811474 +0800
Modify: 2018-01-14 13:52:14.461811925 +0800
Change: 2018-01-14 13:52:14.461811925 +0800
Birth: -
[[email protected] ~]#
?
file:文件名
size:文件大小
blocks:文件内容占用块数量
IO Block:文件系统块大小
inode:inode号码
links:文件被硬链接的次数
Access: (0644/-rw-r--r--) :文件属主、属组、其它组的权限
Uid :文件属主的用户ID号
Gid :文件属组的ID号
Access: 2018-01-14 13:52:33.155811474 +0800 :文件访问时间
Modify: 2018-01-14 13:52:14.461811925 +0800 :文件修改时间
Change: 2018-01-14 13:52:14.461811925 +0800 :文件改变时间
?以上信息中,读取文件时,Access时间会更新。对文件进行修改操作时,Modify信息会更改。而修改文件时,势必要打开文件,所以Access信息也会更新。若用输出重定向的方式修改文件,则Access信息不会更新。
?而Change的时间,只要文件元数据发生改变,该时间就会更新。
?
3、文件系统如何通过inode读取文件
?
?
?
?系统读取文件时,通过文件名查找到对应的inode编号,再通过该编号找到inode信息,最后根据inode信息中的数据指针找到对应的块并完成读取文件的操作。
?
?对于各种文件来说,数据指针位置存放的内容不同。
?
- ?普通文件,数据指针直接指向数据块。
- ?符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径。
- ?设备文件:存储数据指针的空间当中存储的是设备号(major, minor)。
4、一个特殊的存在类型:硬链接
?
?一般情况下,文件名和inode是一一对应关系,但硬链接允许不同文件名指向同一磁盘分区下的同一个inode号码。
?
?这意味着,可以通过不同的路径访问同一文件且不会多占用inode编号。且只要硬链接数不为0,文件会一直存在。删除任意一个文件名,不会对文件造成影响。
5、目录文件的结构
对于目录来说,按照linux的哲学思想,目录也是文件。进入目录就是打开目录(需要有x权限才可以进入)。如用ls查看目录
[[email protected] tmp]# ll -id /tmp 33574984 drwxrwxrwt. 10 root root 165 Jan 14 20:21 /tmp [[email protected] tmp]#
目录由一系列目录项组成,每条目录项包含文件的文件名以及文件对应的inode号。
?目录创建之后就会在目录下创建两个目录.和..,分别代表当前目录和当前目录的父目录。前者的inode就是当前目录的inode号码,所以对于目录文件来说,硬链接数至少为2。
原文地址:http://blog.51cto.com/11975865/2060860