使用kate编辑器的硬链接

时间:2016-08-14 18:37:18

标签: linux bash shell kate

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

link file1 file2

我知道当我更改file1的内容时,file2也应该改变 当我使用vim编辑file1或使用重定向添加文本时,它可以很好地工作但是当时 我用kate编辑器编辑file1然后它就像编辑器打破了file2的链接!之后的时候 我用kate或vim更改了file1的内容,...文件2将永远不会改变。
问题是什么?

2 个答案:

答案 0 :(得分:1)

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

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

从目前的源代码来看,Kate正在使用后一种方法(最后使用QSaveFile,尽管有direct write fallback)。为什么?通常,为了使文件保存或多或少是原子的,并且还要确保保存不会导致由例如缺少可用空间(虽然这也意味着它在保存时会使用新旧文件大小的总和空间)。

答案 1 :(得分:1)

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

此移动操作正是破坏您的硬链接:首先,删除硬链接,然后重命名临时文件。

虽然这样可以避免数据丢失,但在您遇到问题时也会遇到问题。我们在这里跟踪此错误:

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

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