inode

常用命令

[root@localhost ~]# stat log-consumer.tgz
  文件:"log-consumer.tgz"
  大小:8167640   	块:15960      IO 块:4096   普通文件
设备:fd02h/64770d	Inode:203135374   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2019-11-28 21:09:59.788123948 +0800
最近更改:2019-11-28 21:09:47.708063560 +0800
最近改动:2019-11-28 21:09:47.708063560 +0800
创建时间:-
[root@localhost ~]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/vda2      51200000   92450 51107550       1% /
devtmpfs         482424     345   482079       1% /dev
tmpfs            485132       1   485131       1% /dev/shm
tmpfs            485132     439   484693       1% /run
tmpfs            485132      16   485116       1% /sys/fs/cgroup
/dev/vda5      52990976       3 52990973       1% /data
/dev/vda1        153600     327   153273       1% /boot
tmpfs            485132       1   485131       1% /run/user/0
[root@localhost ~]# ls -i log-consumer.tgz
203135374 log-consumer.tgz
[root@localhost ~]#

硬链接

ln 源文件 目标文件

这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。

inode的特殊作用

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

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

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

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

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

理解inode

filegraph2.png

文件描述符、打开文件表以及inode

1、文件描述符和inode号码是不同的两个东西。

2、对于每个进程,系统会建立一个进程控制块(PCB)来保存相关的信息,而这个PCB在内核中的表现其实就是一个称为task_struct的结构体,这个结构体的成员用来保存与此进程有关的相关信息,其中有个成员是struct file_struct *files,它是用来找到此进程所有打开的文件列表的,files变量指向的是struct file_struct类型的结构体,这个结构体中有一个成员是一个指针数组struct file *fd_array[],这个数组中的每个元素会指向一个struct file的结构体,这个结构体是用来描述一个打开的文件的,有很多的成员,其中有个成员是指向struct file_operation的指针变量,而struct file_operation结构体中包括了很多的函数指针,也就是open,write,realease,read等等对文件进行操作的函数,具体这些函数的实现就是驱动开发需要做的事情。如下图所示。

文件IO详解(二)---文件描述符(fd)和inode号的关系

原文地址:https://www.cnblogs.com/zhouj-happy/p/12439397.html