Vim
為什麼 inode 不再通過硬連結更改
我使用 Vim 8.2 在我的 Ubuntu 18.04 中編輯我的文件。當我打開一個文件,做一些更改並用 Vim 退出時,這個文件的 inode 號將被更改。
據我了解,這是因為我的 Vim 的備份機制啟用了,所以每個版本都會創建一個新文件(
.swp
file)來替換舊文件。一個新文件有一個新的 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
似乎設置
backupcopy
是auto
(:set backupcopy?
在 Vim 中執行以確認)。主要價值觀是:
yes
製作文件的副本並覆蓋原來
no
的文件重命名文件並寫一個新
auto
的以前的文件,什麼效果最好$$ … $$ 該
auto
值是中間方式:當 Vim 看到重命名文件是可能的而沒有副作用(屬性可以傳遞並且文件不是連結)時使用。當預計會出現問題時,將製作一份副本。如果不清楚:(
yes
複製和覆蓋)不會更改 inode 編號,no
(重命名並重新寫入)會更改它。在你的情況下,起初
auto
是這樣的no
。在ln ./11.cpp ./xxx
Vim注意到有另一個連結並且auto
像yes
.