Ошибка Bash 'Permission denied': как выдать права на запуск (chmod +x)
Почему Linux не дает запустить созданный скрипт
Типичная ситуация для новичка: вы написали или скачали Bash-скрипт backup.sh, вводите в терминале команду ./backup.sh, но вместо выполнения получаете раздражающую ошибку: bash: ./backup.sh: Permission denied (Отказано в доступе). Даже запуск через sudo ./backup.sh иногда выдает ту же проблему.
Архитектура прав безопасности в Linux
В Linux по соображениям безопасности любой вновь созданный текстовый файл создается без права на исполнение. Система воспринимает его как обычный документ для чтения, блокируя попытку запустить его как бинарный файл или исполняемую программу.
| Бит права | Буква | Число | Что разрешает |
|---|---|---|---|
| Read | r | 4 | Чтение содержимого файла |
| Write | w | 2 | Изменение и сохранение файла |
| Execute | x | 1 | Запуск файла как программы (исполнение) |
Пошаговое исправление ошибки доступа
Шаг 1: Проверка текущих прав на файл
Посмотрим права на ваш скрипт с помощью команды ls -l:
ls -l backup.shВы увидите строку вида: -rw-r--r-- 1 user user 154 Nov 10 12:00 backup.sh. Обратите внимание: буквы x (Execute) в строке нет. Файл нельзя запускать.
Шаг 2: Выдача бита исполнения (chmod +x)
Добавьте файлу флаг исполняемости для всех пользователей:
chmod +x backup.shЕсли файл принадлежит суперпользователю root, выполните команду через sudo:
sudo chmod +x backup.shШаг 3: Проверка и запуск скрипта
Снова введите ls -l backup.sh. Права изменятся на -rwxr-xr-x, а имя файла в большинстве терминалов подсветится зеленым цветом. Теперь запустите скрипт:
./backup.shШаг 4: Проверка заголовка Shebang внутри скрипта
Если скрипт все еще падает, откройте его в редакторе (nano backup.sh) и убедитесь, что самой первой строкой файла прописан правильный интерпретатор:
#!/bin/bashТиповые ошибки администраторов
- Выдача опасных прав chmod 777: Неопытные пользователи часто ставят полные права
chmod 777на всю систему. Это делает файлы уязвимыми для записи любым вирусом или неавторизованным пользователем. Для скриптов достаточноchmod 755илиchmod +x. - Запуск без указания пути (./): Если написать просто
backup.sh, Linux будет искать команду в системных папках PATH и выдаст ошибку command not found. Точка со слешем./явно указывает: запустить файл из текущей директории.
Эксперты ITSTM проведут аудит информационной безопасности, настроят правила sudoers и автоматизируют рутинные задачи вашей компании.
Частые вопросы (FAQ)
Чем отличается запуск 'bash script.sh' от './script.sh'?
Команда 'bash script.sh' передает файл как аргумент напрямую в интерпретатор bash, поэтому флаг исполнения +x не требуется (нужны только права на чтение). Команда './script.sh' запускает файл как самостоятельную системную программу.
Как выдать права на запуск сразу всем .sh скриптам в папке?
Используйте маску: chmod +x *.sh
Что означают цифры в правах chmod 755?
Первая цифра (7 = 4+2+1 = rwx) — полные права владельца. Вторая цифра (5 = 4+1 = r-x) — чтение и запуск для группы. Третья цифра (5 = r-x) — чтение и запуск для всех остальных.
Почему после chmod +x скрипт выдает '/bin/bash^M: bad interpreter'?
Скрипт был создан или отредактирован в Windows. В нем присутствуют невидимые DOS-окончания строк. Исправьте это командой: sed -i -e 's/\r$//' script.sh или утилитой dos2unix.