Наверняка хоть раз вы называли «терминал» командной строкой или shell? Это не критичная ошибка, но между всеми этими понятиями есть свои отличия. Давайте разложим всё по полочкам: чем терминал отличается от shell, командной строки и консоли — и заодно узнаем, сколько из этих нюансов вы бы отгадали сами.
Что такое терминал?
Терминал — сокращённо от «эмулятор терминала», то есть программа, которая повторяет функции старых физических терминалов. Раньше для общения с компьютерами использовали специальные устройства с клавиатурой и экраном, а иногда и с принтером вместо монитора. Через них вводили команды и получали ответы системы.
На видео выше — настоящий терминал DEC VT100, подключённый к восстановленному мейнфрейму.
Когда в дома пришли персональные компьютеры, операционные системы научились эмулировать терминал программным способом. Теперь не нужен отдельный аппарат: достаточно обычной программы, чтобы отправлять команды хоть локально, хоть на удалённый сервер. Так появились современные терминальные эмуляторы — мы пользуемся ими до сих пор, почти так же, как это делали и сорок лет назад.
Программа-эмулятор терминала нужна для того, чтобы вы могли отсылать компьютеру команды и получать текстовые ответы. Терминальное окно — это, по сути, графическая рамка вокруг самой программы. Поэтому, говоря «терминал» в Linux, я обычно подразумеваю именно устройство, эмулирующее старый физический терминал для ввода команд, а не само окно на рабочем столе.
Если интересно, почитайте подробнее об истории терминалов: как они прошли путь от печатающих устройств до современных видеотерминалов.
Что такое shell?
Shell — это «оболочка», через которую вы взаимодействуете с системой. Бывает текстовый shell (командная строка), а бывает и графический. Это отдельная программа, работающая в пользовательском пространстве: она не обращается напрямую к ядру, а общается с ОС стандартными способами.
Пользовательское пространство — это зона, где работают все обычные программы без доступа к самому ядру. Даже приложения с root-правами обычно остаются здесь. Ядро и драйверы располагаются в своём, отдельном пространстве и напрямую управляют «железом».
Говоря проще: shell в Linux — это интерпретатор команд, который понимает ваши инструкции, выполняет их и позволяет создавать скрипты. Самые популярные shell — Bash, Zsh и fish, каждый со своими особенностями.
Есть ещё и Gnome shell — это пример графической оболочки. С её помощью пользователи управляют окнами, файлами, настройками рабочего стола и прочим. Такой shell интегрирован с оконным менеджером и реализует интерфейс с привычными меню, кнопками и окнами.
Что такое командная строка?
Командная строка (CLI — Command Line Interface) — это место, куда пользователь вводит инструкции для системы, чаще всего через shell. Термин этот очень широкий: командные строки встречаются и в приложениях, и в самой ОС. Многие путают командную строку с терминалом или shell, но разница между ними всё же есть, хотя на практике для большинства задач она не принципиальна.
Чаще всего командные строки — это приглашения Bash или Zsh, куда вы вводите свои команды.
Командная строка бывает и в Emacs: там можно сразу вводить команды на Elisp прямо «на лету».
Что такое консоль?
Консоль в 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.
Вот команда, которая покажет, к какой виртуальной консоли вы сейчас подключены.
В моём примере сессия «сидит» на vc1 (виртуальная консоль 1, TTY1), как видно на скриншоте.
Вкратце: консоль Linux — это ядро отвечает за ввод-вывод, а управлять этим можно через виртуальные консоли — фактически программные имитации старых телетайпов. И даже сегодня вы можете отдавать команды напрямую ядру именно через такие устройства.
Очень часто все эти термины смешивают, хотя их техничные различия важны. CLI иногда называют терминалом, иногда — консолью; shell может подразумевать оба понятия. Если кто-то просит «открыть shell», чаще всего имеется в виду именно терминал, но те же задачи решаются и через виртуальную консоль.
Для большинства пользователей самое корректное выражение — «терминальное окно»: открываете окно, запускаете команды — всё просто. Также корректно говорить о CLI как о любом текстовом интерфейсе (например, минибуфер в Emacs). Но если специально просят открыть консоль, скорее всего, есть дополнительный технический смысл — на это стоит обратить внимание.
Теперь, когда вы разобрались во всех тонкостях терминов, самое время начинать осваивать работу с терминалом в Linux с нуля!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru