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 信息有影響

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