"Мобильная" разработка. [Bash и основные утилиты терминала]

·

12 min read

sh и bash

sh (Bourne Shell) и bash (Bourne Again SHell) оба являются командными интерпретаторами (оболочками) для Unix-подобных систем, но между ними есть ряд ключевых различий:

  1. История:

    • sh. Один из первых командных интерпретаторов для Unix, созданный Стивеном Борном в 1970-х годах.

    • bash. Создан Брайаном Фоксом в рамках проекта GNU в конце 1980-х годов как свободная замена sh.

  2. Функциональные возможности:

    • bash содержит все особенности sh, плюс множество улучшений и дополнений. Например:

      • Поддержка истории команд.

      • Поддержка автодополнения команд по нажатию Tab.

      • Расширенные возможности тестирования с [[ ]] вместо [ ].

      • Функции и массивы.

      • Улучшенный синтаксис для управления заданиями.

  3. Совместимость:

    • bash обычно работает в режиме совместимости с sh, когда запущен как sh, что позволяет ему исполнять скрипты, написанные для sh. Однако есть некоторые особенности поведения bash, которые могут не совпадать с традиционным sh.
  4. Популярность и распространение:

    • bash стал стандартной оболочкой во многих Linux-дистрибутивах и macOS (хотя в последних версиях macOS заменён на zsh).

    • sh часто ссылается на другие оболочки в современных системах. Например, в Debian sh на самом деле является символической ссылкой на dash.

  5. Скрипты:

    • Если скрипт начинается с #!/bin/sh, он должен быть совместим с sh и не использовать особенности bash, если только не известно, что /bin/sh на самом деле является bash (некоторые дистрибутивы могут заменять /bin/sh на bash).

В общем, bash - это более современная и функциональная оболочка по сравнению с sh, но, тем не менее, sh до сих пор продолжает оставаться важным стандартом совместимости. В дальнейшем мы будем использовать в Termux bash, поэтому ниже рассмотрим все основные команды bash, которые нам понадобятся.

Termux

Как говорилось ранее, Termux - это приложение-эмулятор терминала. Именно его мы будем использовать для нашей работы.

Termux использует bash как свою оболочку терминала. Мы рассмотрим здесь далеко не все команды bash - я расписал здесь только те, которые с наибольшей вероятностью понадобятся вам в будущем. К тому же, я крайне не рекомендую вам сейчас заучивать их все, так как справка по ним всегда доступна, а с опытом большая часть команд вообще станет использоваться на автомате. Советую просто пройтись по ним глазами и сразу же перейти к выполнению размещённого в конце домашнего задания, что сразу же даст куда более основательное понимание работы с терминалом.

Основные команды Bash

В общем виде команда в bash имеет такой синтаксис:

command [OPTIONS] [ARGUMENTS]
  • [OPTIONS] - набор опций, которые обычно начинаются со знака "минус" - для короткой версии опции (например, -a) или с двух знаков "минус" -- для полного названия опции (например, --all).

  • [ARGUMENTS] - аргументы к опциям или самой команде.

Клавиши быстрого доступа

  • Ctrl + C: прервать текущую команду. # Также Ctrl + C можно использовать, чтобы прервать текущий ввод длинной команды, которую вы больше не хотите выполнять.

  • Ctrl + Z: приостановить текущий процесс (можно вернуть на передний план с помощью fg). #

  • Ctrl + D: завершить текущую сессию.

  • Ctrl + L: очистить экран.

  • Ctrl + R: обратный поиск в истории команд.

  • Ctrl + A: перейти в начало строки.

  • Ctrl + E: перейти в конец строки.

  • Нажмите Tab после начала ввода имени файла, директории или команды, и терминал попробует автоматически его дополнить.

Навигация

  • ls: показать содержимое директории: не скрытые папки и файлы.
ls

ls пример работы

Чтобы увидеть скрытые папки и файлы (в Unix системах они начинаются с точки в названии файла), необходимо добавить аргумент -a к команде.

ls -a

ls -a

Если добавить аргумент -l, команда выведет каждый файл/папку отдельной строкой. Можно скомбинировать с аргументом -a.

ls -la

ls -la

  • pwd: вывести текущую рабочую директорию.
pwd

pwd

  • cd: изменение директории. По умолчанию вы находитесь в домашней папке ~, а изменить директорию можно, передав новый путь к команде cd newFolder, cd newFolder/subFolder/subSubFolder.
cd folderA

cd/pwd

Чтобы вернуться назад, можно использовать cd - - вы вернётесь к папке, в которой находились до предыдущего вызова cd, а вызвав cd .., вы перейдёте к родительской папке.

cd -
cd ..

cd .., cd -

Файловые операции

  • touch: создать пустой файл. Для применения достаточно просто дописать имя файла touch newFile.
touch newFile

touch newFile

  • mkdir: создать директорию. Работает аналогично touch.
mkdir subFolderB

mkdir

Если необходимо создать целую вложенность из папок, можно использовать аргумент -p:

mkdir subFolderC/subSubFolderD -p

mkdir -p

  • cp: копировать файлы или директории. Для использования команды нужно передать путь к старому файлу и путь к новому файлу.
cp oldPath newCopy

cp

Для копирования папок необходим аргумент -r в конце команды.

  • mv: переместить или переименовать файлы/директории. Аналогичен cp, только он переименовывает или перемещает файлы вместо копирования
mv oldFileName newFileName

mv

  • rm: удалить файлы или директории. Чтобы удалить файл, достаточно передать к нему путь, а для удаления папки потребуется передать аргумент -r.
rm subFolderA -r
rm fileName

rm

  • rmdir: удалить пустую директорию. Аналогичен rm.
rmdir subFolderB

rmdir

Текстовые редакторы

  • nano: простой текстовый редактор. Для того чтобы отредактировать новый или уже существующий файл, достаточно ввести nano path/to/file, и нам откроется редактор nano:
nano fileToEdit

nano

Теперь мы можем вносить наши изменения в файл, практически как в обычно текстовом редакторе:

nano

Снизу нам доступна панель действий (справка, поиск, замена, выход и другие):

nano

Чтобы вызвать какое-либо действие (например, выведем справку), нужно зажать CTRL и соответствующую клавишу:

nano

И получаем нашу справку:

nano

Чтобы сохранить файл, нужно нажать CTRL + x.

nano

Выведется вопрос, желаете ли вы сохранить ваши изменения. Если нажать N, изменения не сохранятся, а редактор закроется. CTRL + c вернёт вас в режим редактирования, а Y - сохранит ваши изменения.

nano

Нажимаем на Y, чтобы сохранить файл. Дополнительно редактор спросит, как назвать файл, который вы хотите сохранить. Если всё указано правильно, достаточно нажать Enter:

nano

И мы можем воспользоваться командой cat, чтобы вывести новое содержимое файла:

cat fileToEdit

nano cat

  • vi или vim: расширенный текстовый редактор.

  • emacs: мощный текстовый редактор с множеством функций.

Для работы с vi/vim и emacs крайне рекомендую рассмотреть их документации: vim, emacs, так как для раскрытия всех нюансов их работы и взаимодействия потребуются целые отдельные статьи, ориентированные на начинающего пользователя. В то же время nano вам будет более чем достаточно для решения большинства запросов по редактуре текста в терминале.

Работа с текстом

  • echo: вывести строку текста.
echo Hello World!

echo

  • cat: вывести содержимое файла.
cat fileToEdit

nano cat

  • less и more: аналогично cat, просмотр содержимого большого файла постранично. Удобен для просмотра логов:
less article.md
more article.md

less

Чтобы выйти, необходимо нажать q.

  • grep: поиск в тексте. Синтаксис команды:
grep [OPTIONS]... PATTERNS [FILES]...

Больше про паттерны и опции можно прочитать здесь. Для примера поищем 'ChatGPT' в файле article.md:

grep --color ChatGPT article.md

grep

Информация о системе

  • man: просмотреть руководство по команде. Вам скорее всего понадобится установить эту команду:
pkg install man

Пример использования достаточно прост:

man cat

man

  • df: показать доступное дисковое пространство. Аргумент -h сделает вывод более читабельным:
df -h

df

  • du: подсчёт занятого места в директориях. Аргумент -h сделает вывод более читабельным:
du -h

du

Сеть

  • ping: проверка соединения с хостом.
ping [host]
ping google.com

ping

  • netstat: сетевая статистика.
netstat

netstat

  • ifconfig (или ip в некоторых дистрибутивах): конфигурация сетевого интерфейса.
ifconfig

ifconfig

Работа с архивами

  • tar: архивация и разархивация файлов. Если у вас есть несколько файлов или каталогов, которые вы хотите заархивировать в один файл, вы можете использовать следующую команду:
tar -cvf archive_name.tar file1 file2 dir1

Где:

  • c означает создание архива.

  • v означает режим подробного вывода (verbose), чтобы увидеть, какие файлы добавляются.

  • f говорит tar использовать следующий аргумент как имя файла архива.

Извлечение файлов из архива:

tar -xvf archive_name.tar
  • zip, unzip: работа с ZIP-архивами. Аналогичен tar, но проще и создает .zip архивы. Архивация нескольких файлов:
zip archive_name.zip file1.txt file2.txt file3.txt

Архивация каталога (с включением всех файлов и подкаталогов):

zip -r archive_name.zip directory_name/

Исключение файлов при архивации:

zip archive_name.zip directory_name/ -x \*exclude.txt

Добавление файлов в существующий архив:

zip -u archive_name.zip new_file.txt

Создание зашифрованного zip-архива (вам будет предложено ввести пароль):

zip -e archive_name.zip file.txt

Извлечение всех файлов из архива:

unzip archive_name.zip

Извлечение определённых файлов из архива:

unzip archive_name.zip file1.txt file2.txt

Просмотр содержимого архива без извлечения:

unzip -l archive_name.zip

Извлечение файлов в определённый каталог:

unzip archive_name.zip -d destination_directory/

Управление процессами

  • ps: просмотр активных процессов.
ps

ps

  • kill: завершение процесса.
kill [signal] pid
kill -9 11689

-9 - сигнал для прерывания процесса.

kill

Управление пакетами (зависит от дистрибутива):

  • pkg: менеджер пакетов Termux. Менеджер пакетов нужен, чтобы устанавливать новые пакеты, обновлять и удалять старые, эдакий терминальный Play Store. Перед установкой новых пакетов крайне рекомендуется обновить существующие пакеты командой:
pkg upgrade

В процессе обновления/установки пакетный менеджер может запросить дополнительные подтверждения. Чтобы согласиться, нужно нажать Y, а потом Enter:

pkg

Также возможны дополнительные вопросы во время обновления определённых пакетов. Рекомендую использовать опцию по умолчанию и просто прожать Enter:

pkg

Чтобы получить справку, нужно использовать команду help, например:

pkg help

pkg help

Чтобы установить новый пакет, нужно использовать команду install, например:

pkg install nodejs

Также дополнительное согласие может потребоваться во время установки:

pkg install

Теперь мы можем воспользоваться новыми пакетами:

node

Чтобы удалить существующий пакет, нужно использовать команду uninstall, например:

pkg uninstall nodejs

Также дополнительное согласие может потребоваться во время удаления:

pkg uninstall

Теперь команда недоступна:

pkg

Поиск файлов

  • find: поиск файлов в директории. Поиск файлов с именем "example.txt" в каталоге /home/user и во всех его подкаталогах:
find /home/user -name "example.txt"

Поиск каталогов с именем "mydir" в каталоге /home/user:

find /home/user -type d -name "mydir"

Поиск файлов в каталоге /home/user, размер которых превышает 100 МБ:

find /home/user -type f -size +100M

Поиск по содержимому с помощью grep:

find /home/user -type f -exec grep -l "my_search_term" {} \;

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

Управление разрешениями

Управление разрешениями является ключевой частью безопасности. Разрешения определяют, кто и как сможет взаимодействовать с файлами и каталогами.

Типы разрешений

  • Read (r): разрешение на чтение содержимого файла или просмотр содержимого каталога.

  • Write (w): разрешение на изменение содержимого файла или добавление/удаление файлов в каталоге.

  • Execute (x): разрешение на выполнение файла (если это исполняемый файл) или вход в каталог.

Три категории пользователей

  • Owner (u): владелец файла или каталога.

  • Group (g): группа пользователей, ассоциированная с файлом или каталогом.

  • Others (o): все остальные пользователи.

Команды для управления разрешениями

  1. chmod: изменение прав на файл или директорию. У команды chmod есть два режима: символьный и цифровой. В символьном режиме вы можете указать, как изменить разрешения с использованием символов:
  • u - владелец файла

  • g - группа файла

  • o - другие пользователи

  • a - все пользователи (то есть ugo) И операторы:

  • + - добавить разрешение

  • - - удалить разрешение

  • \= - установить разрешение А также типы разрешений:

  • r - разрешение на чтение

  • w - разрешение на запись

  • x - разрешение на выполнение Примеры: Дать владельцу право на выполнение файла:

chmod u+x filename

Удалить у группы право на запись в файл:

chmod g-w filename

Дать всем пользователям (владелец, группа, другие) право на чтение файла:

chmod a+r filename

Установить разрешения так, чтобы только владелец мог читать и записывать файл, а все остальные могли только читать:

chmod u=rw,go=r filename

В числовом режиме разрешения представлены тремя числами (октетами):

  • 4 - чтение (r)

  • 2 - запись (w)

  • 1 - выполнение (x) Примеры: Установить разрешения так, чтобы владелец мог читать, записывать и выполнять файл; группа могла читать и выполнять; другие пользователи могли только читать:

chmod 755 filename

Здесь 7 (rwx) для владельца, 5 (r-x) для группы и 5 (r-x) для других. Установить разрешения так, чтобы только владелец мог читать и записывать файл, а всем другим не было предоставлено никаких разрешений:

chmod 600 filename

Здесь 6 (rw-) для владельца, 0 (---) для группы и 0 (---) для других.

Используя команду ls -l, вы можете просмотреть текущие разрешения файла и при необходимости изменить их с помощью chmod.

  1. chown: изменение владельца файла или директории. Предположим, у нас есть файл example.txt, и мы хотим изменить его владельца на пользователя john:
chown john example.txt

Также можно изменить группу файла с помощью chown. Если мы хотим, чтобы файл example.txt принадлежал пользователю john и группе developers, мы можем использовать следующую команду:

chown john:developers example.txt

Если вы хотите рекурсивно изменить владельца для директории и всех её поддиректорий и файлов, вы можете использовать флаг -R:

chown -R john:developers directory_name/
  1. chgrp: изменение группы файла или директории. Предположим, у нас есть файл example.txt, и мы хотим изменить его группу на developers:
chgrp developers example.txt

Если вы хотите рекурсивно изменить группу для директории и всех её поддиректорий и файлов, вы можете использовать флаг -R:

chgrp -R developers directory_name/

Чтобы узнать больше о каждой из этих команд и их опциях, вы можете использовать страницы руководства man, например: man chmod, man chown, и man chgrp.

Разное

  • alias: создание псевдонимов для команд.
alias grep="grep --color"

alias

  • export: экспорт переменных окружения.
export NAME=VALUE

Image description

Переменные окружения можно использовать как в самой оболочке, так и в подпроцессах:

export GREETING="Hello"
bash -c 'echo $GREETING'

export bash

  • env: вывод или установка переменных окружения.
env

Image description

  • wget и curl: загрузка файлов из интернета. Вам скорее всего понадобится установить эту команду:
pkg install wget

wget в основном используется для скачивания файлов:

wget https://dev.to/mainarthur/how-to-automate-job-application-with-chatgpt-in-3-steps-3blg

wget

Указав аргумент -O, можно указать, куда сохранить файл:

wget https://dev.to/mainarthur/how-to-automate-job-application-with-chatgpt-in-3-steps-3blg -O index.html

wget

Это лишь базовые примеры использования wget. У этой утилиты есть много других возможностей и параметров, которые можно изучить, обратившись к официальной документации или введя man wget в командной строке (если вы находитесь на Unix-подобной системе).

curl - это инструмент командной строки, который позволяет выполнять различные запросы к серверу и взаимодействовать с ним, чаще всего по протоколам HTTP и HTTPS, но также и по многим другим протоколам.

curl ipinfo.io

curl

Это только базовые примеры использования curl. У этого инструмента есть множество других опций и возможностей. Для получения подробной информации и изучения всех функций можно обратиться к официальной документации или ввести man curl в командной строке на Unix-подобных системах.

Заключение

У bash и Unix ещё очень много важных аспектов (пайпы, перенаправления, скрипты, условия, циклы, функции), однако знания базовых команд будет достаточно для простого использования терминала. В случае же использования чего-то нового будут даваться необходимые дополнительные пояснения и объяснения.

Домашнее задание

Попробуйте каждую из перечисленных в этом списке команд в Termux на вашем устройстве: просмотрите их справки и попытайтесь их вызвать с успешным результатом, чтобы у вас сложилось чёткое представление, как они работают.

Обязательно подписывайтесь на мой Telegram-канал, скоро будет ещё больше контента: t.me/MainArthur