当我编辑文件时vi
编辑器中,文件的 inode 值发生变化。但使用cat
命令编辑时,inode 值不会改变。
答案1
当您想要修改文件时,您有两种选择,每种选择都有其优点和缺点。
- 您可以就地覆盖该文件。这不使用任何额外的空间,并保留硬链接、权限和现有文件内容之外的任何其他属性。这样做的主要缺点是,如果在写入文件时发生任何事情(应用程序崩溃或断电),您最终会得到部分写入的文件。
- 您可以将文件的新版本写入具有不同名称的新文件,然后将其移动到位。这会使用更多空间并破坏硬链接,如果您对某个文件有写权限,但对它包含的目录没有写权限,则根本无法执行此操作。另一方面,文件的旧版本会自动被新版本替换,因此在每个时间点,文件名都指向文件的有效、完整版本。
Vim 或 Emacs 等高级编辑器可以在这两种方法之间进行选择。当他们使用第一种方法时,通常会先制作一个备份文件,如果新文件内容无法正确写入,可以将其恢复。
经典 vi 会就地覆盖文件。所以inode没有改变。
在维姆中,正如cjm已经指出的,选择由backup
,backupcopy
和writebackup
选项。默认情况下,如果 Vim 认为可以重新创建原始文件的属性,则会重命名旧文件,然后使用原始名称写入新文件。如果您想重用现有的索引节点(因此可能会丢失数据,或浪费更多时间制作备份副本),请将其添加set backupcopy yes
到您的.vimrc
.