0%

[深入理解linux] 1.what is inode

inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础

1. what is inode?#

linux文件相关 size 属性
扇区(Sector) 512bytes(0.5KB) 硬盘的最小存储单位
块(block) 通常4KB 文件存取的最小单位(操作系统读取硬盘,一次性读取一个块,提高效率)
inode 一般是128字节或256字节 储存文件的元信息(如创建者、创建日期、大小等)

inode, 中文译名为"索引节点",包含了与该 文件有关的一些信息

2. the content of inode#

use stat to check the content of inode:

1
2
3
4
5
6
7
8
9
$ stat mssh_ip.sh

File: ‘mssh_ip.sh’
Size: 183 Blocks: 8 IO Block: 4096 regular file
Device: fe21h/65057d Inode: 7120498 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 7857/liuwen03) Gid: ( 7857/liuwen03)
Access: 2021-01-28 14:13:04.213991000 +0800
Modify: 2021-01-28 14:13:04.213991000 +0800
Change: 2021-02-04 11:37:19.457991000 +0800

由此可以看出, inode包含文件的元信息,具体来说有以下内容:

1
2
3
4
5
6
7
  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

3. what is inode number?#

inode是inode table中的一个item。Linux扩展文件系统 (如ext2/ext3) 维护了一个inode的数组:inode table。inode table包含该文件系统中所有文件的列表。inode table中的各个inode项具有 唯一的编号 (该文件系统唯一),即inode number

使用ls -i命令,可以看到文件名对应的inode number:

1
2
$ ls -li mssh_ip.sh
7120498 -rw-r--r-- 1 liuwen03 liuwen03 183 Jan 28 14:13 mssh_ip.sh
## 4. the size and the number of inode inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是 数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。 每个inode节点的size,一般是 128或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

df -i显示文件系统inode的使用信息

1
2
3
4
5
6
7
8
9
10
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/dm-0 8134656 127239 8007417 2% /
udev 2056585 353 2056232 1% /dev
tmpfs 2058885 487 2058398 1% /run
tmpfs 2058885 4 2058881 1% /dev/shm
tmpfs 2058885 4 2058881 1% /run/lock
tmpfs 2058885 13 2058872 1% /sys/fs/cgroup
/dev/vdc1 209713152 344897 209368255 1% /home
/dev/vda1 62248 328 61920 1% /boot

5. 目录的inode结构#

Linux中的 目录 也被视为文件。目录是将文件名映射到其inode number的特殊文件 (此映射称为dentry)。因此,当我们说某个目录包含文件和其他目录时,我们的意思是该目录将这些文件和目录映射到它们的inode number。这就是目录无法容纳两个具有相同名称的文件的原因,因为它无法使用两个不同的inode number映射一个名称

每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码

理解了上面这些知识,就能理解目录的权限。目录文件的读权限(r)和写权限(w),都是针对目录文件本身。由于目录文件内只有文件名和inode号码,所以 如果只有读权限,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而 读取inode节点内的信息需要目录文件的执行权限(x)

6、inode的特殊作用#

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  • 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用

  • 移动文件或重命名文件,只是改变文件名,不影响inode号码

  • 打开一个文件以后,系统就 以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名

reference#

1.理解inode 2.详解Linux Inode