Какие оболочки доступны в Android AOSP по умолчанию – mksh и особенности работы

Если вы когда-либо работали с Android через ADB или терминальные приложения, наверняка сталкивались с ограничениями встроенной оболочки. В отличие от десктопных дистрибутивов Linux, здесь всё устроено иначе – и понимание этого сэкономит вам время при настройке устройств или разработке под платформу.

В основе Android лежит модифицированная версия ядра Linux, но пользовательское пространство существенно отличается. Система по умолчанию включает только один shell-интерпретатор – mksh (MirBSD Korn Shell), который находится по пути /system/bin/sh. Это не классический Bourne shell (кстати, оригинальный код Bourne устарел ещё в 90-х), а современная реализация с поддержкой функций из Korn shell. Его выбрали за компактность, соответствие POSIX-стандартам и лицензию BSD, что критично для открытой экосистемы Android.

Как проверить текущую оболочку и её возможности

Подключившись к устройству через ADB или запустив терминальное приложение, выполните:

echo $SHELL  
which sh  
sh --version  

В выводе вы увидите путь /system/bin/sh и информацию о версии mksh. Например:

mksh @(#)MIRBSD KSH R57 2020/02/02  

Важно: не путайте эту оболочку с bash или zsh – их нет в AOSP по умолчанию. Попытки вызвать bash без предварительной установки приведут к ошибке «command not found».

Почему в Android нет других shell?

Причин несколько:

  • Минимализм. AOSP оптимизирован для работы на устройствах с ограниченными ресурсами. Даже mksh занимает всего ~200 КБ в сжатом виде.
  • Безопасность. Каждый дополнительный компонент – потенциальная уязвимость. Ограничение до одной оболочки снижает поверхность атак.
  • Лицензирование. mksh распространяется под лицензией BSD, которая совместима с Apache 2.0 (основной для Android), в отличие от GPL-лицензий некоторых других оболочек.

Как добавить bash, zsh или fish

Если функциональности mksh недостаточно, есть три варианта:

1. Установка через Termux. Этот эмулятор терминала предоставляет собственное окружение с пакетным менеджером. После установки из Google Play выполните:

pkg install bash

Теперь bash будет доступен внутри Termux, но не системно.

2. Ручная загрузка бинарников. Скомпилируйте выбранный shell для архитектуры ARM/AArch64, затем скопируйте его в /system/bin (требуются root-права). Пример для bash:

adb push bash /system/bin/ 
adb shell chmod 755 /system/bin/bash

Учитывайте, что это может нарушить целостность системы (особенно на устройствах с Verified Boot).

3. Кастомные прошивки. Например, LineageOS иногда включает дополнительные утилиты. Проверяйте документацию конкретной сборки.

    Особенности mksh: что умеет и чего не хватает

    По сравнению с bash, mksh проще, но для базовых задач его хватает. Вот что стоит знать:

    • Поддерживает автодополнение через Tab, но не подсвечивает синтаксис.
    • Нет алиасов по умолчанию (их можно добавить вручную в ~/.mkshrc).
    • Работает с массивами и арифметическими операциями:
      arr=(1 2 3)  
      echo $(( arr[0] + 5 )) # вернёт 6
    • Не поддерживает declare -A для ассоциативных массивов (в отличие от bash 4+).

    Чтобы сделать работу комфортнее, создайте файл настроек:

    adb shell "echo 'alias ll="ls -l""' > /data/local/.mkshrc""

    Теперь при каждом запуске sh будет загружать этот конфиг.

    Частые проблемы и решения

    Проблема: После установки bash команда не распознаётся.
    Решение: Убедитесь, что бинарник имеет права на выполнение (chmod +x) и находится в одном из каталогов $PATH. Проверьте переменную:

    echo $PATH

    Проблема: Скрипты, написанные для bash, не работают.
    Решение: В первой строке скрипта укажите явный путь к интерпретатору:

    #!/system/bin/sh

    Или, если используете bash из Termux:

    #!/data/data/com.termux/files/usr/bin/bash

    Проблема: Ошибка «Permission denied» при попытке записи в /system.
    Решение: Remount раздел в режиме чтения-записи (требуется root):

    adb root  
    adb remount

    В заключение: хотя mksh может показаться ограниченным, он полностью покрывает потребности системных скриптов Android. Для интерактивной работы я рекомендую Termux – он даёт полноценное окружение без вмешательства в системные разделы. Если же хочется экспериментов, пробуйте кастомные прошивки, но всегда делайте бэкапы данных.

    Добавить комментарий

    Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

    Новое
    Интересное