Linux 下 Inode 被 Vim 修改

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 变更的相关配置)

LInux 下原生 Vim 修改 inode 的可能原因

  • Vim 版本:7.4.1689
  • 系统:Ubuntu 16.04

被修改的文件,只要 other 的权限中包含写 (w) 权限,vim 在保存时,将不会修改 inode 信息

实验步骤:

  1. 创建文件,other 没有写权限
  2. 使用 vim 修改并保存文件
  3. ls -il xxx 观察 inode 索引值被修改
  4. 执行 chmod o+w xxx 给文 other 添加写权限
  5. 再使用 vim 修改并保存文件
  6. ls -il xxx 观察 inode 索引值不变

不同系统环境,不同版本的 Vim,以及不同的文件权限,都可能对 Vim 是否修改文件 inode 信息有影响

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章