- /bin/bash: bad interpreter: Text file busy Error and Solution
- Что генерирует сообщение «текстовый файл занят» в Unix?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Text file busy when I copy some files
- 2 Answers 2
- Gedit не сохранит файл на общем ресурсе VirtualBox: текстовый файл занят
- Текстовый файл занят
/bin/bash: bad interpreter: Text file busy Error and Solution
Q. I’m getting an error as follows while trying to run a shell script over remote ssh session:
./myscript.sh
/bin/bash: bad interpreter: Text file busy
How do I fix this error message and run the script?
A. This error means some other process or user is accessing your file. Your script file is open and hence bash giving out this error.
To list open file use lsof command, enter:
# lsof | grep myscript.sh
Sample output:
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
You can wait or simply kill those process with kill command:
# kill 4995 5031 5069
Now, try to run script again:
# ./myscript.sh
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Источник
Что генерирует сообщение «текстовый файл занят» в Unix?
Какая операция генерирует ошибку «текстовый файл занят»? Я не могу точно сказать.
Я думаю, что это связано с тем, что я создаю временный python script (используя tempfile) и используя execl из него, но я думаю, что execl изменяет выполняемый файл.
ОТВЕТЫ
Ответ 1
Эта ошибка означает, что какой-либо другой процесс или пользователь обращаются к вашему файлу. Используйте lsof , чтобы проверить, какие другие процессы используют его. Вы можете использовать команду kill , чтобы убить ее, если это необходимо.
Ответ 2
Это время, так как я видел это сообщение, но он был распространен в System V R3 или около двух десятков лет назад. В то время это означало, что вы не могли изменить исполняемый файл программы во время его запуска.
Например, я создавал make workalike под названием rmk , и через некоторое время он был самоподдерживающимся. Я бы запустил версию разработки и создал новую версию. Чтобы заставить его работать, необходимо использовать обходное решение:
Итак, чтобы избежать проблем с «загруженным текстовым файлом», сборка создала новый файл rmk1 , а затем переместила старый rmk в rmk2 (переименование не было проблемой, было отключено) и затем переместил вновь построенный rmk1 в rmk .
Я давно не видел ошибки в современной системе. но я не все, что часто перестраивает программы.
Ответ 3
Это происходит при попытке записи в файл, который в данный момент выполняется ядром, или при выполнении файла, который в данный момент открыт для записи.
Ответ 4
Пример минимального запуска C POSIX
Я рекомендую понять базовый API, чтобы лучше видеть, что происходит.
Скомпилируйте и запустите:
busy.out передает утверждения, а perror выводит:
поэтому мы делаем вывод, что сообщение жестко закодировано в самом glibc.
В качестве альтернативы:
Для более сложных приложений вы также можете наблюдать это с помощью strace :
Протестировано в Ubuntu 18.04, ядро Linux 4.15.0.
Ошибка не произойдет, если вы unlink сначала
Затем скомпилируйте и запустите аналогично приведенному выше, и эти утверждения пройдут.
Это объясняет, почему это работает для определенных программ, но не для других. Например. если вы делаете:
это не приводит к ошибке, даже если второй вызов gcc пишет в sleep.out .
Краткий strace показывает, что GCC сначала отменяет связь перед записью:
Причина, по которой он не перестает работать, заключается в том, что когда вы unlink переписываете файл, он создает новый индекс и сохраняет временный висячий индекс для исполняемого исполняемого файла.
Но если вы просто write без unlink , то он пытается записать в тот же защищенный инод, что и исполняемый исполняемый файл.
POSIX 7 open()
Этот файл представляет собой файл чистой процедуры (общий текст), который выполняется и имеет значение O_WRONLY или O_RDWR.
человек 2 открытый
pathname относится к исполняемому образу, который в данный момент выполняется, и был запрошен доступ для записи.
Ответ 5
В моем случае я пытался выполнить файл оболочки (с расширением .sh) в среде csh, и я получал это сообщение об ошибке.
просто работает с bash, это сработало для меня. Например
Ответ 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 перед запуском файла:
Ответ 9
Один из моих впечатлений:
Я всегда меняю комбинацию клавиш по умолчанию для Chrome с помощью обратной инженерии. После изменения я забыл закрыть Chrome и выполнил следующее:
Используя strace, вы можете найти более подробную информацию:
Ответ 10
Если вы запускаете .sh из ssh-соединения с помощью такого инструмента, как MobaXTerm, и если в указанном инструменте есть утилита автосохранения для редактирования удаленного файла с локального компьютера, он заблокирует файл.
Закрытие и повторное открытие сессии SSH решает ее.
Ответ 11
Я наткнулся на это в PHP при использовании fopen() в файле, а затем попытался unlink() его перед использованием fclose() на нем.
Источник
Text file busy when I copy some files
I have this error when I want to copy some files
My command:
Results:
How do I copy my files ?
2 Answers 2
before copying, be aware that you may disrupt any program that use /applis/rgedff/pur/bin/lib/libtiny.a
libtiny.a is a share library, active running program are using it, and you can’t delete file being used in Linux.
More precisely, deleting such file will result in removing filename from directory, while file data will be kept in filesystem as long as a running process use them.
I have seen this happen to me when I was copying files from one hard drive to another through a connection such as NFS or an SSH tunnel.
What happens is that the file being copied becomes part of the destination directory. That means the destination directory needs to be locked, updated with the new information, and then unlocked.
If the next file (which in your case would be libtiny.a ) arrives too soon, it tries to lock the directory and fails with the «File busy» error. That then prevents the copy of that file and anything further.
Since libtiny.a is a static library, there are no reasons why it would ever be locked against a copy. As far as I know, the compiler does not lock the files it is working on, and really it would only happen if you were compiling something in the target directories.
Now this is assuming that all the disks use a normal file system. If you used NTFS, then files cannot be replaced while opened because that system does not allow for such to happen.
Under Linux, opening a file locks that file’s data in place, but it does not prevent you from unlinking it, renaming it, replacing it. If the file was deleted, the locked data will be released from the hard drive once all the handles to that file get closed.
This means you can write a program which, when it gets executed, deletes itself from the hard drive and yet it will continue to function as if nothing had happened.
Источник
Gedit не сохранит файл на общем ресурсе VirtualBox: текстовый файл занят
У меня есть текстовый файл, который я могу изменить, используя другие приложения (например openoffice ). Но когда я пытаюсь изменить и сохранить его с помощью gedit , я получаю сообщение об ошибке gedit :
разрешение BuildNotes.txt выглядит следующим образом:
и идентификатор пользователя:
В чем проблема и как я могу это исправить?
Эта проблема была зарегистрирована с 2009 года (Google для «Gedit Virtualbox»). Ужасно, что это еще не исправлено. Ни VirtualBox, ни разработчики Gedit не хотят брать на себя ответственность за это, и вместо этого довольствуются указывать друг на друга более трех лет.
Вы можете установить в настройках редактора значение «Создать резервную копию», а затем сохранить дважды. Невероятно больно, но это работает.
Некоторые другие редакторы не сообщат о проблеме. Однако, когда я тестировал, например, Kate и nano, они просто молча удаляли файл при каждом другом сохранении. Это даже хуже, чем ситуация с Gedit .
«Текстовый файл занят» может сбивать с толку: речь идет не о текстовых файлах, а о исполняемых файлах. Исполняемые файлы называются текстовыми файлами, потому что… на самом деле, я не знаю почему .
На самом деле это сообщение означает «этот файл заблокирован другой программой, которая использует его и не может позволить ему изменить его под носом, поэтому вы не можете писать в него». Довольно необычно видеть это сообщение для Текстовый файл: Unix-системы, как правило, не одобряют обязательную блокировку файлов, и приложения не могут блокировать изменение файла другими пользователями (Unix имеет консультативные блокировки: их можно использовать для синхронизации одновременного доступа к файлу с помощью взаимодействующих программ.) Наиболее распространенное обстоятельство, когда вы видите «текстовый файл занят» ( ETXTBUSY ), — это если вы пытаетесь изменить исполняемый файл: ядро блокирует это. Другая возможность — это смонтированный образ диска , снова заблокированный ядром.
В вашем случае, учитывая местоположение файла /media/sf_Ubuntu и права собственности на группу vboxsf , я предполагаю, что файл, находящийся в файловой системе общего доступа к файлам VirtualBox, заблокирован в операционной системе хоста. Предположительно, хост является Windows-машиной, и у вас также есть файл, открытый в редакторе. Вам нужно закрыть файл на хосте, прежде чем вы сможете сохранить его в редакторе на виртуальной машине.
Проверьте, lsof открыт ли файл другим приложением
Источник
Текстовый файл занят
прошу дать совет. Linux 7, Debian, установка «по умолчанию»
После вот такого списка команд
fallocate -l 3000M /mnt/3000MB.swap
dd if=/dev/zero of=/mnt/3000MB.swap bs=1024 count=3072000
mkswap /mnt/3000MB.swap
swapon /mnt/3000MB.swap
chmod 600 /mnt/3000MB.swap
Вот такая ошибка
Текстовый файл не найден
Ребут не помог. Как найти процесс занимающий этот файл и убить его?
Даже сам файл не смог найти 🙁
Эта ошибка где появляется и после какой команды?
Вообще посмотреть какой процесс держит файл можно через lsof .
Как найти процесс занимающий этот файл и убить его?
Можно еще провод из розетки вынуть.
Эта ошибка где появляется и после какой команды?
fallocate -l 3000M /mnt/3000MB.swap
вообще посмотреть какой процесс держит файл можно через lsof.
попробовал команду, вылез список длинной в несколько тысяч процессов 🙁
а можете полностью команду для файла написать? говорит
-bash: kill: init: arguments must be process or job IDs
может надо местами поменять команды swapon и chmod ? Ну, в смысле, порядок их вызова изменить.
На вообще регистрант выше неправ, ибо этот файл юзает не инит, а ядро.
не помогло, та же ошибка что и в начале
Блин, как же здорово, когда не очень безопасные команды вводят другие люди на своих компьютерах, а результат все равно получаешь ты. Я вот думал, что хотя бы паника будет.
социальная инженерия — ваше все, я так понимаю? Ожидал помощь на этом форуме. )
Здесь с такой формулировкой вопроса, как в ОП, над тобой обязательно будут хохмить. Видно, что человек совершенно не разбирается в вопросе, пытается вводить какие-то команды из интернета, и при этом не факт, что результат, если он таки его получит, будет тем, что он ожидал.
Уже советовали выше, и я повторю: сначала делай chmod, а потом swapon.
проблема еще в том, что я сам файл не могу найти 🙁
сначала swapoff сделай и потом меняй его свойства
что результат, если он таки его получит, будет тем, что он ожидал
вкратце — так выглядит любой процесс самообучения, не так ли?
я сам файл найти не могу, ни одна команда его не выцепляет. Пробовал whereis, grep, find. Подскажите где почитать про синтаксис команд тогда?
Я думаю в ребут просто должно уйти.
Я думаю в ребут просто должно уйти.
сделал ребут. Не помогло.
вкратце — так выглядит любой процесс самообучения, не так ли?
Подход «тыкать все подряд и смотреть на результат» где-то может и работает, но не при освоении линукса. Тут будет правильно сначала прочитать справку о каждой команде, что именно она делает, и только потом ее выполнять. Если что, справка обычно доступна через man
я сам файл найти не могу, ни одна команда его не выцепляет.
Перезагрузись, начни выполнять команды по списку, но chmod и swapon поменяй местами.
Ну тут разве что ошибка будет если у вас каталога /mnt нет.
Так и не должно было, я про то что будет если инит убить.
Давай по порядку. Чего ты хочешь добиться выполнением этих команд, какова конечная цель?
Подход «тыкать все подряд и смотреть на результат» где-то может и работает, но не при освоении линукса
виртуалка развернута как раз для того, чтобы делать так. Учиться, исправлять ошибки, узнавать. Вы же прекрасно понимаете, что в горах информации найти нормальный guide сложно. Ищу.
Перезагрузись, начни выполнять команды по списку, но chmod и swapon поменяй местами.
нет результата. То же самое — «текстовый занят» или «устройство или ресурс занято».
Не ищу готовое решение, хочу разобраться. Если файл занят — почему я не могу его стандартными командами найти? Если файл есть — почему тупой ребут не снимает процесс?
Чего ты хочешь добиться выполнением этих команд, какова конечная цель?
Разворачиваю мастерноду по инструкции. Разобрался за неделю в виртуалках, установил ОС, нормально позанимался сексом с ней. Аж сны снятся теперь.
Сейчас пошагово хочу просто найти ответы на текущие вопросы.
1. Убрать ошибку «текстовый файл занят».
2. убрать ошибку «устройство или ресурс занято»
Кто возвращает эту ошибку? Они возникает как результат выполнения какой-то команды? Какой?
Кто возвращает эту ошибку? Они возникает как результат выполнения какой-то команды? Какой?
Источник