Ошибка Permission denied в Linux: как дать права на запуск (chmod +x)
Симптомы ошибки доступа
При попытке запустить исполняемый файл или скрипт в терминале (./myscript.sh) вы получаете сообщение:
bash: ./myscript.sh: Permission denied (Отказано в доступе)В Linux вновь созданные текстовые файлы по умолчанию не имеют флага исполнения (Execute), даже если вы являетесь их создателем.
Как сделать файл исполняемым
- Добавьте флаг права на исполнение (+x) для нужного файла:
chmod +x myscript.sh - Запустите скрипт заново:
./myscript.sh
Если ошибка Permission denied возникает при чтении или записи:
Если вам нужно отредактировать системный файл или прочитать защищенный лог:
# 1. Запуск команды с правами администратора:
sudo nano /etc/hosts
# 2. Смена владельца файла на вашего текущего пользователя:
sudo chown $USER:$USER my_file.txt
# 3. Выдача прав на чтение и запись (чтение+запись владельцу, чтение всем):
chmod 644 my_file.txtЧто означает ./ перед именем файла? Точка со слэшем сообщает терминалу: «Ищи исполняемый файл прямо в этой текущей директории», так как текущая папка по умолчанию не входит в глобальную переменную путей поиска PATH.
Частые вопросы (FAQ)
Что означают буквы r, w, x в правах файла?
r (read) — право на чтение файла; w (write) — право на изменение и запись; x (execute) — право на запуск файла как программы.
Почему скрипт не запускается даже с chmod +x?
Проверьте первую строку скрипта (Shebang). Для bash-скриптов первой строкой обязательно должно быть прописано #!/bin/bash, для Python — #!/usr/bin/env python3.
Что делать, если раздел смонтирован с опцией noexec?
Если папка /tmp смонтирована с флагом noexec, запуск любых бинарных файлов из нее заблокирован ядром. Запустите скрипт через прямой вызов интерпретатора: bash /tmp/myscript.sh.
Как убрать флаг исполнения обратно?
Используйте знак минуса: chmod -x myscript.sh.