Ошибки

Permission denied при запуске скрипта: как исправить

Ошибка значит, что у файла скрипта нет права x — права на выполнение. Его даёт команда chmod u+x. Ниже — что делать, если и после неё скрипт не запускается, и чем эта ошибка отличается от похожих.

Обновлено 10.10.2026≈ 5 мин чтения
Содержание 9

Что сделать прямо сейчас

Дайте скрипту право на выполнение — вместо script.sh подставьте имя своего файла:

chmod u+x script.sh

И запустите его снова:

./script.sh

Если chmod ответил Operation not permitted, файл принадлежит другому пользователю: поставьте sudo перед chmod. Если скрипт и после этого не запускается — смотрите ниже.

Как выглядит ошибка

-bash: ./script.sh: Permission denied

Первое слово — кто сообщает об ошибке: bash, программа, которая выполняет команды в терминале. Минус перед bash значит, что это оболочка входа — та, что запустилась при подключении к серверу по SSH. В других случаях строка начинается с bash: — смысл тот же.

Почему так происходит

Чтобы запустить файл как программу — командой ./script.sh, — у него должно быть право x. Без него bash отказывается. Права покажет команда:

ls -l script.sh
-rw-r--r-- 1 ivan ivan 210 Oct 10 12:00 script.sh

В правах rw-r--r-- нет буквы x — запускать файл нельзя. Это нормально для нового файла: созданный в редакторе или скачанный из интернета файл получает права без x, пока их не дали явно. Что значат буквы, рассказано в справочнике Права на файлы в Linux: rwx, 644 и 755.

Способ 1. Дайте право на выполнение

chmod u+x script.sh

u+x разрешает запуск владельцу файла — вам. Если скрипт должны запускать и другие пользователи сервера, напишите chmod a+x script.sh — право получат все.

Проверьте командой ls -l script.sh: в правах появится x — -rwxr--r--.

Если файл не ваш, chmod напишет Operation not permitted: поставьте sudo перед командой. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — так и должно быть: наберите пароль и нажмите Enter.

Способ 2. Запустите через bash

bash script.sh

Так bash читает файл сам, и право x не нужно — достаточно права на чтение. Способ подходит для скриптов, которые вы запускаете один-два раза. Если скрипт на Python — в первой строке #!/usr/bin/env python3, — запускайте его так:

python3 script.py

Если после chmod ошибка осталась

Диск подключён с запретом запуска

Диск или папку можно подключить к системе с настройкой noexec — она запрещает запускать с него программы, какие бы права ни были у файлов. Перейдите в папку со скриптом и проверьте:

findmnt -T .

Команда покажет диск, на котором лежит текущая папка, и его настройки — колонка OPTIONS. Если там есть слово noexec, перенесите скрипт в домашнюю папку командой mv script.sh ~/ или запускайте его через bash — способ 2.

У папки на пути нет права x

Чтобы запустить файл, право x нужно и всем папкам на пути к нему. Права на всём пути покажет команда namei — подставьте полный путь к скрипту:

namei -l /home/ivan/scripts/script.sh

Как читать её ответ, рассказано в разборе 403 Forbidden: там такая же проверка для файлов сайта.

Похожие ошибки

СообщениеЧто значитЧто делать
./script.sh: No such file or directoryФайла с таким именем нет в текущей папкеСверьте имя с ответом ls, перейдите в папку скрипта командой cd
./script.sh: cannot execute: required file not foundНет программы из первой строки скриптаРазбор ниже
script.sh: command not foundСкрипт запустили без ./ в началеЗапускайте так: ./script.sh

cannot execute: required file not found

bash нашёл файл, но не нашёл программу, которая должна его выполнить. Путь к ней записан в первой строке скрипта после #!, например #!/bin/bash. Посмотрите первую строку:

head -n 1 script.sh

Если в пути опечатка или такой программы на сервере нет, исправьте строку в редакторе или установите программу. Проверить, есть ли файл, можно командой ls -l с путём из первой строки.

Если путь верный и программа есть, проверьте, не сохраняли ли файл в Windows. Там каждая строка заканчивается невидимым символом, и bash ищет программу /bin/bash с этим символом на конце. Уберите лишние символы:

tr -d '\r' < script.sh > script-unix.sh
mv script-unix.sh script.sh
chmod u+x script.sh

Первая команда создаёт копию без лишних символов, вторая заменяет ею исходный файл, третья возвращает право на выполнение — у новой копии его нет.

Команды сверены со справкой Ubuntu 24.04, тексты ошибок — с исходным кодом coreutils 9.4 и bash 5.2.

Источники

Сверено 10 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 10.10.2026