我有一个文本文件,可以使用其他应用程序更改该文件(例如openoffice
)。但是当我尝试使用更改并保存它时gedit
,我收到错误gedit
:
Could not save the file /media/sf_Ubuntu/BuildNotes.txt.
Unexpected error: Error renaming temporary file: Text file busy
BuildNotes.txt的权限如下:
-rwxrwx--- 1 root vboxsf 839 2012-10-26 12:08 BuildNotes.txt
用户 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)
有什么问题以及如何解决它?
答案1
答案2
“文本文件忙”在这里可能会令人困惑:它实际上与文本文件无关,而是与可执行文件有关。可执行文件被称为文本文件,因为……嗯,实际上,我不知道为什么。
该消息的真正含义是“该文件已被正在使用它的另一个程序锁定,并且不能让它在其眼皮子底下被修改,因此您无法写入它。”在文本文件中看到此消息是很不寻常的:unix 系统通常不赞成对文件进行强制锁定,并且应用程序没有任何工具可以阻止其他人修改文件。 (Unix 有咨询锁:它们可用于通过协作程序同步对文件的并发访问。)当您看到“文本文件忙”( ETXTBUSY
) 时,最常见的情况是您尝试修改正在运行的可执行文件:内核锁定它。另一种可能性是挂载的磁盘映像,再次被内核锁定。
在您的情况下,考虑到文件的位置/media/sf_Ubuntu
和组的所有权vboxsf
,我的猜测是位于 VirtualBox 文件共享文件系统上的文件被锁定在主机操作系统中。假设主机是一台 Windows 计算机,并且您还可以在其中的编辑器中打开该文件。您需要先关闭主机上的文件,然后才能在虚拟机的编辑器中保存。
答案3
问题根本在于 glib 及其保存到临时文件然后重命名的方式。该错误已记录为:https://bugzilla.gnome.org/show_bug.cgi?id=656225
答案4
检查lsof
文件是否被其他应用程序打开
lsof /media/sf_Ubuntu/BuildNotes.txt
或者使用fuser
:
fuser -km /media/sf_Ubuntu/BuildNotes.txt