【问题标题】:using hard link with kate editor使用与 Kate 编辑器的硬链接
【发布时间】:2016-09-22 22:16:44
【问题描述】:

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

link file1 file2

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

【问题讨论】:

  • kate 可能正在处理file1 的副本,而不是打开file1 并将副本的内容写入其中,只是执行mv tmp file1 的等效项。跨度>

标签: linux bash shell kate


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 更新:鉴于 QSaveFile 的许多问题,Kate 现在再次使用简单的直接写入,从 KDE Frameworks 5.50 开始。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    这里有两个已报告的硬链接“类似”问题。

    Bug 316240 - KSaveFile: Kate/kwrite makes a copy of a file while editing a hard link

    "Hard link not supported" with NTFS on Linux #3241

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多