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