Вопрос или проблема
Я не могу запустить свой Bash-скрипт, доступ на выполнение всегда отклоняется.
Я изменил свои файлы с помощью команды, например:
chmod u+x bash_script1.sh
и получил следующее:
-rwxr--r-- 1 user group 1947 Jun 18 16:04 bash_script1.sh
-rwxr--r-- 1 user group 2430 Jun 18 15:59 bash_script2.sh
-rw-r--r-- 1 user group 1 Jun 18 10:57 runs.txt
Тем не менее, я продолжаю получать следующую ошибку при запуске из командной строки:
Команда:
./bash_script1.sh
Ошибка:
-sh: ./bash_script1.sh: Permission denied
Когда я запускаю следующую команду, я не получаю ошибку, но я не хочу использовать bash для запуска моего скрипта:
bash bash_script1.sh
#!/usr/bin/env bash
находится в заголовке.
Как видно из вывода findmnt -T .
, файловая система, на которой хранится скрипт, смонтирована с опцией noexec
. Это предотвращает выполнение скриптов (а также бинарных исполняемых файлов) непосредственно, тогда как bash bash_script1.sh
все еще работает, потому что исполняемый файл bash
хранится в другом месте и нужно только прочитать скрипт.
Чтобы временно изменить поведение, можно использовать команду mount
:
sudo mount -o remount,exec /home
Чтобы сделать изменение постоянным, вам нужно будет изменить ваш файл /etc/fstab
и удалить опцию монтирования noexec
для этого блочного устройства.
В моем случае исполняемые файлы выполнялись, но никакие скрипты, будь то bash или c-shell, не работали. Виной были эти параметры монтирования в /etc/fstab, для раздела, где располагаются скрипты:
user,data-ordered
(как-то сгенерированы по умолчанию во время установки).
Решением было заменить эти параметры на:
acl,user_xattr
(найдено на другой машине, где все работало хорошо – man mount даст объяснение).
.
Ответ или решение
Когда вы пытаетесь выполнить Bash-скрипт и сталкиваетесь с ошибкой "Permission denied", это может быть связано с несколькими причинами. В вашем описании вы выполнили команду chmod u+x bash_script1.sh
, которая добавляет разрешение на выполнение для пользователя. В результате права на файл выглядят следующим образом: -rwxr--r--
, что подтверждает, что пользователь действительно имеет право на выполнение.
Однако, несмотря на наличие всех необходимых прав, проблема может заключаться в конфигурации монтирования файловой системы. Как вы указали, вывод команды findmnt -T .
показывает, что файловая система, где хранится скрипт, смонтирована с опцией noexec
, которая запрещает выполнение бинарных файлов и скриптов.
Пример: Если вы собираетесь запустить bash_script1.sh
и получаете ошибку "Permission denied", хотя у вас есть права на выполнение, это указывает на возможную проблему с монтированием. При монтировании раздела с опцией noexec
скрипт не может быть выполнен напрямую. В результате команда bash bash_script1.sh
работает, потому что она вызывает оболочку bash для интерпретации файла, не полагаясь на системные права выполнения.
Применение: Чтобы временно изменить поведение и разрешить выполнение скриптов, вы можете использовать команду mount
с параметром exec
. Например, выполните sudo mount -o remount,exec /home
, чтобы временно разрешить выполнение в вашем домашнем каталоге. Однако для постоянного решения проблемы необходимо внести изменения в файл /etc/fstab
, удалив опцию noexec
для соответствующего устройства. Если проблему создают случайные параметры, сгенерированные при установке, такие как user,data-ordered
, подумайте о замене их на параметры, которые поддерживают выполнение скриптов, например, acl,user_xattr
.
Таким образом, решение вашей проблемы зависит от изменения настроек файловой системы для разрешения выполнения скриптов. Это может подразумевать временную или постоянную модификацию параметров монтирования в зависимости от ваших потребностей и административных возможностей.