ハードリンクのinodeが変更されなくなるのはなぜですか?

ハードリンクのinodeが変更されなくなるのはなぜですか?

私はVim 8.2を使用してUbuntu 18.04でファイルを編集します。ファイルを開いて一部の内容を変更した後、Vimを使用して終了すると、ファイルのinode番号が変更されます。

私が理解したところ、これは私のVimでバックアップメカニズムが有効になっているため、各バージョンが古いファイルを.swp置き換える新しいファイルを作成するためです。新しいファイルには新しい inode 番号があります。それはすべてです。

ところで何か変なことを発見しました。

以下のように最初の後にvim 11.cppinode が変更409980されています409978。ただし、ファイルへのハードリンクを作成した後、Vimを使用してファイルを変更し11.cppたとしても、そのファイルのinode番号は決して変更されません。11.cppハードリンクを削除すると、xxxVimのバージョンが変わるたびにそのリンクの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

ベストアンサー1

設定だと思います。backupcopyはいauto:set backupcopy?確認するにはVimで実行してください)

主な値は次のとおりです。

yesファイルのコピーを作成し、元のファイルを上書きし、ファイル名を変更し、
no 最も適切な古いファイルの上に新しいファイルを書き込みます。
auto

[… ]

このauto値は中間値です。 Vimが副作用なしにファイル名を変更できると判断するときに使用されます(属性は渡され、ファイルはリンクではありません)。問題が予想されると、コピーが作成されます。

明確でない場合:(yesコピーと上書き)はinode番号を変更しませんがno(名前の変更と書き換え)は変更します。

あなたの場合、最初は、autoと同じですnoln ./11.cpp ./xxxVimの後気づくauto同様に機能する別のリンクがありますyes

おすすめ記事