为什么在“vi”编辑器中编辑时 inode 值会发生变化?

mon*_*onu 25 vim vi filenames inode

当我在“vi”编辑器中编辑文件时,文件的 inode 值正在发生变化。但是当用 cat 命令编辑时,inode 值不会改变。

Gil*_*il' 34

当您想要修改文件时,您有两个选项,每个选项都有其优点和缺点。

  • 您可以就地覆盖文件。这不会使用任何额外的空间,并保留了现有文件内容之外的硬链接、权限和任何其他属性。这样做的主要缺点是,如果在写入文件时发生任何事情(应用程序崩溃或断电),您最终会得到一个部分写入的文件。
  • 您可以将文件的新版本写入具有不同名称的新文件,然后将其移动到位。这会占用更多空间并破坏硬链接,如果您对文件具有写权限,但对其包含的目录没有,则根本无法执行此操作。另一方面,文件的旧版本被新版本原子替换,因此文件名在每个时间点都指向文件的有效完整版本。

Vim 或 Emacs 等高级编辑器可以在这两种方法之间进行选择。当他们使用第一种方法时,他们通常会先制作一个备份文件,如果无法正确写入新文件内容,则可以将其恢复。

经典 vi 覆盖文件就地。所以inode没有改变。

在 Vim 中,正如 cjm 已经说过的,选择由backup,backupcopywritebackup选项控制。默认情况下,Vim 会重命名旧文件,然后使用原始名称写入新文件,如果它认为可以重新创建原始文件的属性。如果您想重用现有的 inode(因此有丢失数据的风险,或浪费更多时间制作备份副本),请添加set backupcopy yes到您的.vimrc.

  • +1提到“writebackup”,因为我已经关闭了“backup”和“backupcopy”,但inode仍在变化。 (3认同)

cjm*_*cjm 20

最有可能的是,您已将备份选项设置为打开,并将备份复制设置为“no”或“breakhardlink”。

  • @monu,编辑你的 [`~/.vimrc`](http://vimdoc.sourceforge.net/htmldoc/starting.html#.vimrc)。这些不是默认设置。 (2认同)