Vim

為什麼 inode 不再通過硬連結更改

  • December 22, 2020

我使用 Vim 8.2 在我的 Ubuntu 18.04 中編輯我的文件。當我打開一個文件,做一些更改並用 Vim 退出時,這個文件的 inode 號將被更改。

據我了解,這是因為我的 Vim 的備份機制啟用了,所以每個版本都會創建一個新文件(.swpfile)來替換舊文件。一個新文件有一個新的 inode 號。而已。

但是我發現了一些奇怪的東西。

如下所示,在第一個 之後vim 11.cpp,inode 發生了變化,409980變成了409978. 但是,在為文件創建硬連結後11.cpp,無論我如何11.cpp用 Vim 修改文件,它的 inode 號都不會再改變。如果我刪除硬連結xxx,我的 Vim 的每個版本都會再次更改它的 inode 編號。

這真的讓我很困惑。

$ ll -i ./11.cpp
409980 -rw-rw-r-- 1 zyh zyh 504 Dec 22 17:23 ./11.cpp

$ vim 11.cpp     # append a string "abc" to the file 11.cpp
$ ll -i ./11.cpp
409978 -rw-rw-r-- 1 zyh zyh 508 Dec 22 17:25 ./11.cpp

$ vim ./11.cpp   # remove the appended "abc"
$ ll -i ./11.cpp
409980 -rw-rw-r-- 1 zyh zyh 504 Dec 22 17:26 ./11.cpp

$ ln ./11.cpp ./xxx   # create a hard link
$ ll -i ./11.cpp
409980 -rw-rw-r-- 2 zyh zyh 504 Dec 22 17:26 ./11.cpp

$ vim 11.cpp     # append a string "abc" to the file 11.cpp
$ ll -i ./11.cpp
409980 -rw-rw-r-- 2 zyh zyh 508 Dec 22 17:26 ./11.cpp

$ vim 11.cpp     # remove the appended "abc"
$ ll -i ./11.cpp
409980 -rw-rw-r-- 2 zyh zyh 504 Dec 22 17:26 ./11.cpp

似乎設置backupcopyauto:set backupcopy?在 Vim 中執行以確認)。

主要價值觀是:

yes製作文件的副本並覆蓋原來

no 的文件重命名文件並寫一個新

auto 的以前的文件,什麼效果最好

$$ … $$ 該auto值是中間方式:當 Vim 看到重命名文件是可能的而沒有副作用(屬性可以傳遞並且文件不是連結)時使用。當預計會出現問題時,將製作一份副本。

如果不清楚:(yes複製和覆蓋)不會更改 inode 編號,no(重命名並重新寫入)會更改它。

在你的情況下,起初auto是這樣的no。在ln ./11.cpp ./xxxVim注意到有另一個連結並且autoyes.

引用自:https://unix.stackexchange.com/questions/625651