Gedit 不会在 VirtualBox 共享上保存文件:文本文件繁忙

use*_*019 35 linux gedit virtualbox lock files

我有一个可以使用其他应用程序更改的文本文件(例如openoffice)。但是,当我尝试使用 更改并保存它gedit时,出现以下错误gedit

Could not save the file /media/sf_Ubuntu/BuildNotes.txt.
Unexpected error: Error renaming temporary file: Text file busy
Run Code Online (Sandbox Code Playgroud)

BuildNotes.txt 的权限如下:

-rwxrwx--- 1 root vboxsf  839 2012-10-26 12:08 BuildNotes.txt
Run Code Online (Sandbox Code Playgroud)

用户 ID 是:

m@m-Linux:/media/sf_Ubuntu$ id
uid=1000(m) gid=1000(m) groups=4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare),1000(m),1001(vboxsf)
Run Code Online (Sandbox Code Playgroud)

有什么问题,我该如何解决?

小智 22

自 2009 年以来已报告此问题(示例[已存档])。可怕的是,目前还没有解决办法。VirtualBox 和 Gedit 开发人员都不愿意为此承担责任,而是满足于互相指责超过三年。

您可以将编辑器首选项设置为“创建备份”,然后保存两次。令人难以置信的痛苦,但它有效。

其他一些编辑器不会报告这个问题。但是,当我测试 Kate 和 nano 时,例如,它们只是在每隔一次保存时默默地删除文件。这甚至比 gedit 的情况还要糟糕......

  • 来自未来的问候。_“三年多”_现在变成了_“八年多”_。这仍然是一个问题。 (3认同)
  • 来自未来未来的问候。现在是“超过10年”。恐怕我没有足够的时间来解决这个问题……我转而使用*鼠标垫*。 (2认同)

Gil*_*il' 7

“文本文件繁忙”在这里可能会令人困惑:它实际上不是关于文本文件,而是关于可执行文件。可执行文件被称为文本文件,因为……嗯,实际上,我不知道为什么

这条消息的真正意思是“这个文件被另一个正在使用它的程序锁定,不能让它在它的鼻子底下被修改,所以你不能写它。” 在文本文件中看到此消息是很不寻常的:unix 系统通常不赞成对文件进行强制锁定,并且应用程序无法阻止其他人修改文件。(Unix 具有咨询锁:它们可用于通过协作程序同步对文件的并发访问。)当您看到“文本文件繁忙” ( ETXTBUSY)时,最常见的情况是如果您尝试修改正在运行的可执行文件:内核锁定它。另一种可能性是挂载磁盘映像,再次被内核锁定。

在您的情况下,鉴于文件的位置/media/sf_Ubuntu和 group 的所有权vboxsf,我猜测该文件位于 VirtualBox 文件共享文件系统上,已锁定在主机操作系统中。据推测,主机是一台 Windows 机器,您还可以在那里的编辑器中打开该文件。您需要先关闭主机上的文件,然后才能在 VM 的编辑器中进行保存。

  • 谢谢。我 %100 确定该文件在 Windows 中不是 oprn,也没有其他应用程序在使用它。我可以使用 OpenOffice 打开它,因此我确定它不会被其他应用程序打开。只有gedit不能保存。 (4认同)
  • 我有相同的问题。来宾操作系统中的每个程序都运行良好,但是 gedit 出现了问题。 (2认同)

小智 5

问题根本在于 glib 及其保存到临时文件然后重命名的方式。该错误已记录为:https://bugzilla.gnome.org/show_bug.cgi ?id=656225


小智 1

检查lsof文件是否被其他应用程序打开

lsof /media/sf_Ubuntu/BuildNotes.txt
Run Code Online (Sandbox Code Playgroud)

或者使用fuser

fuser -km /media/sf_Ubuntu/BuildNotes.txt
Run Code Online (Sandbox Code Playgroud)