为什么 mcedit 建议在保存文件时删除硬链接?

f.a*_*ian 5 filesystems hard-link

每当我mcedit编辑一个硬链接的文件并想保存文件时,编辑器会问我是否要删除硬链接。这是 Linux 上的常见行为还是mcedit“特殊”行为?为什么常规应用程序(不是 fsck 或其他管理工具)会关心硬链接?

Gil*_*il' 5

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

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

Mcedit 正在询问您选择哪种策略。但奇怪的是,对于具有单个目录条目的文件,mcedit 的默认策略是截断现有文件,从而使您的数据处于危险之中。只有当安全策略会破坏硬链接时,它才会给您使用它的机会。您可以在“选项”菜单的“编辑保存模式”对话框中更改此设置:“快速保存”表示覆盖,“安全保存”表示保存到临时文件然后重命名。选择安全模式后,您无法选择不破坏符号链接。

(在 mc 4.8.3 上进行的观察。如果在最新版本中仍然是这种情况,请考虑将其报告为设计错误——“安全模式”应该是默认设置,并且您应该可以选择不破坏硬链接案件。)

Vim 或 Emacs 等优秀的编辑器可让您选择默认策略。