Работу комадной строки осуществляют две вещи:

  1. Терминал
  2. Командный интерпретатор

Терминал

Терминалом называют программу, которая эмулирует поведение "железного" терминала, состоящего из клавиатуры и монитора. В простейшем случае — это просто окошко с командной строкой внутри. Хороший терминал всё же не ограничивается одним окном, а позволяет открывать новые терминалы в табах — по такому же принципу, как работают вкладки в браузере, делать сплиты, то есть разделять окно на части. Такая функция есть в терминалах, идущих в составе Ubuntu и MacOS. Терминал Windows не умеет ровным счётом ничего и нуждается в замене.

Хорошие терминалы также умеют восстанавливать завершённую сессию, создавать профайлы под разные задачи и многое другое.

Командный интерпретатор

У этого понятия множество синонимов, среди них shell ("шелл"), командная оболочка и командный процессор. Командная оболочка — программа, через которую происходит управление операционной системой и установленными программами, используя командную строку. Оболочка отличается от большинства других программ тем, что она является лишь средством для выполнения определённых задач, а не самой задачей. Shell запускается внутри терминала и приглашает к вводу команд. По умолчанию в большинстве операционных систем стоит Bash(модернезированная вариация Shell).

~$ █

Каждая строка, передаваемая пользователем системе — это команда, которую та должна выполнить. После ввода команды обязательно нажать Enter, только в этом случае она отправится на исполнение. До этого момента её можно редактировать.

Символ $ используется как разделитель. Слева от него — настраиваемое сообщение для вывода, обычно текущая директория, а справа — то, что вводится пользователем. Ниже пример использования команды date, которая выводит текущую дату.

$ date
Sun Aug 26 14:02:59 CEST 2018
$ █

Другой пример команды — комментарии. Как и в любых языках программирования, они ни на что не влияют, но ими мы будем пользоваться в дальнейшем, для описания происходящего:

$ # это комментарий
$ █

Командная оболочка позволяет запускать на выполнение установленные программы, но это далеко не всё, на что она способна. Для комфортной работы полезно иметь автозавершение имён программ, файлов, историю введённых команд, возможность перемещаться по файловой системе, удобные горячие клавиши, поддержку скриптов.

Командная оболочка и терминал — не одно и тоже. Терминал — это программа, которая запускает командную оболочку внутри себя.

Далее вы увидите, что shell — это полноценная среда программирования, а многие команды являются стандартными конструкциями любого языка программирования, такими как переменные, циклы или условия. Кроме того, некоторые команды являются программами, а некоторые — нет.

Командную оболочку нередко называют реплом (REPL, Read-Eval-Print-Loop), что отражается в способе взаимодействия с пользователем:

  1. Read — шелл ждёт ввода команды от пользователя
  2. Eval — шелл исполняет введённую команду
  3. Print — шелл выводит результат
  4. Loop — возвращаемся к первому пункту

Этот процесс называется интерактивной сессией: после загрузки шелл ждёт ввода команды, затем он её исполняет, выводит результат и снова ждёт ввода команды. Так происходит до тех пор, пока не будет дана команда на выход из терминала или выключение компьютера. REPL — широко распространённый способ взаимодействия с пользователем. В следующих курсах вы увидите, что он есть и у баз данных, и у языков программирования.