Ошибка Operation not permitted на Android: причины и способы исправления

Сообщение Operation not permitted появляется в терминале Termux, в файловых менеджерах или при выполнении ADB-команд тогда, когда система Android блокирует операцию на уровне прав доступа — например, при попытке изменить файл в /system, выполнить скрипт с карты памяти или удалить защищённый объект. Это не сбой приложения, а отказ ядра Linux, на котором работает Android, выполнить запрошенное действие от имени текущего пользователя.

Разобраться с ошибкой можно безопасными методами: проверкой разрешений, правильным выбором каталога и корректными командами. Ниже разберём, где именно возникает отказ, почему Android ограничивает операции и какие шаги помогают в каждом сценарии — от Termux до ADB.

Что означает ошибка Operation not permitted

Формулировка пришла из мира Linux/Unix: это стандартный код отказа, который ядро возвращает процессу, когда у него нет полномочий на операцию. В отличие от Permission denied, который чаще связан с правами на конкретный файл (чтение, запись, выполнение), Operation not permitted обычно означает запрет на уровне системы: защищённый раздел, политика SELinux, ограничения файловой системы или запрет для непривилегированного пользователя.

На Android к этому добавляются собственные механизмы безопасности. Системные разделы монтируются в режиме «только чтение», внешние накопители не поддерживают бит выполнения, а доступ к чужим данным приложений закрыт изолированной средой (sandbox). Поэтому одна и та же команда может работать в одном каталоге и завершаться ошибкой в другом.

Типичные сценарии появления ошибки

Чтобы выбрать правильное решение, определите, в какой ситуации возникает отказ. Наиболее частые случаи:

  • 📱 Termux: запуск скрипта с карты памяти или из общего хранилища — bash: ./script.sh: Permission denied или Operation not permitted при chmod на внешнем накопителе.
  • 📁 Файловые операции: попытка изменить, переместить или удалить файлы в системных каталогах /system, /vendor, /data без соответствующих прав.
  • 🔧 ADB: команды adb push в защищённые пути или попытка перемонтировать разделы на устройстве без разблокированного загрузчика.
  • 🗑️ Удаление объектов: сбой при удалении файлов, принадлежащих другому приложению, или защищённых атрибутами.

Отдельный сценарий — работа с внешними накопителями. Карта microSD и USB-флешки чаще всего отформатированы в FAT32 или exFAT, а эти файловые системы не хранят права доступа Linux и бит исполнения. Любая попытка выставить chmod +x на таком носителе завершится ошибкой — это ожидаемое поведение, а не неисправность.

Решение для Termux и скриптов

Если ошибка возникает при запуске скрипта в Termux, первое действие — проверить, откуда вы его запускаете. Домашний каталог Termux (/data/data/com.termux/files/home) поддерживает права и выполнение, а общее хранилище и SD-карта — нет.

☑️ Проверка перед запуском скрипта в Termux

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

Если скрипт лежит в общем хранилище, перенесите его во внутреннюю среду Termux:

cp /sdcard/Download/script.sh ~/

chmod +x ~/script.sh

~/script.sh

Альтернатива без копирования — запуск через интерпретатор напрямую: bash /sdcard/Download/script.sh. В этом случае бит выполнения не нужен, потому что файл читается как данные, а исполняется сам bash. Учтите, что путь к общему хранилищу в Termux доступен после выполнения termux-setup-storage и выдачи разрешения в системном диалоге.

⚠️ Внимание: не пытайтесь «исправить» ошибку, выдавая права chmod 777 на системные каталоги или запуская команды от root без понимания последствий. Это может нарушить работу системы и привести к потере данных.
📊 Где вы столкнулись с Operation not permitted?
В Termux при запуске скрипта
В файловом менеджере
При работе через ADB
При удалении или копировании файлов

Ошибки при работе с файлами и системными каталогами

Когда файловый менеджер или команда rm, mv возвращает отказ, причина почти всегда в одном из трёх: объект принадлежит другому приложению, раздел смонтирован только для чтения, либо доступ блокирует SELinux. Каталог /data/data и данные чужих приложений недоступны без root-прав — это базовое ограничение архитектуры Android.

Что можно проверить безопасно:

  • 🔍 Уточните владельца и права файла командой ls -l путь_к_файлу в терминале.
  • 📂 Убедитесь, что работаете в каталоге, где у приложения есть право записи — например, в собственной папке приложения или в общем хранилище.
  • 🔄 Перезагрузите устройство: иногда отказ вызван «зависшей» блокировкой файла другим процессом.
  • 🧭 Если файл находится на SD-карте, проверьте, не переведена ли она в режим «только чтение» — это бывает при ошибках файловой системы накопителя.

Операции с разделами /system и /vendor на современных устройствах требуют разблокированного загрузчика и часто невозможны даже с root из-за динамических разделов и проверки целостности. Если ваша задача связана с модификацией системы, сверяйтесь с документацией именно для вашей модели устройства — универсальной безопасной инструкции здесь нет.

Ошибка при работе через ADB

При подключении к компьютеру ошибка Operation not permitted может появиться при adb push в защищённые пути, при выполнении adb shell-команд над системными файлами или при попытке перемонтировать разделы. Ключевой момент: shell-пользователь ADB на обычном устройстве имеет ограниченные права, и команда adb root работает не на всех прошивках — на серийных устройствах она обычно недоступна.

Безопасная диагностика выглядит так. Сначала проверьте, что устройство корректно определилось: adb devices должен показать статус device, а не unauthorized. Затем убедитесь, что целевой путь доступен для записи — общее хранилище /sdcard/ подходит для передачи файлов, системные каталоги — нет. Пример корректной передачи:

adb push file.zip /sdcard/Download/

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

Сравнение причин и решений

Сводная таблица поможет быстро сопоставить симптом с вероятной причиной и безопасным действием:

СценарийВероятная причинаБезопасное решение
Запуск скрипта с SD-картыНет бита выполнения на FAT/exFATКопировать в домашний каталог Termux или запускать через bash
chmod на внешнем накопителеФайловая система не хранит права LinuxРаботать с файлом во внутренней памяти
Удаление файла чужого приложенияИзоляция данных (sandbox)Удалять через само приложение или очистку его данных
adb push в /systemРаздел только для чтения, нет правИспользовать /sdcard/, для системных изменений — документация модели
Отказ в системном каталоге с rootПолитика SELinuxПроверить режим SELinux; изменения — только с пониманием рисков
⚠️ Внимание: инструкции, предполагающие разблокировку загрузчика, прошивку или изменение разделов, различаются для каждой модели и могут привести к потере гарантии и данных. Выполняйте их только по официальной документации производителя вашего устройства.

Когда нужны root-права — и когда нет

Частая ошибка — считать, что любой отказ решается получением root. На практике большинство сценариев с Termux, копированием файлов и ADB решаются выбором правильного каталога и корректными командами. Root требуется лишь там, где объективно нужен доступ к чужим данным или системным разделам.

При этом root не снимает всех ограничений: SELinux в режиме enforcing продолжает блокировать операции даже для суперпользователя, а проверка целостности системы может препятствовать изменению разделов. Поэтому получение root — не универсальное лекарство, а отдельная процедура со своими рисками, которая оправдана только при чётком понимании цели.

Как проверить режим SELinux

В терминале выполните команду getenforce. Ответ Enforcing означает, что политики безопасности активны и могут блокировать операции даже с root. Ответ Permissive — политики регистрируются, но не применяются. Менять режим без необходимости не следует: это снижает защиту устройства.

Профилактика ошибки

Несколько привычек избавят от большинства столкновений с этой ошибкой. Держите рабочие скрипты и файлы во внутреннем хранилище, а не на SD-карте, если планируете их запускать. В Termux сразу после установки выполните termux-setup-storage, чтобы корректно настроить доступ к общим папкам.

При работе с ADB используйте для обмена файлами только общедоступные каталоги вроде /sdcard/Download/. И перед любыми действиями с системными файлами делайте резервную копию важных данных — это единственная гарантия восстановления при ошибке.

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

Чем Operation not permitted отличается от Permission denied?

Permission denied обычно связан с правами на конкретный файл или каталог (чтение, запись, выполнение). Operation not permitted указывает на запрет более высокого уровня: политики SELinux, файловая система без поддержки прав, раздел в режиме «только чтение» или ограничения для непривилегированного пользователя.

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

Да, в большинстве бытовых сценариев. Запуск скриптов через перенос во внутреннее хранилище Termux, вызов через bash, работа с файлами в разрешённых каталогах и корректные пути в ADB решают проблему без повышения привилегий.

Почему chmod не работает на SD-карте?

Карты памяти обычно отформатированы в FAT32 или exFAT. Эти файловые системы не поддерживают права доступа и бит выполнения Linux, поэтому команда chmod завершается ошибкой. Перенесите файл во внутреннюю память устройства, где права поддерживаются.

Ошибка появляется при удалении файла. Что делать?

Проверьте, не принадлежит ли файл другому приложению — такие объекты удаляются через само приложение или очистку его данных в настройках. Если файл на SD-карте, убедитесь, что накопитель не перешёл в режим «только чтение» из-за ошибок файловой системы; помогает проверка карты на компьютере.

Опасно ли игнорировать эту ошибку?

Сама по себе ошибка безопасна — это отказ выполнить действие, а не повреждение. Риск возникает при попытках обойти её небезопасными способами: изменением системных разделов, отключением защитных механизмов или командами от root без понимания последствий.