sh и bash
sh (Bourne Shell) и bash (Bourne Again SHell) оба являются командными интерпретаторами (оболочками) для Unix-подобных систем, но между ними есть ряд ключевых различий:
-
История:
-
sh. Один из первых командных интерпретаторов для Unix, созданный Стивеном Борном в 1970-х годах. -
bash. Создан Брайаном Фоксом в рамках проекта GNU в конце 1980-х годов как свободная заменаsh.
-
-
Функциональные возможности:
-
bashсодержит все особенностиsh, плюс множество улучшений и дополнений. Например:- Поддержка истории команд.
- Поддержка автодополнения команд по нажатию
Tab. - Расширенные возможности тестирования с
[[ ]]вместо[ ]. - Функции и массивы.
- Улучшенный синтаксис для управления заданиями.
-
-
Совместимость:
-
bashобычно работает в режиме совместимости сsh, когда запущен какsh, что позволяет ему исполнять скрипты, написанные дляsh. Однако есть некоторые особенности поведенияbash, которые могут не совпадать с традиционнымsh.
-
-
Популярность и распространение:
-
bashстал стандартной оболочкой во многих Linux-дистрибутивах и macOS (хотя в последних версиях macOS заменён на zsh). -
shчасто ссылается на другие оболочки в современных системах. Например, в Debianshна самом деле является символической ссылкой наdash.
-
-
Скрипты:
- Если скрипт начинается с
#!/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

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

Если добавить аргумент -l, команда выведет каждый файл/папку отдельной строкой. Можно скомбинировать с аргументом -a.
ls -la
-
pwd: вывести текущую рабочую директорию.
pwd
-
cd: изменение директории. По умолчанию вы находитесь в домашней папке~, а изменить директорию можно, передав новый путь к командеcd newFolder,cd newFolder/subFolder/subSubFolder.
cd folderA

Чтобы вернуться назад, можно использовать cd - - вы вернётесь к папке, в которой находились до предыдущего вызова cd, а вызвав cd .., вы перейдёте к родительской папке.
cd -
cd ..
Файловые операции
-
touch: создать пустой файл. Для применения достаточно просто дописать имя файлаtouch newFile.
touch newFile
-
mkdir: создать директорию. Работает аналогичноtouch.
mkdir subFolderB

Если необходимо создать целую вложенность из папок, можно использовать аргумент -p:
mkdir subFolderC/subSubFolderD -p
-
cp: копировать файлы или директории. Для использования команды нужно передать путь к старому файлу и путь к новому файлу.
cp oldPath newCopy

Для копирования папок необходим аргумент -r в конце команды.
-
mv: переместить или переименовать файлы/директории. Аналогиченcp, только он переименовывает или перемещает файлы вместо копирования
mv oldFileName newFileName
-
rm: удалить файлы или директории. Чтобы удалить файл, достаточно передать к нему путь, а для удаления папки потребуется передать аргумент-r.
rm subFolderA -r
rm fileName
-
rmdir: удалить пустую директорию. Аналогиченrm.
rmdir subFolderB
Текстовые редакторы
-
nano: простой текстовый редактор. Для того чтобы отредактировать новый или уже существующий файл, достаточно ввестиnano path/to/file, и нам откроется редакторnano:
nano fileToEdit

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

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

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

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

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

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

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

И мы можем воспользоваться командой cat, чтобы вывести новое содержимое файла:
cat fileToEdit
-
viилиvim: расширенный текстовый редактор. -
emacs: мощный текстовый редактор с множеством функций.
Для работы с vi/vim и emacs крайне рекомендую рассмотреть их документации: vim, emacs, так как для раскрытия всех нюансов их работы и взаимодействия потребуются целые отдельные статьи, ориентированные на начинающего пользователя. В то же время nano вам будет более чем достаточно для решения большинства запросов по редактуре текста в терминале.
Работа с текстом
-
echo: вывести строку текста.
echo Hello World!
-
cat: вывести содержимое файла.
cat fileToEdit
-
lessиmore: аналогичноcat, просмотр содержимого большого файла постранично. Удобен для просмотра логов:
less article.md
more article.md

Чтобы выйти, необходимо нажать q.
-
grep: поиск в тексте. Синтаксис команды:
grep [OPTIONS]... PATTERNS [FILES]...
Больше про паттерны и опции можно прочитать здесь.
Для примера поищем 'ChatGPT' в файле article.md:
grep --color ChatGPT article.md
Информация о системе
-
man: просмотреть руководство по команде. Вам скорее всего понадобится установить эту команду:
pkg install man
Пример использования достаточно прост:
man cat
-
df: показать доступное дисковое пространство. Аргумент-hсделает вывод более читабельным:
df -h
-
du: подсчёт занятого места в директориях. Аргумент-hсделает вывод более читабельным:
du -h
Сеть
-
ping: проверка соединения с хостом.
ping [host]
ping google.com
-
netstat: сетевая статистика.
netstat
-
ifconfig(илиipв некоторых дистрибутивах): конфигурация сетевого интерфейса.
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
-
kill: завершение процесса.
kill [signal] pid
kill -9 11689
-9 - сигнал для прерывания процесса.

Управление пакетами (зависит от дистрибутива):
-
pkg: менеджер пакетов Termux. Менеджер пакетов нужен, чтобы устанавливать новые пакеты, обновлять и удалять старые, эдакий терминальный Play Store. Перед установкой новых пакетов крайне рекомендуется обновить существующие пакеты командой:
pkg upgrade
В процессе обновления/установки пакетный менеджер может запросить дополнительные подтверждения. Чтобы согласиться, нужно нажать Y, а потом Enter:

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

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

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

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

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

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

Поиск файлов
-
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): все остальные пользователи.
Команды для управления разрешениями
-
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.
-
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/
-
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"
-
export: экспорт переменных окружения.
export NAME=VALUE

Переменные окружения можно использовать как в самой оболочке, так и в подпроцессах:
export GREETING="Hello"
bash -c 'echo $GREETING'
-
env: вывод или установка переменных окружения.
env
-
wgetиcurl: загрузка файлов из интернета. Вам скорее всего понадобится установить эту команду:
pkg install wget
wget в основном используется для скачивания файлов:
wget https://dev.to/mainarthur/how-to-automate-job-application-with-chatgpt-in-3-steps-3blg

Указав аргумент -O, можно указать, куда сохранить файл:
wget https://dev.to/mainarthur/how-to-automate-job-application-with-chatgpt-in-3-steps-3blg -O index.html

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

Это только базовые примеры использования curl. У этого инструмента есть множество других опций и возможностей. Для получения подробной информации и изучения всех функций можно обратиться к официальной документации или ввести man curl в командной строке на Unix-подобных системах.
Заключение
У bash и Unix ещё очень много важных аспектов (пайпы, перенаправления, скрипты, условия, циклы, функции), однако знания базовых команд будет достаточно для простого использования терминала. В случае же использования чего-то нового будут даваться необходимые дополнительные пояснения и объяснения.
Домашнее задание
Попробуйте каждую из перечисленных в этом списке команд в Termux на вашем устройстве: просмотрите их справки и попытайтесь их вызвать с успешным результатом, чтобы у вас сложилось чёткое представление, как они работают.
Обязательно подписывайтесь на мой аккаунт dev.to и Telegram-канал, скоро будет ещё больше контента: https://t.me/MainArthur





















Top comments (0)