4. Termux: подготовка места. Bash: архивация директорий.После установки Termux становится доступна командная строка Linux и язык оболочки (обычно Bash), который можно использовать в командной строке для администрирования, а также — создавать текстовые файлы-скрипты с командами и запускать их.
Теоретически, на Bash можно написать программу любой сложности, но язык этот изначально разрабатывался именно для командной строки, поэтому имеет в основном прикладное значение для задач автоматизации рутины и управления программами-утилитами Linux.
Этим мы и займёмся.
I
Песочница Термукс — ненадёжное место для хранения исходников программ, поэтому лучше всего хранить их в основной памяти телефона, вместе с другими файлами.
Тогда можно будет легко сохранять их копии на sd-card или в облаках.
При первом запуске Термукс создаёт песочницу — директорию:
/data/data/com.termux/files
Это и есть доступная пользователям файловая система Термукс, состоящая из двух директорий:
files/
|__ usr/
|__ home/
Директория home предназначена для файлов пользователя и пользовательских настроек различных приложений;
Директория usr предназначена для общих команд/приложений/настроек Termux.
Эти директории — основные в Termux и их адреса находятся в системных переменных $HOME и $PREFIX:
Домашняя директория
$ $HOME
bash: /data/data/com.termux/files/home: Is a directory
Общие команды/приложения/библиотеки
$ $PREFIX
bash: /data/data/com.termux/files/usr: Is a directory
При открытии приложения, Термукс устанавливает $HOME текущей рабочей директорией.
Проверить это можно командами:
pwd
Вывод: /data/data/com.termux/files/home
или
echo "$PWD"
Вывод: /data/data/com.termux/files/home
А посмотреть основное содержимое этой директории можно так:
ls
II Доступ к общей памяти телефона (termux-setup-storage)
По умолчанию, в Термукс доступно только собственное изолированное пространство, но можно также дать Термукс доступ к файлам в общем хранилище телефона.
Для этого в командной строке Термукс нужно ввести команду:
termux-setup-storage
После этого в директории $HOME появится директория storage , в которой будут находится ссылки на разные участки памяти устройства.
Можно представить это в виде схемы:
storage/
|__ dcim/
|__ external-1
|__ music
|__ shared
|__ downloads
|__ movies
|__ pictures
Так реалиован доступ к фотографиям, музыке, скачанным файлам, видео и картинкам в основной памяти устройства.
Получить доступ ко всем папкам и файлам в основной памяти можно через папку-ссылку shared , которая откроет содержимое директории:
/storage/emulated/0
А ссылка external-1 — это память sd-cart, где Термукс создаёт собственное пространство, доступное с устройства без захода в Термукс, например:
/storage/68F6-C4F3/Android/data/com.termux/files
(В этом адресе цифры приведены для моего устройства — на другом устройстве они могут быть иными)
По этому адресу на флешке находится пустое место, предназначенное для директорий и файлов пользователя.
III Создание директорий ( mkdir )
В директории $HOME создадим новую директорию:
mkdir myprog
Затем перейдём в общее хранилище телефона и создадим в нём ещё одну директорию:
cd storage/shared
mkdir myscript
В директории myscript будут храниться исходники собственных программ, а в директории myprog будут создаваться и запускаться исполняемые файлы.
Полный адрес первой директории будет
/data/data/com.termux/files/home/myprog
в второй (со ссылками):
/data/data/com.termux/files/home/storage/shared/myscript
или реальный (без ссылок):
/storage/emulated/0/myscript
Если часто пользоваться такими адресами, это быстро может надоесть.
Для первого адреса есть аналог: ~/myprog
неплохо было бы создать что-то такое и для второго адреса.
IV Символическая ссылка (ln)
Создадим в директории $HOME символ«ческую ссылку с помощью команды ln -s .
Синтаксис:
ln -s <target_path> <link_name>
Где:
<target_path> — путь к целевой директории, на которую нужно создать ссылку;
<link_name> — имя создаваемой символической ссылки.
Для создания зайдём в домашнюю директорию и введём адрес и имя ссылки:
cd ~
ln -s /storage/emulated/0/myscript myscript
Посмотрим что получилось в итоге:
ls -l myscript
Вывод будет примерно таким:
lrwxrwxrwx. 1 u0_a212 u0_a212 28 Apr 28 21:16 myscript -> /storage/emulated/0/myscript
т.е. получилось то, что и ожидалось — символическая ссылка на нужную директорию.
Работать с этой ссылкой можно также как и с обычной директорией, за исключением случая если нужно будет её стереть:
rm myscript удалит ссылку, а
rm -r myscript удалит и ссылку и директорию на которую эта ссылка указывает.
После создания ссылки, к обеим директориям можно будет обращаться по простому:
cd ~/myprog && ls
cd ~/myscript && ls
Надеюсь это немного упростит навигацию и написание Makefile в будущей работе.
V Архивация директорий ( zip )
Общая память телефона — более надёжное место для хранения исходных текстов программ, чем песочница Термукс, но время от времени желательно было бы копировать директорию myscript в облачное хранилище.
Это можно делать, например, файловым менеджером: зайти в приложение, выбрать папку и скопировать в нужное облако.
Но если представить себе, что мы написали большое количество исходных текстов программ, которые разложены по своим папкам, то процесс загрузки этой стаи файлов в облако может сильно затянуться.
Поэтому перед копированием, директорию myscript желательно превратить в один файл (что значительно ускорит загрузку в облако) с помощью архиватора.
Для начала нужно установить в Термукс утилиты:
pkg update
pkg upgrade
pkg install zip unzip
и после установки будут доступны:
команда zip — для создания ZIP‑архивов;
команда unzip — для распаковки ZIP‑архивов.
Далее создадим в общем хранилище директорию zip для будущих архивов:
cd ~/storage/shared && mkdir zip
Чтобы создать ZIP‑архив из директории myscript со всем содержимым, используем команду zip с флагом -r (рекурсивное копирование — включает все файлы и поддиректории):
zip -r /storage/emulated/0/zip/myscript.zip /storage/emulated/0/myscript/
Разбор команды:
zip — вызов утилиты для создания архивов;
-r — флаг рекурсии: гарантирует, что будут заархивированы не только файлы верхнего уровня, но и все подкаталоги с их содержимым;
myscript.zip — имя создаваемого архива;
~/myscript/ — путь к директории, которую нужно заархивировать.
Проверка результата
Чтобы убедиться, что архив создан корректно и содержит нужные файлы, просмотрите его содержимое:
unzip -l ~/storage/shared/zip/myscript
Вывод:
Archive: /storage/emulated/0/zip/myscript.zip
Length Date Time Name
--------- ---------- ----- ----
0 2026-04-29 20:28 storage/emulated/0/myscript/
--------- -------
0 1 file
Из этого можно сделать ложный вывод, что архив содержит одну директорию и имеет размер 0 байт.
Посмотрим информацию о самом файле:
ls -l /storage/emulated/0/zip/myscript.zip
-rw-rw----. 1 root everybody 206 Apr 29 20:29 /storage/emulated/0/zip/myscript.zip
Как видно, длинна архива 206 байт, а если распаковать его например файловым менеджером, то выяснится, что архив состоит из вложенных друг в друга пустых директорий: storage , emulated , 0 , myscript .
Так получается из-за особенностей работы архиватора.
Нам эти лишние уровни вложенности не нужны, поэтому попробуем архивировать нашу директорию по—другому.
VI Скрипт на Bash
Разделим команду на 2 части:
cd ~/storage/shared && zip -r zip/myscript.zip myscript
Теперь архив будет содержать только одну пустую директорию myscript .
Хотелось бы, чтобы имена zip-файлов отличались друг от друга временем их создания, чтобы не запутаться в них.
Для этого лучше написать программу на Bash, чтобы не вводить каждый раз одни и теже адреса вручную.
Создадим в директории myscript директорию bash , перейдём в неё и создадим файл zip-myscript :
cd ~/myscript
mkdir bash
cd bash
touch zip-myscript
Собственно говоря, для написания скриптов в директории, находящейся в общем хранилище телефона, Termux и не нужен.
Можно воспользоваться любым текстовым редактором, чтобы создать новый файл по нужному адресу.
Запишем в файл zip-myscript следующее:
#адрес внутренней памяти
cd /storage/emulated/0
zip -r zip/myscript_$(date +"%Y-%m-%d_%H-%M-%S").zip myscript
Теперь можно будет войти в Termux и запустить его:
bash ~/storage/shared/myscript/bash/zip-myscript
VII Ещё один скрипт
Собрать в один файл можно и несколько папок, например хранилища моих заметок в разных блокнотах.
Создадим в директории /storage/emulated/0/myscript/bash/ файл zip-mynote :
#адрес внутренней памяти
cd /storage/emulated/0
zip -r zip/mynote_$(date +"%Y-%m-%d_%H-%M-%S").zip Notepad Notepad2 Notepad3 Notepad4 Note2 Note3 Note4 Note5 fastnote fastnote2 fastnote3 fastnote4 Obsidian ZettelNotes
Запускаться из Termux он будет так:
bash ~/storage/shared/myscript/bash/zip-mynote
У этих двух скриптов есть один серьёзный недостаток – они зависят от сторонней утилиты zip , которою установить в **droid-ы видимо невозможно.
Поэтому скрипты будут исполняться только из Termux и дальше мы спрячем их вовнутрь Termux, сделаем их исполняемыми и превратим в команды, которые можно будет вызывать из любого места Termux и даже с рабочего стола телефона, не заходя в Термукс.
VIII Исполняемые скрипты (chmod)
Исполняемыми файлы можно сделать только внутри песочницы Термукс.
Для этого нужно скопировать скрипты во внутреннее пространство, дописать в их начало шэбанги и дать им права на исполнение.
Начнём с шебангов.
Изменим оба скрипта в директории mysript/bash таким образом:
Файл zip-mynote :
#!/data/data/com.termux/files/usr/bin/bash
#- Program: `zip-mynote`
#+ Создаёт zip-архив из указанных директорий
#+ в общем хранилище
#+ Требуeтся утилитa `zip`
#адрес внутренней памяти
cd /storage/emulated/0
zip -r zip/mynote_$(date +"%Y-%m-%d_%H-%M-%S").zip Notepad Notepad2 Notepad3 Notepad4 Note2 Note3 Note4 Note5 fastnote fastnote2 fastnote3 fastnote4 Obsidian ZettelNotes
Файл zip-myscript :
#!/data/data/com.termux/files/usr/bin/bash
#- Program: `zip-myscript`
#+ Создаёт zip-архив из указанной директории myscript
#+ в общем хранилище
#+ Требуeтся утилитa `zip`
#адрес внутренней памяти
cd /storage/emulated/0
zip -r zip/myscript_$(date +"%Y-%m-%d_%H-%M-%S").zip myscript
Здесь в начало текстов скриптов добавлены строки комментариев, которые в языках оболочек начинаются со знака решётки и далее могут содержать любой текст и даже смайлы (последнее не рекомендуется).
Исключение — строка с символами #! (шэбанг).
Такая строка в скрипте бывает только одна и обычно помещается в самое начало.
Она указывает оболочке, какую программу-интерпретатор нужно запустить для исполнения дальнейшего текста скрипта (в нашем случае bash).
После символов #! сразу без пробела записывается полный адрес программы-интерпретатора.
Зайдём в Термукс и создадим в директории myprog директорию bash :
cd ~/myprog && mkdir bash
скопируем в неё оба скрипта:
cd ~/storage/shared/myscript/bash && cp zip-mynote zip-myscript ~/myprog/bash/
Проверим:
ls ~/myprog/bash
Если файлы успешно скопировались, выдадим им права на исполнение:
chmod +x ~/myprog/bash/zip-mynote ~/myprog/bash/zip-myscript
Теперь можно их запускать просто набрав в командной строке их адрес:
~/myprog/bash/zip-mynote && ~/myprog/bash/zip-myscript
Если всё сделано правильно то в папке zip в общем хранилище появятся 2 файла–архива с текущим временем в именах.
Всё это конечно хорошо, но набирать длинные адреса непроизводительно, поэтому сделаем из этих скриптов обычные для Linux команды.
IX Собственные команды
Команды в Linux — это и скрипты, и бинарники и ссылки, которые находятся в директориях, указанных в переменной окружения $PATH.
Создадим в домашней директории новую директорию bin для наших собственных команд:
mkdir ~/bin
и переместим в неё будущие команды:
mv ~/myprog/bash/zip-note ~/myprog/bash/zip-script ~/bin
Добавить директорию ~/bin в переменную окружения $PATH можно
|