Найти в Дзене
Герман Геншин

Терминал, командная строка, shell и консоль: вот что на самом деле скрывается за привычными словами!

Оглавление

Наверняка хоть раз вы называли «терминал» командной строкой или shell? Это не критичная ошибка, но между всеми этими понятиями есть свои отличия. Давайте разложим всё по полочкам: чем терминал отличается от shell, командной строки и консоли — и заодно узнаем, сколько из этих нюансов вы бы отгадали сами.

Что такое терминал?

Терминал — сокращённо от «эмулятор терминала», то есть программа, которая повторяет функции старых физических терминалов. Раньше для общения с компьютерами использовали специальные устройства с клавиатурой и экраном, а иногда и с принтером вместо монитора. Через них вводили команды и получали ответы системы.

На видео выше — настоящий терминал DEC VT100, подключённый к восстановленному мейнфрейму.

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

Программа-эмулятор терминала нужна для того, чтобы вы могли отсылать компьютеру команды и получать текстовые ответы. Терминальное окно — это, по сути, графическая рамка вокруг самой программы. Поэтому, говоря «терминал» в Linux, я обычно подразумеваю именно устройство, эмулирующее старый физический терминал для ввода команд, а не само окно на рабочем столе.

-2

Если интересно, почитайте подробнее об истории терминалов: как они прошли путь от печатающих устройств до современных видеотерминалов.

Что такое shell?

Shell — это «оболочка», через которую вы взаимодействуете с системой. Бывает текстовый shell (командная строка), а бывает и графический. Это отдельная программа, работающая в пользовательском пространстве: она не обращается напрямую к ядру, а общается с ОС стандартными способами.

Пользовательское пространство — это зона, где работают все обычные программы без доступа к самому ядру. Даже приложения с root-правами обычно остаются здесь. Ядро и драйверы располагаются в своём, отдельном пространстве и напрямую управляют «железом».

Говоря проще: shell в Linux — это интерпретатор команд, который понимает ваши инструкции, выполняет их и позволяет создавать скрипты. Самые популярные shell — Bash, Zsh и fish, каждый со своими особенностями.

-3

Есть ещё и Gnome shell — это пример графической оболочки. С её помощью пользователи управляют окнами, файлами, настройками рабочего стола и прочим. Такой shell интегрирован с оконным менеджером и реализует интерфейс с привычными меню, кнопками и окнами.

Что такое командная строка?

Командная строка (CLI — Command Line Interface) — это место, куда пользователь вводит инструкции для системы, чаще всего через shell. Термин этот очень широкий: командные строки встречаются и в приложениях, и в самой ОС. Многие путают командную строку с терминалом или shell, но разница между ними всё же есть, хотя на практике для большинства задач она не принципиальна.

Чаще всего командные строки — это приглашения Bash или Zsh, куда вы вводите свои команды.

-4

Командная строка бывает и в Emacs: там можно сразу вводить команды на Elisp прямо «на лету».

-5

Что такое консоль?

Консоль в Linux — это способ ввода и вывода, встроенный прямо в ядро системы. Через неё система может сообщать вам важные сообщения, а пользователь — напрямую взаимодействовать с ядром.

В отличие от эмулятора терминала (отдельная программа в пользовательском пространстве), драйвер консоли встроен в ядро и умеет сразу без посредников выводить системную информацию. Через консоль реально работать с системой на самом низком уровне, правда, возможности здесь ограничены по сравнению с современными терминальными эмуляторами.

Консоль обслуживает виртуальные терминалы — TTY (виртуальные консоли). К ним подключаются по адресам /dev/tty*, где * — номер терминала. Терминальные эмуляторы же работают через псевдотерминалы — /dev/pts/ (например, /dev/pts/0, /dev/pts/1 и так далее).

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

На видео выше показано, как старый телетайп подключён к Linux-серверу через последовательный порт. Пользователь вводит команды — и получает ответы ядра через устройство типа /dev/ttyS0.

Что shell, что терминальный эмулятор, что виртуальная консоль TTY обычно запускают одну и ту же оболочку (например, Bash), но контекст работы у них заметно разный.

Переключиться в виртуальный терминал можно сочетанием Ctrl Alt F*, где * — от 1 до 7. Обычно на TTY1 работает дисплей-менеджер (экран входа в систему), который затем запускает графическую среду. Остальные TTY чаще всего свободны для ввода команд. Чтобы вернуться на рабочий стол, снова выберите TTY1.

Вот команда, которая покажет, к какой виртуальной консоли вы сейчас подключены.

-6

В моём примере сессия «сидит» на vc1 (виртуальная консоль 1, TTY1), как видно на скриншоте.

Вкратце: консоль Linux — это ядро отвечает за ввод-вывод, а управлять этим можно через виртуальные консоли — фактически программные имитации старых телетайпов. И даже сегодня вы можете отдавать команды напрямую ядру именно через такие устройства.

Очень часто все эти термины смешивают, хотя их техничные различия важны. CLI иногда называют терминалом, иногда — консолью; shell может подразумевать оба понятия. Если кто-то просит «открыть shell», чаще всего имеется в виду именно терминал, но те же задачи решаются и через виртуальную консоль.

Для большинства пользователей самое корректное выражение — «терминальное окно»: открываете окно, запускаете команды — всё просто. Также корректно говорить о CLI как о любом текстовом интерфейсе (например, минибуфер в Emacs). Но если специально просят открыть консоль, скорее всего, есть дополнительный технический смысл — на это стоит обратить внимание.

Теперь, когда вы разобрались во всех тонкостях терминов, самое время начинать осваивать работу с терминалом в Linux с нуля!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: