為什麼當我們在「vi」編輯器中編輯時,inode 值會改變?

為什麼當我們在「vi」編輯器中編輯時,inode 值會改變?

當我編輯文件時vi編輯器中,檔案的 inode 值會改變。但使用cat指令編輯時,inode 值不會改變。

答案1

當您想要修改文件時,您有兩種選擇,每種選擇都有其優點和缺點。

  • 您可以就地覆蓋該文件。這不會使用任何額外的空間,並保留硬連結、權限和現有文件內容以外的任何其他屬性。這樣做的主要缺點是,如果在寫入檔案時發生任何事情(應用程式崩潰或斷電),您最終會得到部分寫入的檔案。
  • 您可以將文件的新版本寫入具有不同名稱的新文件,然後將其移至到位。這會使用更多空間並破壞硬鏈接,如果您對某個文件有寫入權限,但對它包含的目錄沒有寫入權限,則根本無法執行此操作。另一方面,檔案的舊版本會自動被新版本替換,因此在每個時間點,檔案名稱都指向檔案的有效、完整版本。

Vim 或 Emacs 等高級編輯器可以在這兩種方法之間進行選擇。當他們使用第一種方法時,通常會先製作一個備份文件,如果新文件內容無法正確寫入,可以透過備份文件進行恢復。

經典 vi 會就地覆蓋檔案。所以inode沒有改變。

在維姆中,正如cjm已經指出的,選擇由backup,backupcopywritebackup選項。預設情況下,Vim 會重新命名舊文件,然後用原始名稱寫入新文件(如果它認為可以重新建立原始文件的屬性)。如果您想重複使用現有的索引節點(因此可能會丟失數據,或浪費更多時間製作備份副本),請將其添加set backupcopy yes到您的.vimrc.

答案2

最有可能的是,您已經設定了備份選項打開,並且備份副本到“否”或“斷開硬連結”。

相關內容