我在linux mint中使用link命令时遇到了问题。
我创建了file1并添加了一个指向该文件的新硬链接:
link file1 file2我知道当我改变file1的内容时,file2也应该改变。
当我使用vim编辑file1或者使用重定向向它添加文本时,它工作得很好,但是当
我用kate编辑器编辑file1,然后它就像是编辑器断开了file2的链接!在那之后当
我用kate或者vim修改了file1的内容...文件2将永远不会再更改。
有什么问题吗?
发布于 2016-09-22 22:16:44
我是凯特的开发者之一。问题如下:当凯特保存时,它通过保存到同一文件夹中的临时文件来完成,成功时只需移动到所需的位置。
此移动操作正是销毁硬链接的原因:首先,删除硬链接,然后重命名临时文件。
虽然这避免了数据丢失,但正如您所经历的那样,它也有自己的问题。我们在这里跟踪这个bug:
会删除指向文件的硬链接
此外,QSaveFile还有两个更深层次的问题,在这里进行跟踪:
时被取消链接
解决方案是直接在所有这些边角情况下编写代码,这样我们就可以在系统崩溃的情况下以丢失数据为代价来避免这种麻烦,所以这是一个权衡。为了解决这个问题,我们需要修补Qt,但到目前为止还没有人这样做。
发布于 2016-08-15 03:05:03
不同的程序以不同的方式保存文件。至少有两个出现在脑海中:
从它目前的源代码来看,Kate使用的是后一种方法(虽然最后使用的是direct write fallback,但使用的是QSaveFile )。为什么?通常,为了使文件保存或多或少是原子的,并确保保存不会因为缺少空闲空间而导致错误(尽管这也意味着它在保存时使用新旧文件大小之和的空间)。
发布于 2016-08-15 02:47:45
我在Linux Mint上没有凯特,但我注意到了一些问题,这些问题让我怀疑你可能遇到了一个"bug“。
这里有两个已经报道的硬链接的“类似”问题。
Bug 316240 - KSaveFile: Kate/kwrite makes a copy of a file while editing a hard link
https://stackoverflow.com/questions/38945393
复制相似问题