Права доступа LinuxmacOS Permission deniedEACCES

Linux: «./script.sh: Permission denied» при запуске скрипта

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Сообщение bash: ./script.sh: Permission denied значит, что система не разрешает выполнить файл. Чаще всего у файла нет бита исполнения (chmod +x), реже — раздел смонтирован с параметром noexec (флешка, /tmp), недостаточно прав на каталог или запуск блокирует SELinux. Посмотрите права командой ls -l и проверьте параметры монтирования — это сразу укажет на причину.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговая диагностика
  4. Как проверить результат
  5. Если не помогло

#Что означает ошибка

Permission denied
bash: ./script.sh: Permission denied
По-русскиОтказано в доступе: файл нельзя выполнить.

Чтобы запустить файл, система проверяет несколько вещей: есть ли у вас право исполнения (x) на файл, можно ли заходить в каталоги по пути, разрешено ли исполнение на самой файловой системе и не запрещает ли его политика безопасности. Нарушение любого условия даёт Permission denied.

#Причины и решения

Возможная причинаКак узнатьЧто делать
У файла нет бита исполненияФайл скопирован, скачан или создан без права x.ls -l script.sh показывает права вида -rw-r--r-- без буквы x.Добавьте право: chmod +x script.sh (шаг 2).
Раздел смонтирован с параметром noexecИсполнение файлов на этом разделе запрещено: так часто монтируются флешки, внешние диски и /tmp.Права на файл верные, но запуск запрещён; findmnt показывает noexec.Скопируйте файл на раздел без noexec либо запускайте через интерпретатор (bash script.sh).
Нет прав на каталог по путиНет права x на один из каталогов, ведущих к файлу.namei -l показывает каталог без права прохода для вас.Откройте право прохода (chmod o+x каталог) или запускайте от владельца.
Файл принадлежит другому пользователю или rootПрава исполнения есть только у владельца.ls -l показывает другого владельца и права -rwx------.Запустите от владельца, либо измените права/владельца осознанно.
SELinux или AppArmor запрещает запускПолитика безопасности блокирует исполнение из этого места.Права в порядке, но запуск запрещён; в журналах audit есть записи denied.Проверьте журналы безопасности и контекст файла; не отключайте защиту целиком.

#Пошаговая диагностика

  1. Посмотрите права на файлОткройте терминал и выполните namei -l /реальный/путь/к/файлу, затем ls -ld /реальный/путь/к/файлу с реальным путём. Для запуска скрипта нужна отметка исполнения на самом файле и разрешение прохода по каталогам. Не выставляйте chmod 777 и не меняйте права системных файлов из чужой инструкции.
  2. Добавьте право исполненияВ терминале перейдите в каталог со скриптом и проверьте ls -l ./script.sh. Если это ваш доверенный скрипт, а в правах отсутствует буква x, выполните chmod u+x ./script.sh, затем запустите ./script.sh. Сначала откройте файл в редакторе и проверьте содержимое; не запускайте незнакомые сценарии только потому, что они требуют прав. Если ошибка осталась, проверьте путь, строку #! и параметры монтирования.
  3. Проверьте, как смонтирован разделВведите findmnt -T ./script.sh -o TARGET,FSTYPE,OPTIONS из каталога скрипта. Если в OPTIONS указано noexec, запуск исполняемых файлов на этом разделе ограничен. Не перемонтируйте системные или корпоративные диски без разрешения. Для доверенного сценария оболочки временно используйте bash ./script.sh, если он написан для Bash, либо перенесите скрипт на разрешённый файловый раздел. Если файл не является текстовым скриптом, запуск через Bash не поможет.
  4. Проверьте права на каталоги по путиВ терминале выполните id, затем ls -ld -- ПУТЬ для реального файла или каталога (вместо ПУТЬ подставьте путь из ошибки, в кавычках при пробелах). Чтобы увидеть права всех промежуточных каталогов, выполните namei -l -- ПУТЬ. По выводу определите, кому принадлежат файлы и есть ли право прохода (x) по каталогам. Не назначайте 777 и не меняйте владельца рекурсивно без понимания роли файлов.
  5. Запустите через интерпретатор для проверкиКоманда bash script.sh выполнит файл без права x — это подтвердит, что проблема именно в праве исполнения или noexec.
  6. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Первая команда показывает права, вторая добавляет право исполнения владельцу и другим, третья запускает.
    Linux · Терминал (Bash)Команда
    Первая команда показывает права, вторая добавляет право исполнения владельцу и другим, третья запускает. Давайте право только скриптам, в которых вы уверены.
    ls -l script.sh
    chmod +x script.sh
    ./script.sh
    Вариант 2findmnt -T . покажет, на каком разделе вы находитесь и нет ли в параметрах noexec; namei -l выведет п…
    Linux · Терминал (Bash)Команда
    findmnt -T . покажет, на каком разделе вы находитесь и нет ли в параметрах noexec; namei -l выведет права на каждом уровне пути. Команды только читают.
    findmnt -T .
    namei -l "$(pwd)/script.sh"

#Как проверить результат

  • Скрипт запускается и выполняет свою работу.
  • ls -l показывает права -rwxr-xr-x (или другие с буквой x у владельца).

#Если не помогло

Если запуск происходит из каталога на флешке или сетевой папке, скопируйте файл в домашний каталог и повторите. Для systemd-служб и cron проверьте пользователя, от имени которого запускается задание, и его права. На системах с SELinux просмотрите sudo ausearch -m avc -ts recent — там видны запреты политики.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.