I have a text file that I can change using other applications (for example openoffice
). But when I try to change and save it using gedit
, I am getting error from gedit
:
Could not save the file /media/sf_Ubuntu/BuildNotes.txt.
Unexpected error: Error renaming temporary file: Text file busy
the permission of BuildNotes.txt is as follow:
-rwxrwx--- 1 root vboxsf 839 2012-10-26 12:08 BuildNotes.txt
and user id is:
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)
What is the problem and how I can fix it?
Anthon
77k42 gold badges159 silver badges217 bronze badges
asked Oct 26, 2012 at 11:15
3
This problem has been reported since 2009 (example [archived]). It is awful that there’s no fix for it yet. Neither VirtualBox nor Gedit developers are willing to take responsibility for it, and instead are content to point fingers at one another for over three years.
You can set your editor preferences to ‘Create a backup’ then save twice. Incredibly painful, but it works.
Some other editors won’t report the problem. However, when I tested Kate and nano, for example, those just silently deleted the file on every other save. That’s even worse than the gedit situation…
answered Nov 8, 2012 at 1:50
DavidDavid
2411 silver badge3 bronze badges
6
“Text file busy” can be confusing here: it isn’t actually about text files, but about executables. Executables are called text files because… hum, actually, I don’t know why.
What the message really means is “this file is locked by another program that is using it and can’t let it be modified under its nose, so you can’t write to it.” It is quite unusual to see this message for a text file: unix systems generally frown on mandatory locks on files, and there is no facility for applications to lock out others from modifying a file. (Unix has advisory locks: they can be used to synchronize concurrent accesses to a file by cooperating programs.) The most common circumstance when you’ll see “text file busy” (ETXTBUSY
) is if you try to modify an executable that’s running: the kernel locks it. Another possibility is a disk image that is mounted, again locked by the kernel.
In your case, given the location of the file /media/sf_Ubuntu
and the ownership to the group vboxsf
, my guess is that the file, which is on a VirtualBox file sharing filesystem, is locked in the host operating system. Presumably the host is a Windows machine and you also have the file open in an editor there. You’ll need to close the file on the host before you can save in the editor in the VM.
answered Oct 26, 2012 at 23:30
2
Check with lsof
if the file is open by another application
lsof /media/sf_Ubuntu/BuildNotes.txt
Or use fuser
:
fuser -km /media/sf_Ubuntu/BuildNotes.txt
Mat
50.6k10 gold badges154 silver badges139 bronze badges
answered Oct 26, 2012 at 12:20
What fixed it for me (still a bit annoying but works), and is applicable to gedit, is to:
edit — preferences — editor
Put a check on «Create backup copy»
When saving from now on, save the file once, ignore the error, save again.
works every time.
answered Nov 12, 2013 at 15:21
1
using linux terminal, try editing the file using vi file_name and save it.
p.s I could not find another solution for this issue. vi worked
answered Sep 22, 2017 at 2:46
I have a text file that I can change using other applications (for example openoffice
). But when I try to change and save it using gedit
, I am getting error from gedit
:
Could not save the file /media/sf_Ubuntu/BuildNotes.txt.
Unexpected error: Error renaming temporary file: Text file busy
the permission of BuildNotes.txt is as follow:
-rwxrwx--- 1 root vboxsf 839 2012-10-26 12:08 BuildNotes.txt
and user id is:
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)
What is the problem and how I can fix it?
Anthon
77k42 gold badges159 silver badges217 bronze badges
asked Oct 26, 2012 at 11:15
3
This problem has been reported since 2009 (example [archived]). It is awful that there’s no fix for it yet. Neither VirtualBox nor Gedit developers are willing to take responsibility for it, and instead are content to point fingers at one another for over three years.
You can set your editor preferences to ‘Create a backup’ then save twice. Incredibly painful, but it works.
Some other editors won’t report the problem. However, when I tested Kate and nano, for example, those just silently deleted the file on every other save. That’s even worse than the gedit situation…
answered Nov 8, 2012 at 1:50
DavidDavid
2411 silver badge3 bronze badges
6
“Text file busy” can be confusing here: it isn’t actually about text files, but about executables. Executables are called text files because… hum, actually, I don’t know why.
What the message really means is “this file is locked by another program that is using it and can’t let it be modified under its nose, so you can’t write to it.” It is quite unusual to see this message for a text file: unix systems generally frown on mandatory locks on files, and there is no facility for applications to lock out others from modifying a file. (Unix has advisory locks: they can be used to synchronize concurrent accesses to a file by cooperating programs.) The most common circumstance when you’ll see “text file busy” (ETXTBUSY
) is if you try to modify an executable that’s running: the kernel locks it. Another possibility is a disk image that is mounted, again locked by the kernel.
In your case, given the location of the file /media/sf_Ubuntu
and the ownership to the group vboxsf
, my guess is that the file, which is on a VirtualBox file sharing filesystem, is locked in the host operating system. Presumably the host is a Windows machine and you also have the file open in an editor there. You’ll need to close the file on the host before you can save in the editor in the VM.
answered Oct 26, 2012 at 23:30
2
Check with lsof
if the file is open by another application
lsof /media/sf_Ubuntu/BuildNotes.txt
Or use fuser
:
fuser -km /media/sf_Ubuntu/BuildNotes.txt
Mat
50.6k10 gold badges154 silver badges139 bronze badges
answered Oct 26, 2012 at 12:20
What fixed it for me (still a bit annoying but works), and is applicable to gedit, is to:
edit — preferences — editor
Put a check on «Create backup copy»
When saving from now on, save the file once, ignore the error, save again.
works every time.
answered Nov 12, 2013 at 15:21
1
using linux terminal, try editing the file using vi file_name and save it.
p.s I could not find another solution for this issue. vi worked
answered Sep 22, 2017 at 2:46
Я использую виртуальную коробку. Гостем — Ubuntu. Хост — это Windows 7. У меня есть общая папка (совместно используемая хостом и гостем).
Проблема в том, что в гостевой (Ubuntu) я не могу rename/delete/edit
файлы в общей папке. Например, после того, как я отредактировал файл и попытаюсь его сохранить, я получаю следующее сообщение об ошибке:
Не удалось сохранить файл fileName. Неожиданная ошибка: ошибка переименования временного файла: текстовый файл занят
В хосте (Windows) я могу без проблем переименовать / отредактировать / удалить. Что я могу сделать?
задан
9 April 2012 в 07:16
поделиться
2 ответа
Как вы установили эту общую папку?
У меня была такая же проблема, но с мощью fstab я, наконец, смог свободно получить доступ к моей общей папке — просто добавил строку:
//shareIP/sharedFolder mountpoint smbfs rw,umask=777,uid=linuxUID,username=winUsername,password=winPassword,auto 0 0
Теперь вы можете перезагрузить свою ОС или просто сделать sudo mount <mountpoint>
.
Как-то с «родным» совместным использованием Vbox я не мог этого добиться — даже не получить доступ к общей папке, хотя она была видна.
ответ дан Kris Harper
10 August 2018 в 10:19
поделиться
Вы можете столкнуться с ошибкой # 34813 , когда доступ к общим ресурсам в системах Windows нарушен. Доступ к файлам на хостах Ubuntu не изменяется.
Устранение неполадок общих папок в виртуальной ячейке
Чтобы выяснить, правильно ли настроены ваши общие папки, вы можете выполнить следующие шаги:
- Установите последнюю версию Virtual Box .
- Убедитесь, что гостевые дополнения соответствуют вашему выпуску VBox.
- Не указывать общие папки как доступные для чтения, если вам нужен доступ на запись.
- Гость должен быть в группа
vboxsf
для автоматически установленных акций. - Установите временные ресурсы с опцией rw и соответствующим uid для доступа на запись (например,
sudo mount -t vboxsf -o uid=1000 sharename mountpoint
)
ответ дан Takkat
13 August 2018 в 16:43
поделиться
Другие вопросы по тегам:
Похожие вопросы:
Я получаю сообщение «Невозможно сохранить _ Неожиданная ошибка: ошибка переименования временного файла: текстовый файл занят» в Gedit 2, когда я пытаюсь сохранить в общей папке Virtualbox (Debian). Я искал и, видимо, это проблема Gedit. Ни одно из решений не кажется идеальным или не работает для меня.
Можно ли создать сценарий оболочки (плагин внешних инструментов), который сохраняет файл в другом месте, а затем копирует его обратно в оболочку? Поэтому мне нужно взять где бы Gedit хранил временный (живой?) Файл.
Или, если это невозможно / не будет работать / плохая практика, кто-нибудь знает хороший способ обойти это? Мне очень нравится Gedit и я предпочитаю им пользоваться.
В настоящее время это мой сценарий. Я говорю внешним инструментам не сохранять, а передавать документ как ввод (стандартный ввод)
bin=""
while read LINE; do
echo ${LINE} # do something with it here
bin="${bin}${LINE}n"
done
echo $bin > /home/me/data2/test.txt
Он отлично работает, за исключением того, что не сохраняет вкладки. Я только редактирую текстовые файлы. Изменить: это также, кажется, пропустить последнюю строку
Ответы:
В настоящее время я получаю эту проблему как с gedit, так и с geany, на последних версиях mint-lmde и fedora virtualbox vms на хосте Windows 7. Однако Кейт, kwrite, gvim / vim, Qtcreator, libre writer не затрагиваются. Geany и gedit выдают ошибку переименования временного файла: текстовый файл занят. Я использую виртуальную коробку 4.2.16. Поиски в интернете, похоже, проблемы были в течение многих лет.
Я нашел решение для Geany.
с geany 1.23.1 на fedora и 1.22 на mint-lmde
Правка-> Настройки-> Различные галочки use_atomic_file_saving
это должно быть безопаснее в соответствии с руководством. или вы можете снять галочку с use_gio_unsafe_file_saving. Либо работает, объяснения есть в руководстве.
Для Гедит не очень.
С gedit 3.4.2 на mint-lmde нашел только один обходной путь.
Правка-> Настройки-> Редактор снимите флажок Создать резервную копию
Это работает один раз, после этого при втором сохранении не работает, если только вы не начнете возиться с пометкой, сохранением, снятием пометки, сохранением, и это будет работать снова. Похоже на ошибку. С помощью gedit 3.8.3 на fedora можно снять галочку, но исходный файл исчезнет, и останется только резервная копия без каких-либо изменений.
«Текстовый файл занят» означает, что ядро отказывается перемещать / переименовывать / удалять исполняемый файл, работающий как программа. Что вы пытаетесь сохранить?
Я признаю, что это старая ветка, но, поскольку я нашел ее, когда искал решение именно для этой проблемы, я решил, что опубликую свой обходной путь, возможно, он может помочь другим.
В моем случае общая папка находилась на NAS в моей локальной сети, и, кроме проблем с geany, производительность была очень плохой. Мое решение состояло в том, чтобы определить сетевой мостовой адаптер в Virtualbox Manager / Настройки / Сеть для моей виртуальной машины. Затем виртуальная машина получила доступ к моей локальной сети так же, как обычный компьютер. Вместо использования общих папок в Virtualbox я мог бы смонтировать папку как обычный сетевой ресурс, определенный в / etc / fstab. Таким образом, у меня не было папок, определенных в Virtualbox Manager / Настройки / Общие папки. Проблемы со временем исчезли, и производительность значительно улучшилась.
Какая операция генерирует ошибку «текстовый файл занят»? Я не могу точно сказать.
Я думаю, что это связано с тем, что я создаю временный python script (используя tempfile) и используя execl из него, но я думаю, что execl изменяет выполняемый файл.
Ответ 1
Эта ошибка означает, что какой-либо другой процесс или пользователь обращаются к вашему файлу. Используйте lsof
, чтобы проверить, какие другие процессы используют его. Вы можете использовать команду kill
, чтобы убить ее, если это необходимо.
Ответ 2
Это время, так как я видел это сообщение, но он был распространен в System V R3 или около двух десятков лет назад. В то время это означало, что вы не могли изменить исполняемый файл программы во время его запуска.
Например, я создавал make
workalike под названием rmk
, и через некоторое время он был самоподдерживающимся. Я бы запустил версию разработки и создал новую версию. Чтобы заставить его работать, необходимо использовать обходное решение:
gcc -g -Wall -o rmk1 main.o -L. -lrmk -L/Users/jleffler/lib/64 -ljl
if [ -f rmk ] ; then mv rmk rmk2 ; else true; fi ; mv rmk1 rmk
Итак, чтобы избежать проблем с «загруженным текстовым файлом», сборка создала новый файл rmk1
, а затем переместила старый rmk
в rmk2
(переименование не было проблемой, было отключено) и затем переместил вновь построенный rmk1
в rmk
.
Я давно не видел ошибки в современной системе… но я не все, что часто перестраивает программы.
Ответ 3
Это происходит при попытке записи в файл, который в данный момент выполняется ядром, или при выполнении файла, который в данный момент открыт для записи.
Источник: http://wiki.wlug.org.nz/ETXTBSY
Ответ 4
Пример минимального запуска C POSIX
Я рекомендую понять базовый API, чтобы лучше видеть, что происходит.
sleep.c
#define _XOPEN_SOURCE 700
#include <unistd.h>
int main(void) {
sleep(10000);
}
busy.c
#define _XOPEN_SOURCE 700
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(void) {
int ret = open("sleep.out", O_WRONLY|O_TRUNC);
assert(errno == ETXTBSY);
perror("");
assert(ret == -1);
}
Скомпилируйте и запустите:
gcc -std=c99 -o sleep.out ./sleep.c
gcc -std=c99 -o busy.out ./busy.c
./sleep.out &
./busy.out
busy.out
передает утверждения, а perror
выводит:
Text file busy
поэтому мы делаем вывод, что сообщение жестко закодировано в самом glibc.
В качестве альтернативы:
echo asdf > sleep.out
выводит Bash:
-bash: sleep.out: Text file busy
Для более сложных приложений вы также можете наблюдать это с помощью strace
:
strace ./busy.out
который содержит:
openat(AT_FDCWD, "sleep.out", O_WRONLY) = -1 ETXTBSY (Text file busy)
Протестировано в Ubuntu 18.04, ядро Linux 4.15.0.
Ошибка не произойдет, если вы unlink
сначала
notbusy.c:
#define _XOPEN_SOURCE 700
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(void) {
assert(unlink("sleep.out") == 0);
assert(open("sleep.out", O_WRONLY|O_CREAT) != -1);
}
Затем скомпилируйте и запустите аналогично приведенному выше, и эти утверждения пройдут.
Это объясняет, почему это работает для определенных программ, но не для других. Например. если вы делаете:
gcc -std=c99 -o sleep.out ./sleep.c
./sleep.out &
gcc -std=c99 -o sleep.out ./sleep.c
это не приводит к ошибке, даже если второй вызов gcc
пишет в sleep.out
.
Краткий strace
показывает, что GCC сначала отменяет связь перед записью:
strace -f gcc -std=c99 -o sleep.out ./sleep.c |& grep sleep.out
содержит:
[pid 3992] unlink("sleep.out") = 0
[pid 3992] openat(AT_FDCWD, "sleep.out", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
Причина, по которой он не перестает работать, заключается в том, что когда вы unlink
переписываете файл, он создает новый индекс и сохраняет временный висячий индекс для исполняемого исполняемого файла.
Но если вы просто write
без unlink
, то он пытается записать в тот же защищенный инод, что и исполняемый исполняемый файл.
POSIX 7 open()
http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html
[ETXTBSY]
Этот файл представляет собой файл чистой процедуры (общий текст), который выполняется и имеет значение O_WRONLY или O_RDWR.
человек 2 открытый
ETXTBSY
pathname относится к исполняемому образу, который в данный момент выполняется, и был запрошен доступ для записи.
Ответ 5
В моем случае я пытался выполнить файл оболочки (с расширением .sh)
в среде csh, и я получал это сообщение об ошибке.
просто работает с bash, это сработало для меня.
Например
bash file.sh
Ответ 6
Не знаю причину, но я могу способствовать быстрой и легкой работе.
Я просто испытал эту эту странность в CentOS 6 после «cat > shScript.sh» (paste, ^ Z), а затем редактировал файл в KWrite. Как ни странно, не было видимого экземпляра (ps -ef) выполнения script.
Моя быстрая работа была просто «cp shScript.sh shScript2.sh», после чего я смог выполнить shScript2.sh. Затем я удалил оба. Готово!
Ответ 7
Вы можете обнаружить, что это более распространено в сетевых ресурсах CIFS/SMB. Windows не позволяет писать файл, когда что-то еще открывает этот файл, и даже если служба не Windows (это может быть какой-то другой продукт NAS), он, вероятно, воспроизведет такое же поведение. Потенциально, это может быть также проявление некоторой проблемы с базой NAS, смутно связанной с блокировкой/репликацией.
Ответ 8
Если вы пытаетесь построить phpredis
в ящике Linux, вам может потребоваться время, чтобы завершить модификацию разрешений файла с помощью команды sleep
перед запуском файла:
chmod a+x /usr/bin/php/scripts/phpize
&& sleep 1
&& /usr/bin/php/scripts/phpize
Ответ 9
Один из моих впечатлений:
Я всегда меняю комбинацию клавиш по умолчанию для Chrome с помощью обратной инженерии. После изменения я забыл закрыть Chrome и выполнил следующее:
sudo cp chrome /opt/google/chrome/chrome
cp: cannot create regular file '/opt/google/chrome/chrome': Text file busy
Используя strace, вы можете найти более подробную информацию:
sudo strace cp ./chrome /opt/google/chrome/chrome 2>&1 |grep 'Text file busy'
open("/opt/google/chrome/chrome", O_WRONLY|O_TRUNC) = -1 ETXTBSY (Text file busy)
Ответ 10
Если вы запускаете .sh из ssh-соединения с помощью такого инструмента, как MobaXTerm, и если в указанном инструменте есть утилита автосохранения для редактирования удаленного файла с локального компьютера, он заблокирует файл.
Закрытие и повторное открытие сессии SSH решает ее.
Ответ 11
Я наткнулся на это в PHP при использовании fopen()
в файле, а затем попытался unlink()
его перед использованием fclose()
на нем.
Нехорошо:
$handle = fopen('file.txt');
// do something
unlink('file.txt');
Хорошо:
$handle = fopen('file.txt');
// do something
fclose($handle);
unlink('file.txt');
0 / 0 / 0 Регистрация: 06.09.2015 Сообщений: 18 |
|
1 |
|
13.09.2015, 16:34. Показов 1647. Ответов 2
Есть VirtualBox, там общая папка с хостовой Миниатюры
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
13.09.2015, 16:34 |
Ответы с готовыми решениями: Ubuntu One: Ник занят Не редактируется файл HOSTS Не редактируется css файл Не редактируется файл хостов 2 |
orionit 8 / 8 / 2 Регистрация: 02.09.2015 Сообщений: 85 |
||||
13.09.2015, 18:20 |
2 |
|||
Попробуйте его открыть так
0 |
0 / 0 / 0 Регистрация: 11.09.2015 Сообщений: 7 |
|
21.09.2015, 00:19 |
3 |
можно попробовать поставить восьмеричный атрибут 777
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
21.09.2015, 00:19 |
3 |