1

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

link file1 file2

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

4

3 回答 3

3

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

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

虽然这可以避免数据丢失,但它也有自己遇到的问题。我们在这里跟踪这个错误:

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

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

于 2016-09-22T14:16:44.373 回答
1

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

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

从其当前的源代码来看,Kate 使用的是后一种方法(最后使用 QSaveFile,但直接写入回退)。为什么?通常,为了使文件保存或多或少是原子的,并且还要确保保存不会导致由于缺少可用空间而导致的错误(尽管这也意味着它在使用新旧文件大小的总和时)保存)。

于 2016-08-14T19:05:03.117 回答
0

我在 Linux Mint 上没有 Kate,但我注意到一些问题让我怀疑您可能遇到了“错误”。

以下是已报告的两个硬链接“类似”问题。

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

“不支持硬链接”与 Linux 上的 NTFS #3241

于 2016-08-14T18:47:45.483 回答