Linux 下 Inode 被 Vim 修改
问题来源
在本地开发项目的时候,docker 容器中运行的某个服务依赖外部宿主机挂载的配置文件 config.ini
,当我在宿主机上使用 vim
编辑文件之后,向容器中的进程发送信号 reload,进程日志中可以看见进程已经收到信号并进行了文件 reload
,但实际上外部配置的 config.ini
文件没有生效
排查
容器中的配置文件内容还是原来的,没有更新,所以即使重载了不会有任何变化。宿主机中的配置文件内容确实已经是最新。对比 inode 索引值发现两个文件的值不一样了。再次进行测试观察文件 inode 索引值的变化,发现使用 vim
修改后的 inode 值发生了变化,也就是说在 vim
执行 :wq
命令的时候,将原来文件的 inode 信息释放了,并修改了源文件的 inode 值
vim 修改 inode 的原因
经过排查后发现在 macOs 系统下使用 vim 修改文件不会有有 inode 变更的情况发生,怀疑这和 vim 版本的具体实现有关系
可以发现,在不同平台的 vim 版本下,修改文件时候 是否修改 inode
信息可能是有不同表现的(注意:这里我们都没有修改 vim 影响 inode 变更的相关配置)