DEV Community

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

Posted on • Edited on • Originally published at masterarthur.xyz

3 1 2 1

"Мобильная" разработка. [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

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more