Skip to content

Instantly share code, notes, and snippets.

@alexeygorelov
Created December 9, 2018 10:59
Show Gist options
  • Save alexeygorelov/45d58a310d814d4137a6c99aae6c088a to your computer and use it in GitHub Desktop.
Save alexeygorelov/45d58a310d814d4137a6c99aae6c088a to your computer and use it in GitHub Desktop.
difference between a 'terminal', a 'shell', a 'tty' and a 'console'
Консоль, терминал и tty тесно связаны. Первоначально они имели в виду оборудование, с помощью которого вы могли взаимодействовать с компьютером: в первые дни существования Unix это означало устройство в стиле телепринтера, напоминающее пишущую машинку, иногда называемое телетайпом, или сокращенно «tty». Название «терминал» пришло с электронной точки зрения, а название «консоль» с точки зрения мебели. Очень рано в истории Unix электронные клавиатуры и дисплеи стали нормой для терминалов.
В терминологии Unix tty - это особый тип файла устройства, который реализует ряд дополнительных команд (ioctls) помимо чтения и записи. В своем наиболее общем значении терминал является синонимом tty. Некоторые ttys предоставляются ядром от имени аппаратного устройства, например, при вводе с клавиатуры и выводе на экран текстового режима или при вводе и выводе, передаваемом по последовательной линии. Другие ttys, иногда называемые псевдо-ttys, предоставляются (через тонкий слой ядра) программами, называемыми эмуляторами терминала, такими как Xterm (работает в системе X Window), Screen (который обеспечивает уровень изоляции между программой и другим терминалом). ), Ssh (который соединяет терминал на одном компьютере с программами на другом компьютере), Expect (для сценариев взаимодействия терминала) и т. д.
Слово «терминал» также может иметь более традиционное значение устройства, через которое оно взаимодействует с компьютером, обычно с клавиатурой и дисплеем. Например, X-терминал - это своего рода тонкий клиент, компьютер специального назначения, единственной целью которого является управление клавиатурой, дисплеем, мышью и, иногда, другими периферийными устройствами взаимодействия с человеком, при этом реальные приложения работают на другом, более мощном компьютере.
Консоль, как правило, является терминалом в физическом смысле, который по определению является первичным терминалом, напрямую подключенным к машине. Консоль представляется операционной системе как (реализованная в ядре) tty. В некоторых системах, таких как Linux и FreeBSD, консоль выглядит как несколько ttys (специальные комбинации клавиш переключают эти ttys); просто чтобы запутать вопросы, имя, данное каждому конкретному tty, может быть «консоль», «виртуальная консоль», «виртуальный терминал» и другие варианты.
---
Оболочка - это основной интерфейс, который пользователи видят при входе в систему и который предназначен для запуска других программ. (Я не знаю, является ли первоначальная метафора тем, что оболочка является домашней средой для пользователя, или это оболочка, в которой работают другие программы.)
В кругах Unix оболочка специализировалась на оболочке командной строки, сосредоточенной вокруг ввода имени приложения, которое нужно запустить, затем имен файлов или других объектов, с которыми должно работать приложение, и нажатия клавиши Enter. Другие типы окружений не используют слово «оболочка»; например, оконные системы включают «оконные менеджеры» и «среды рабочего стола», а не «оболочку».
Есть много разных оболочек Unix. Популярные оболочки для интерактивного использования включают Bash (по умолчанию в большинстве установок Linux), zsh (что подчеркивает мощь и настраиваемость) и fish (что подчеркивает простоту).
Оболочки командной строки включают конструкции управления потоком для объединения команд. Помимо ввода команд в интерактивном режиме, пользователи могут писать сценарии. Наиболее распространенные оболочки имеют общий синтаксис, основанный на Bourne_shell. При обсуждении «программирования оболочки», оболочка почти всегда подразумевается как оболочка в стиле Bourne. Некоторые оболочки, которые часто используются для написания сценариев, но не имеют расширенных интерактивных функций, включают оболочку Korn (ksh) и множество вариантов ash. Практически любая Unix-подобная система имеет оболочку в стиле Bourne, установленную как /bin/sh, обычно ash, ksh или bash.
В системном администрировании Unix пользовательская оболочка - это программа, которая вызывается при входе в систему. Обычные учетные записи пользователей имеют оболочку командной строки, но пользователи с ограниченным доступом могут иметь ограниченную оболочку (restricted shell) или какую-то другую конкретную команду (например, для file-transfer-only учетных записей).
---
Разделение задач между терминалом и оболочкой не совсем очевидно. Вот их основные задачи.
Ввод: терминал преобразует ключи в управляющие последовательности (например, Left → \e[D). Оболочка преобразует управляющие последовательности в команды (например, \e[D → backward-char).
Редактирование строки, история ввода и завершение обеспечиваются оболочкой.
Терминал может предоставить взамен собственное редактирование строки, историю и завершение, и отправлять строку в оболочку только тогда, когда она готова к выполнению. Единственный общий терминал, который работает таким образом, - это оболочка M-x в Emacs.
Вывод: оболочка выдает такие инструкции, как «display foo», «переключить цвет переднего плана на зеленый», «переместить курсор на следующую строку» и т. Д. Терминал действует по этим инструкциям.
Подсказка - это полностью концепция оболочки.
Оболочка никогда не видит вывод команд, которые она выполняет (если не перенаправлена). История вывода (прокрутка) является чисто терминальной концепцией.
Копирование-вставка между приложениями обеспечивается терминалом (обычно с помощью последовательности клавиш мыши или клавиш, таких как Ctrl+Shift+V или Shift+Insert). Оболочка также может иметь свой собственный внутренний механизм копирования-вставки (например, Meta+W и Ctrl+Y).
Управление заданиями (запуск программ в фоновом режиме и управление ими) в основном выполняется оболочкой. Тем не менее, терминал обрабатывает комбинации клавиш, такие как Ctrl+C, чтобы убить задание переднего плана и Ctrl+Z, чтобы приостановить его.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment