Базовый цикл взаимодействия с Bash #
Андрей Михайлович Васильев, 2024
Версии презентации
Разбор приглашения командного интерпретатора #
Каждое хорошее интерактивное приложение должно показывать пользователю, что оно ожидает от него ввод команды
Типичный вид приглашения Bash:
[andrey@work-pc ~]$
andrey
— имя пользователя, с правами которого будут выполняться команды@
— разделительный знак, обозначающийна
work-pc
— название компьютера, на котором находится компьютер~
— текущий рабочий каталог$
— уровень прав текущего пользователя,$
— обычный пользователь,#
— суперпользователь
Другое типичное приглашение:
bash-4.4$
Чтение ответов от команд #
Давайте введём некорректную команду aoeucrg
:
andrey@home-pc:~$ aoeucrg
В результате обработки команды Bash сообщит, что команда неверна:
bash: aoeucrg: команда не найдена
andrey@home-pc:~$
Не стоит рассчитывать, что вы «ввели всё правильно» и «оно должно было правильно отработать» — всегда читайте результат работы команды
Классические приложения UNIX не выводят ничего, если они выполнили свою задачу без ошибок
Базовое взаимодействие с командным интерпретатором #
Сразу за приглашением располагается поле для ввода текста, предоставляющее большое количество функций:
- Клавиши влево и вправо позволяют передвигать курсор
- Работают клавиши Delete и Backspace
- Существует несколько десятков сочетаний клавиш, упрощающих редактирование команды
История команд #
Последние 1000 введённых команд хранятся в истории
- Клавиши вверх-вниз позволяют двигаться по истории команд
- Выбранную команду из истории можно редактировать
Решение проблемы при вводе команды #
Зачастую при написании команды можно допустить ошибки, особенно когда команда занимает более трёх символов
Плохой подход к решению:
- Вы ввели команду
- Bash сообщил, что команда неверна
- Вы начинаете ввод команды заново
Правильный подход к решению:
- Вы ввели команду
- Bash сообщил, что команда неверна
- Вы возвращаетесь к предыдущей команде (стрелка вверх)
- Вы исправляете ошибку в команде и отправляете её на исполнение
Ряд рабочих команд #
date
— получение информации о текущей дате и времени
andrey@home-pc:~$ date
Ср 02 сен 2020 11:19:38 MSK
Ср 02 сен 2020 11:19:38 MSK
является результатом работы команды date
После выполнения команды командный интерпретатор опять запрашивает ввод:
andrey@home-pc:~$ date
Ср 02 сен 2020 11:19:38 MSK
andrey@home-pc:~$
cal
— приложение для отображения календарей на месяц или год
andrey@home-pc:~$ cal
Сентябрь 2024
Пн Вт Ср Чт Пт Сб Вс
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
3
df
— отображение информации о занятом пространстве на файловых системах
andrey@home-pc:~$ df -h
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
/dev/sdd3 111G 56G 56G 51% /
/dev/sde1 466G 384G 82G 83% /home
/dev/sdd2 454M 89M 362M 20% /boot
free
— информация об использовании оперативной памяти
andrey@home-pc:~$ free
total used free shared buff/cache available
Mem: 32889440 6600560 6774420 337268 19514460 25557628
Swap: 16777212 0 16777212
Аргументы #
В самом простейшем случае команду можно описать следующим образом:
приложение аргумент-1 аргумент-2 аргумент-3
- Введённая строка разделяется на слова, разделитель — непечатные символы (пробелы, табуляция и т.д)
- Первое слово — приложение, которое необходимо запустить
- Последующие слова передаются приложению в виде аргументов
- Приложение может использовать аргументы во время своей работы
Сигнатура стартовой функции #
Рассмотрим стартовую функцию приложения, написанного на языке Си:
int main(int argc, char *argv[]) {
...
}
argc
— количество переданных аргументовargv
— массив строк, содержащих аргументы
За логическую обработку аргументов отвечает само приложение
- Для каждого хоть сколько нибудь популярного языка программирования есть библиотека, облегчающая задачу обработки аргументов
- Приложения, использующие общие библиотеки, обрабатывают аргументы согласно общей логике, заложенной в библиотеке
Примеры использования аргументов #
cal -3
— выводит три месяца, содержащих дату для отображенияcal -Y
— вывести 12 месяцев, начинающих с месяца, содержащего датуfree -h
— вывести информацию о памяти в удобном для человека форматеdf -h
— вывести информацию о занятом пространстве на файловых системах в удобном для человека форматеdate +%F
— вывести текущую датуdate +%T
— вывести текущий момент времени
Завершение работы терминала #
По окончании работы эмулятор терминала можно завершить двумя способами:
- Завершить его работу как графическое приложение
- Завершить работу интерпретатора команд
Рекомендуется использовать последний подход:
- Удобно закрыть вкладку эмулятора терминала
- Удобно завершить удалённую сессию
Для окончания работы интерпретатора достаточно
- либо ввести команду
exit
- либо при пустой командной строке наберите сочетание клавиш
Ctrl-D
(Нажать Ctrl и не отпуская её нажать на клавишу d), послать сигнал завершения потока ввода