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

mainarthur

Arthur Kh

Posted on August 18, 2023

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

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]
Enter fullscreen mode Exit fullscreen mode
  • [OPTIONS] - набор опций, которые обычно начинаются со знака "минус" - для короткой версии опции (например, -a) или с двух знаков "минус" -- для полного названия опции (например, --all).
  • [ARGUMENTS] - аргументы к опциям или самой команде.

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

  • Ctrl + C: прервать текущую команду.

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

  • Ctrl + Z: приостановить текущий процесс (можно вернуть на передний план с помощью fg).
  • Ctrl + D: завершить текущую сессию.
  • Ctrl + L: очистить экран.
  • Ctrl + R: обратный поиск в истории команд.
  • Ctrl + A: перейти в начало строки.
  • Ctrl + E: перейти в конец строки.
  • Нажмите Tab после начала ввода имени файла, директории или команды, и терминал попробует автоматически его дополнить.

Навигация

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

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

ls -a
Enter fullscreen mode Exit fullscreen mode

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

ls -la
Enter fullscreen mode Exit fullscreen mode

ls -la

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

pwd

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

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

cd -
Enter fullscreen mode Exit fullscreen mode
cd ..
Enter fullscreen mode Exit fullscreen mode

cd .., cd -

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

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

touch newFile

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

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

mkdir subFolderC/subSubFolderD -p
Enter fullscreen mode Exit fullscreen mode

mkdir -p

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

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

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

mv

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

rm

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

rmdir

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

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

nano
Теперь мы можем вносить наши изменения в файл, практически как в обычно текстовом редакторе:
nano
Снизу нам доступна панель действий (справка, поиск, замена, выход и другие):
nano
Чтобы вызвать какое-либо действие (например, выведем справку), нужно зажать CTRL и соответствующую клавишу:
nano
И получаем нашу справку:
nano
Чтобы сохранить файл, нужно нажать CTRL + x.
nano
Выведется вопрос, желаете ли вы сохранить ваши изменения. Если нажать N, изменения не сохранятся, а редактор закроется. CTRL + c вернёт вас в режим редактирования, а Y - сохранит ваши изменения.
nano
Нажимаем на Y, чтобы сохранить файл. Дополнительно редактор спросит, как назвать файл, который вы хотите сохранить. Если всё указано правильно, достаточно нажать Enter:
nano
И мы можем воспользоваться командой cat, чтобы вывести новое содержимое файла:

cat fileToEdit
Enter fullscreen mode Exit fullscreen mode

nano cat

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

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

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

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

echo

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

nano cat

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

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

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

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

grep --color ChatGPT article.md
Enter fullscreen mode Exit fullscreen mode

grep

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

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

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

man cat
Enter fullscreen mode Exit fullscreen mode

man

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

df

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

du

Сеть

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

ping

  • netstat: сетевая статистика.
netstat
Enter fullscreen mode Exit fullscreen mode

netstat

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

ifconfig

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

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

Где:

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

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

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

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

zip -r archive_name.zip directory_name/
Enter fullscreen mode Exit fullscreen mode

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

zip archive_name.zip directory_name/ -x \*exclude.txt
Enter fullscreen mode Exit fullscreen mode

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

zip -u archive_name.zip new_file.txt
Enter fullscreen mode Exit fullscreen mode

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

zip -e archive_name.zip file.txt
Enter fullscreen mode Exit fullscreen mode

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

unzip archive_name.zip
Enter fullscreen mode Exit fullscreen mode

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

unzip archive_name.zip file1.txt file2.txt
Enter fullscreen mode Exit fullscreen mode

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

unzip -l archive_name.zip
Enter fullscreen mode Exit fullscreen mode

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

unzip archive_name.zip -d destination_directory/
Enter fullscreen mode Exit fullscreen mode

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

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

ps

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

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

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

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

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

pkg help
Enter fullscreen mode Exit fullscreen mode

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

pkg install nodejs
Enter fullscreen mode Exit fullscreen mode

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

pkg uninstall nodejs
Enter fullscreen mode Exit fullscreen mode

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

Поиск файлов

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

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

find /home/user -type d -name "mydir"
Enter fullscreen mode Exit fullscreen mode

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

find /home/user -type f -size +100M
Enter fullscreen mode Exit fullscreen mode

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

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

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

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

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

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

  • Read (r): разрешение на чтение содержимого файла или просмотр содержимого каталога.
  • Write (w): разрешение на изменение содержимого файла или добавление/удаление файлов в каталоге.
  • Execute (x): разрешение на выполнение файла (если это исполняемый файл) или вход в каталог.

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

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

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

  1. chmod: изменение прав на файл или директорию. У команды chmod есть два режима: символьный и цифровой. В символьном режиме вы можете указать, как изменить разрешения с использованием символов:
  2. u - владелец файла
  3. g - группа файла
  4. o - другие пользователи
  5. a - все пользователи (то есть ugo) И операторы:
  6. + - добавить разрешение
  7. - - удалить разрешение
  8. = - установить разрешение А также типы разрешений:
  9. r - разрешение на чтение
  10. w - разрешение на запись
  11. x - разрешение на выполнение Примеры: Дать владельцу право на выполнение файла:
chmod u+x filename
Enter fullscreen mode Exit fullscreen mode

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

chmod g-w filename
Enter fullscreen mode Exit fullscreen mode

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

chmod a+r filename
Enter fullscreen mode Exit fullscreen mode

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

chmod u=rw,go=r filename
Enter fullscreen mode Exit fullscreen mode

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

  • 4 - чтение (r)
  • 2 - запись (w)
  • 1 - выполнение (x) Примеры: Установить разрешения так, чтобы владелец мог читать, записывать и выполнять файл; группа могла читать и выполнять; другие пользователи могли только читать:
chmod 755 filename
Enter fullscreen mode Exit fullscreen mode

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

chmod 600 filename
Enter fullscreen mode Exit fullscreen mode

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

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

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

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

chown john:developers example.txt
Enter fullscreen mode Exit fullscreen mode

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

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

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

chgrp -R developers directory_name/
Enter fullscreen mode Exit fullscreen mode

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

Разное

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

alias

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

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

export GREETING="Hello"
bash -c 'echo $GREETING'
Enter fullscreen mode Exit fullscreen mode

export bash

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

Image description

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

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

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

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

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

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

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

curl ipinfo.io
Enter fullscreen mode Exit fullscreen mode

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

Заключение

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

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

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

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

💖 💪 🙅 🚩
mainarthur
Arthur Kh

Posted on August 18, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related