使用硬链接与凯特编辑



我在linux mint中使用link命令时遇到问题。
我创建了file1,并为该文件添加了一个新的硬链接:

link file1 file2

我知道当我改变file1的内容时,file2也应该改变。
当我用vim编辑file1或者用重定向添加文本时效果很好,但是当
我用kate编辑器编辑file1,然后编辑器就断开了file2的链接!之后,当
我用kate或vim更改了file1的内容,…文件2将永远不会再更改。
有什么问题吗?

我是Kate的开发人员之一。问题如下:每当Kate保存时,它都是通过保存到同一文件夹中的临时文件来完成的,并且在成功时只是移动到所需的位置。

这个移动操作就是破坏你的硬链接:首先,硬链接被移除,然后临时文件被重命名。

虽然这避免了数据丢失,但它也有自己的问题。我们正在跟踪这个bug:

  • https://bugs.kde.org/show_bug.cgi?id=358457 - QSaveFile:凯特删除一个硬链接到文件时,打开一个文件与几个硬链接

此外,QSaveFile还有两个问题,在这里跟踪:

  • https://bugs.kde.org/show_bug.cgi?id=333577 - QSaveFile: kate更改文件所有者
  • https://bugs.kde.org/show_bug.cgi?id=354405 - QSaveFile:文件在保存
  • 时被解除链接

解决方案是直接写入所有这些极端情况,然后我们可以在系统崩溃的情况下以丢失数据为代价来避免这个麻烦,所以这是一种权衡。为了解决这个问题,我们需要给Qt打补丁,目前还没有人这么做。

不同的程序以不同的方式保存文件。我至少想到了两个:

  • 打开现有文件并覆盖其内容
  • 创建临时文件,在那里写入新内容,然后以某种方式用新文件替换原始文件(删除旧文件并重命名新文件);或者重命名旧文件,重命名新文件,然后删除旧文件;或者使用系统功能交换文件内容(实际上是交换文件名称),然后删除旧文件;或……)

从它当前的源代码判断,Kate正在使用后一种方法(最后使用QSaveFile,尽管有直接写回退)。为什么?通常,为了使文件保存或多或少地原子化,同时也为了确保保存不会导致错误,例如缺乏可用空间(尽管这也意味着它在保存时使用新旧文件大小之和的空间)。

我没有在Linux Mint上安装Kate,但我注意到一些问题,这些问题使我怀疑你可能遇到了一个"bug"。

这里有两个类似的硬链接问题。

Bug 316240 - KSaveFile: Kate/kwrite在编辑硬链接时复制文件

NTFS不支持硬链接#3241

最新更新