Базовый цикл взаимодействия с Bash

Базовый цикл взаимодействия с 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 введённых команд хранятся в истории

  • Клавиши вверх-вниз позволяют двигаться по истории команд
  • Выбранную команду из истории можно редактировать

Решение проблемы при вводе команды #

Зачастую при написании команды можно допустить ошибки, особенно когда команда занимает более трёх символов

Плохой подход к решению:

  1. Вы ввели команду
  2. Bash сообщил, что команда неверна
  3. Вы начинаете ввод команды заново

Правильный подход к решению:

  1. Вы ввели команду
  2. Bash сообщил, что команда неверна
  3. Вы возвращаетесь к предыдущей команде (стрелка вверх)
  4. Вы исправляете ошибку в команде и отправляете её на исполнение

Ряд рабочих команд #

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), послать сигнал завершения потока ввода

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su