Termux крок за кроком (Частина 2)

В минулої частини ми з вами познайомилися з базовими командами Termux'а, налаштували SSH з'єднання з ПК, навчилися створювати alias'и та встановили кілька корисних утиліт. Цього разу нам доведеться зробити крок далі, ми з вами:

  • дізнаємося про Termux:API
  • встановимо Python і nano, а також напишемо Hello, world! на Python
  • дізнаємося про bash-скрипти і напишемо скрипт з використанням Termux:API
  • використовуючи bash-скрипт, Termux: API та Python напишемо просту програмку

Оскільки ми тепер розуміємо, що роблять команди, що вводяться, то з наступного кроку я не так детально розписуватиму кожну дію, але там де можуть бути труднощі, пояснюватиму обов'язково.

Я часто застосовую alias'и, тому скорочення, що використовуються в цій частині, показані тут:

alias updg='apt update && apt upgrade'
alias py='python'

План готовий, можна розпочинати! І звичайно ж не забувайте про «чарівний Tab» (Див. Частину 1).

Крок 4

Поринаємо в кролячу нору Termux:API

API як багато в цьому слові для серця кодера злилося

Якщо не торкатися теми Termux:API, то всі наші кроки можна було звести до простого переказу якоїсь брошури на кшталт «Лінукс для чайників», як було справедливо помічено в коментарях до першої частини.

Для початку встановимо Termux:API з Google Play Market'а (після не завадить перезапустити Termux):

Termux крок за кроком (Частина 2)

Далі нам потрібно встановити пакет API у консолі Termux'а:

updg # Не забываем про alias’ы
apt install termux-api

Для експериментів я використовую Android 5.1.1, для власників Android 7 потрібно «захистити» Termux: API, зайшовши в 'Налаштування' > 'Захищені програми', інакше виклики API, такі як termux-battery-status, будуть зависати. (Див. wiki проекту)

Тепер варто ближче познайомитись із набутими можливостями. Найсвіжіший та докладний опис Termux:API можна знайти на wiki проекту. Я ж постараюся вибрати найнаочніше та найцікавіше, що дозволить набити руку для самостійної роботи надалі.

Декілька прикладів Termux:API

  • termux-battery-status
    Повертає стан батареї
    Termux крок за кроком (Частина 2)
  • termux-brightness
    Встановлює яскравість екрана від 0 до 255
    Termux крок за кроком (Частина 2)
  • termux-toast
    Показує тимчасове спливаюче повідомлення
    Termux крок за кроком (Частина 2)
  • termux-torch
    Включає ліхтарик
    Termux крок за кроком (Частина 2)
  • termux-wifi-scaninfo
    Повертає інформацію про останнє сканування мереж Wi-Fi
    Termux крок за кроком (Частина 2)

Неважко помітити, що значення, що повертаються, є рядками, словниками, списками словників, загалом типами даних, з якими чудово працює Python, тому наступним кроком ми його встановимо.

Крок 5

Встановимо Python та nano

Для встановлення Python'а пишемо в терміналі:

updg
apt install python
apt install python2

Тепер у нас встановлено 2 та 3 Python.

За час роботи над статтею, я відкрив для себе ще один текстовий редактор nano, який сподобався мені більше, ніж vim, давайте його встановимо:

apt install nano

Користуватися ним простіше ніж vim'ом, та nano має більш дружній інтерфейс. На Android пристрої все ж таки зручніше vim.

HelloWorld на Python в Termux

За великим рахунком, можна було обійтися і без цього пункту, але поставити Python в Termux і не написати HelloWorld, на мій погляд, моветон.

Я не ставлю за мету вчити когось Python'у, так що не знаючі можуть просто скопіювати код (або почати вивчати самостійно, благо літератури вистачає), а знаючі можуть і самі щось навіяти. А я під шумок ще покажу спосіб вводити текст у терміналі без редактора.

cat >hello-world.py     
# Если не указывать источник (напоминаю cat 1.txt > 2.txt)
# то cat будет брать данные из стандартного потока ввода,
# проще говоря вводимое с клавиатуры.

str = ‘Hello, world!’ # присваиваем переменной str значение "Hello, world!"
print (str) # выводим на экран значение из переменной str

# Ctrl + D закончить ввод и записать файл (hello-world.py)

py hello-world.py # запускаем файл (py это alias от python)

Termux крок за кроком (Частина 2)

Якщо в процесі введення ви не помітили помилку і вже натиснули Enter, то перейти на рядок вище не вийде, для цього закінчите введення натиснувши Ctrl+D (можна взагалі перервати Ctrl+Z) і повторіть все з початку. Оскільки ми використовували '>', то файл буде переписаний повністю. З цієї причини не рекомендую використовувати такий метод введення, якщо ви не впевнені, що напишете код відразу без помилок.

Крок 6

Bash-скрипти

Bash-скрипти це чудовий спосіб автоматизації роботи з терміналом. Скрипт є файлом з розширенням .sh (розширення не обов'язково) містить набір команд терміналу частина з яких ми вже вивчили. Ось список більшості команд, все має працювати, але зверніть увагу, що це список для «дорослого» Linux'а, а не для Termux'а, а ось просто шикарний матеріал за bash-скриптами.

За допомогою скриптів можна автоматизувати майже всі монотонні дії. Напишемо найпростіший bash-скрипт, що виводить значення зі створеної ним же змінної, я знову скористаюся cat'ом, ви ж можете використовувати нормальний текстовий редактор, а ті, хто особливо бажає себе потренувати, можуть використовувати echo.

cat >test.sh

export str="Привет, Хабр!"
# export создает переменную str
# и присваивает ей значение "Привет, Хабр!"
# Не ставьте пробелы до и после ‘=’

echo $str # Для обращения к переменным перед ними ставится ‘$’

# Ctrl + D

# ./test.sh для запуска скрипта, но если это сделать сейчас то будет ошибка
# для избавления от ошибки нужно сделать файл test.sh исполняемым

chmod +x test.sh
# chmod изменяет права доступа (+ добавить / - убрать)
# ‘+x’ означает что мы делаем файл исполняемым

./test.sh # Запускаем выполнение нашего скрипта

Termux крок за кроком (Частина 2)

Bash-скрипт з Termux: API

Давайте напишемо вже щось відмінне від горезвісних HelloWorld'ів, але так само марне. Наш скрипт буде:

  1. виконувати запит API termux-battery-status
  2. зберігати отримані дані у файл test.txt
  3. виводити дані з файлу на екран
  4. виконувати написану раніше програму hello-world.py
  5. отримані від програми дані записувати у файл test.txt
  6. виводити дані з файлу на екран
  7. переносити дані з файлу в буфер обміну
  8. виводити на екран вміст буфера обміну
  9. виводити спливаюче повідомлення з даними з буфера обміну

Спочатку створимо папку для роботи та скопіюємо туди hello-world.py як test.py, створимо в цій папці файли test.sh та test.txt:

mkdir bashscript

cat hello-world.py >> bashscript/test.py

cd bashscript/

touch test.sh test.txt # touch создает файлы

chmod +x test.sh

Тепер будь-яким зручним способом у файл test.sh запишемо скрипт:

#!/bin/bash

# В начале каждого скрипта принято ставить #! (называется шебанг)
# после идет указание на шелл для которой написан скрипт

clear # очистим окно терминала

termux-battery-status > test.txt # пункты 1 и 2 из намеченного функционала

cat test.txt # пункт 3

python test.py > test.txt # пункт 4 и 5

cat test.txt # пункт 6

cat test.txt | termux-clipboard-set # пункт 7
# | это конвейер. переносит данные с выхода одного потока на вход другого

termux-clipboard-get # пункт 8

termux-clipboard-get | termux-toast # пункт 9

Тепер перебуваючи в папці bashscript пишемо ./test.sh спостерігаємо в терміналі на Android пристрої:

Termux крок за кроком (Частина 2)

Ось ми й написали запланований bash-скрипт. Можна розбавити його виведенням у консоль інформації щодо виконання кожної дії (за допомогою echo), це залишу для читачів.

Крок 7

Зробимо хоч щось корисне

Щодо корисне

Сформулюємо техзавдання
Програма повинна після запуску поміщати в буфер обміну випадковий рядок з файлу і сповіщати про це спливаюче повідомлення.

За основу візьмемо bash-скрипт, випадковий рядок з файлу витягуватимемо за допомогою підпрограми на Python'і. Складемо план роботи скрипту:

  1. Запустити підпрограму
  2. Передати результат роботи підпрограми у буфер обміну
  3. Вивести спливаюче повідомлення

Визначимося з назвами директорії та файлів програми:

  • папка rndstr у домашній директорії
    • source - файл з якого будемо брати рядки
    • rndstr.py — підпрограма, що виводить у консоль випадковий рядок з файлу source
    • rndstr.sh - файл скрипту

Створюємо директорію програми і перемістившись у ній створюємо там файли.

Перші два пункти плану скрипту можна об'єднати конвеєром, у результаті, використовуючи Termux:API отримуємо:

#!/bin/bash

python ~/rndstr/rndstr.py | termux-clipboard-set # 1 и 2 пункты плана работы

termux-toast "OK" # 3 пункт. Выводим всплывающее сообщение "ОК"

У файл source ви можете помістити будь-який текст, логічно розділений на рядки, я вирішив помістити афоризми:

Лістинг файлу sourse

Искренность не есть истина. Л. Лавель
Терпи и воздерживайся. Эпиктет
Благородно только то, что бескорыстно. Ж. Лабрюйер
Будь благоразумно отважным. Б. Грасиан
Доброта лучше красоты. Г. Гейне
Для великих дел необходимо неутомимое постоянство. Ф.Вольтер
Если ты хочешь, чтобы тебе всегда угождали, прислуживай себе сам. Б. Франклин
Чрезмерная скромность есть не что иное, как скрытая гордость. А. Шенье
Очень умным людям начинают не доверять, если видят их смущение. Ф. Ницше
Бедность указывает на отсутствие средств, а не на отсутствие благородства. Д. Боккаччо
Нужно остерегаться доведения скромности до степени унижения. А. Бакиханов
Кто отказывается от многого, может многое себе позволить. Ж. Шардон
Когда нам платят за благородный поступок, его у нас отнимают. Н. Шамфор
Не получить вовсе - не страшно, но лишиться полученного обидно. Клавдий Элиан
Легче переносить терпеливо то, что нам не дано исправить. Гораций
Устаешь ждать, но насколько хуже было бы, если бы ждать стало нечего. Б. Шоу
Все приходит вовремя, если люди умеют ждать. Ф. Рабле
Своим терпением мы можем достичь большего, чем силой. Э. Берк
Надо уметь переносить то, чего нельзя избежать. М. Монтень
Кто в деле смел, тот слов не устрашится. Софокл
Я не люблю сражаться, я люблю побеждать. Б. Шоу
Затравленный и прижатый к стене кот превращается в тигра. М. Сервантес
Достойный человек не идет по следам других людей. Конфуций
Великий ум проявит свою силу не только в умении мыслить, но и в умении жить. Р. Эмерсон
Слава - товар невыгодный. Стоит дорого, сохраняется плохо. О. Бальзак
Сдержанность и уместность в разговорах стоят больше красноречия. Ф. Бэкон
Кто молчать не умеет, тот и говорить, не способен. Сенека Младший
Хорошие манеры состоят из маленьких жертв. Ф. Честерфилд
Добрый человек не тот, кто умеет делать добро, а тот, кто не умеет делать зла. В. Ключевский
Не произносите бесповоротных суждений! Августин
Ничего слишком! Солон

Нам залишилося створити підпрограму випадковий рядок з файлу source.
Розпишемо алгоритм роботи підпрограми:

  1. Відкриваємо файл source
  2. Вважаємо кількість рядків у відкритому файлі
  3. Закриваємо файл (нічого його зайвий час відкритим тримати)
  4. Генеруємо випадкове ціле число в межах рядків файлу source
  5. Відкриваємо файл source
  6. Виводимо рядок під номером згенерованого числа
  7. Закриваємо файл

Реалізуємо алгоритм на Python (я пишу під Python 3.7):

import random  #  импортируем для генерации случайных чисел
import os  #  для получения пути

path = os.path.abspath(__file__)  #  получаем прямой путь до файла rndstr.py
path = os.path.dirname(path)  #  преобразуем в путь до директории
path = path  + '/source'  #  преобразуем в путь до файла source

f = open(path)  #  открываем файл
i = 0  #  обнуляем счетчик
for str in f: i+=1  #  считаем строки файла
f.close  #  закрываем файл

j = int(round(i * random.random()))  #  генерируем целое случайное число от 0 до i

f = open(path)  #  открываем файл
i = 0  #  обнуляем счетчик
for str in f:  #  перебираем строки из файла
    if i == j:  #  если счетчик строк равен сгенерированному числу
        print (str, end='')  #  выводим строку без перехода на новую
        break  #  выходим из цикла
    i+=1  #  увеличиваем счетчик на 1
f.close  #  закрываем файл

Після того, як файли створені та записані, потрібно дати права на виконання файлу rndstr.sh, і створити або для швидкого запуску.

alias rnst="~/rndstr/rndstr.sh"

Тепер ввівши в терміналі rnst ми отримаємо в буфер обміну випадковий афоризм, який, наприклад, можна використовувати у листуванні.

Ось ми й написали хоч щось корисне. Щодо корисне.

Ps

Я навмисно в останньому кроці не став наводити скріншоти і не докладно розібрав деякі дії, розписавши тільки вміст файлів, щоб у читачів була можливість попрацювати самостійно.

На цьому «Termux крок за кроком», гадаю, варто закінчити. Звичайно ж це тільки перші кроки, але тепер ви можете рухатися вперед самі.

Спочатку я планував показати в цьому циклі як користуватись nmap, sqlmap, але й без мене вже багато статей на цю тему. Якщо є бажання, щоб я продовжив цикл «Termux крок за кроком», то нижче є опитування, а в коментарях можете запропонувати про що ще написати.

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.

Продовжити "Termux крок за кроком"?

  • Так

  • Ні

Проголосували 2 користувача. Утриманих немає.

Джерело: habr.com

Додати коментар або відгук