Ошибка Bash 'Permission denied': как дать права на запуск скрипта (chmod +x)
Вы создали или скачали Bash-скрипт deploy.sh, пытаетесь запустить его командой ./deploy.sh, но терминал возвращает ошибку «bash: ./deploy.sh: Permission denied» (Отказано в доступе), хотя вы являетесь владельцем файла.
Почему возникает ошибка «Permission denied»?
В операционной системе Linux все созданные текстовые файлы по умолчанию имеют права только на чтение (r) и запись (w), но не имеют права на исполнение (x - Execute). Это защитный механизм, чтобы скачанные файлы не могли случайно запуститься как программа.
Решение в 2 шага:
Шаг 1. Добавляем флаг исполняемости (команда chmod +x)
Откройте терминал в папке со скриптом и выполните команду:
chmod +x script.sh(Замените script.sh на реальное имя вашего файла).
Флаг +x (eXecute) говорит ядру Linux: «Разрешить запуск этого файла как исполняемой программы».
Шаг 2. Запускаем скрипт
Теперь запустите файл, указав точку и слэш перед именем:
./script.shТочка и слэш ./ сообщают терминалу: «Ищи программу именно в текущей папке, а не в системных директориях Linux».
Проверка прав доступа (команда ls -l)
Посмотрите на права файла до и после команды chmod +x:
ls -l script.sh- Было:
-rw-r--r-- 1 user user 120 Jan 15 script.sh(буквы 'x' нет) - Стало:
-rwxr-xr-x 1 user user 120 Jan 15 script.sh(появились буквы 'x', файл подсвечен зеленым цветом)
Частые вопросы (FAQ)
Зачем нужна первая строчка #!/bin/bash (Shebang) внутри скрипта?
Символы '#!' называются шебанг. Они указывают операционной системе, каким именно интерпретатором (в данном случае /bin/bash или /usr/bin/env python3) нужно выполнять код этого файла.
Можно ли запустить скрипт без команды chmod +x?
Да. Вы можете передать файл напрямую интерпретатору: bash script.sh. В этом случае право на исполнение файла не требуется, достаточно права на чтение.
Что делать, если chmod +x не помогает из-за ошибки 'Operation not permitted'?
Значит, файл принадлежит другому пользователю (например, root). Выполните команду с правами администратора: sudo chmod +x script.sh.
Что означают цифры chmod 755 или chmod 777?
Это числовой формат задания прав. 755 дает владельцу полные права (чтение/запись/запуск), а остальным — только чтение и запуск. Команда chmod 777 дает полные права вообще всем пользователям (не рекомендуется из соображений безопасности).