Permission denied в Termux: как исправить ошибку доступа

Ошибка permission denied в Termux появляется, когда оболочка пытается выполнить файл без флага исполнения, записать данные в защищённый каталог или обратиться к системным ресурсам Android, к которым у приложения нет доступа. Типичный сценарий: вы скачали скрипт, ввели ./script.sh — и получили отказ вместо результата.

Терминал Termux работает в изолированной среде Android, поэтому причины отказа делятся на две группы: внутренние (права на файлы внутри окружения Termux) и внешние (ограничения самой системы Android). Ниже разберём обе группы и дадим безопасные способы диагностики и исправления.

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

Сообщение «Permission denied» (доступ запрещён) — это ответ ядра Linux на попытку выполнить действие, на которое у процесса нет прав. В Unix-подобных системах у каждого файла есть набор разрешений: чтение, запись и выполнение — для владельца, группы и остальных пользователей.

Если файл не помечен как исполняемый, команда вида ./myscript.sh завершится отказом. Аналогично запись в каталог, доступный только для чтения, вызовет ту же ошибку. Проверить текущие разрешения можно командой ls -l имя_файла — в начале строки вы увидите набор символов вроде -rw-r--r--.

  • 🔍 r — право на чтение файла;
  • ✏️ w — право на запись и изменение;
  • ▶️ x — право на выполнение (запуск как программы);
  • 📁 для каталогов x означает возможность входа в него.

Отсутствие флага выполнения — самая частая причина

Файлы, скачанные через браузер или распакованные из архива, обычно не имеют флага исполнения. Это нормальное поведение, а не сбой. Чтобы скрипт можно было запустить напрямую, необходимо добавить разрешение на выполнение.

Используйте команду chmod. Она меняет права доступа к файлу:

chmod +x script.sh

./script.sh

Альтернативный вариант — запустить скрипт через интерпретатор напрямую, тогда флаг выполнения не нужен:

bash script.sh

python script.py

Обратите внимание: команда chmod +x сработает только внутри окружения Termux — в каталоге /data/data/com.termux/files/home. На общем хранилище Android (карта памяти, папка Download) флаг исполнения установить нельзя, об этом подробнее ниже.

📊 Где именно возникла у вас ошибка permission denied?
При запуске скрипта ./file.sh
При обращении к памяти телефона
При установке пакетов pkg
При запуске бинарного файла

Доступ к общей памяти Android

По умолчанию Termux не видит содержимое общего хранилища устройства. Попытка перейти в /sdcard или /storage/emulated/0 и поработать с файлами приведёт к отказу, пока приложению не выдано соответствующее разрешение Android.

Для запроса доступа существует специальная команда:

termux-setup-storage

После её выполнения система покажет стандартный диалог запроса разрешения. Подтвердите доступ — и в домашнем каталоге появится папка ~/storage со ссылками на downloads, dcim, shared и другие разделы общей памяти.

⚠️ Внимание: даже после выдачи разрешения файловая система общего хранилища Android не поддерживает права на исполнение. Команда chmod +x там не сработает — копируйте исполняемые файлы в домашний каталог Termux командой cp и запускайте их оттуда.

Ошибки при запуске бинарных файлов

Отдельный случай — запуск чужих исполняемых файлов, например скачанных из интернета утилит. Здесь permission denied может возникать даже при выставленном флаге +x. Возможные причины: файл собран для другой архитектуры процессора, повреждён при загрузке или лежит в разделе, где выполнение запрещено.

Проверьте тип файла командой file имя_файла — она покажет, является ли файл исполняемым бинарником и для какой платформы он собран. Узнать архитектуру устройства можно командой uname -m. Если архитектуры не совпадают, файл физически не сможет запуститься.

Почему бинарник из интернета может не запуститься

Termux работает на Android с ядром Linux, но бинарные файлы для обычного десктопного Linux часто используют другую библиотеку C (glibc вместо bionic) и другие пути к загрузчику. Такие файлы в Termux не запустятся без дополнительных прослоек вроде proot. Безопаснее устанавливать пакеты из официального репозитория через pkg install.

Ошибки доступа при установке пакетов

Иногда отказ в доступе появляется при работе пакетного менеджера pkg или apt. Например, после экспериментов с sudo или запуска команд от root права на служебные каталоги внутри $PREFIX могут оказаться испорчены, и обычные операции начнут завершаться ошибкой.

Что можно проверить в такой ситуации:

  • 🔄 обновите списки пакетов: pkg update;
  • 📂 убедитесь, что вы не работаете внутри системного каталога — вернитесь командой cd ~;
  • 🧹 очистите кэш пакетов: apt clean;
  • 🔎 проверьте владельца файлов в домашнем каталоге через ls -la.

Если окружение повреждено серьёзно и ошибки повторяются, радикальный вариант — очистить данные приложения Termux в настройках Android. Учтите, что это удалит все установленные пакеты и файлы внутри окружения, поэтому важные данные заранее скопируйте в общую память.

☑️ Базовая диагностика permission denied

Выполнено: 0 / 5

Таблица типовых ситуаций и решений

Ситуация Вероятная причина Решение
./script.sh не запускается Нет флага исполнения chmod +x script.sh
Нет доступа к /sdcard Не выдано разрешение Android termux-setup-storage
chmod не работает в памяти телефона Ограничение файловой системы Скопировать файл в ~
Бинарник не запускается с +x Другая архитектура или glibc Установить пакет из репозитория
Ошибки при pkg install Повреждены права в $PREFIX Очистка данных приложения

Когда нужен root и почему это не всегда выход

Часть операций в Termux принципиально недоступна без root-прав: изменение системных файлов Android, доступ к данным других приложений, работа с некоторыми сетевыми интерфейсами. Если команда упирается в отказ именно из-за системного ограничения, никакие chmod внутри Termux не помогут.

⚠️ Внимание: получение root-доступа снимает гарантийные ограничения системы и может нарушить работу банковских приложений и механизмов защиты устройства. Выполняйте такие действия только при полном понимании рисков и следуйте инструкциям именно для вашей модели устройства.

Во многих случаях root не требуется: подавляющее большинство задач в Termux решается внутри собственного окружения приложения, где у пользователя и так полные права. Сначала проверьте, не запускаете ли вы команду в неправильном каталоге или не пытаетесь ли изменить файл, принадлежащий системе.

Часто задаваемые вопросы

Почему chmod +x не работает в папке Download?

Общее хранилище Android монтируется с параметрами, запрещающими исполнение файлов. Скопируйте файл в домашний каталог Termux командой cp и выполните chmod +x уже там.

Что делать, если termux-setup-storage не помогает?

Проверьте в настройках Android, что у приложения Termux выдано разрешение на доступ к файлам. На новых версиях Android разрешение может называться «Файлы и медиа». После выдачи разрешения перезапустите Termux.

Можно ли исправить ошибку без root-прав?

Да, в большинстве случаев. Ошибки с флагом исполнения, доступом к памяти и установкой пакетов решаются штатными средствами: chmod, termux-setup-storage, pkg update. Root нужен только для операций над самой системой Android.

Почему скачанный файл не запускается даже с chmod +x?

Проверьте тип файла командой file и архитектуру устройства командой uname -m. Файл может быть собран для другой платформы или повреждён при загрузке. Надёжнее устанавливать программы из официального репозитория Termux через pkg install.

Ошибка появляется при записи в системный каталог — что делать?

Каталоги вроде /system или /data защищены Android, и без root-прав запись туда невозможна. Перенесите рабочие файлы в домашний каталог Termux — для большинства задач этого достаточно.