Created
December 9, 2018 10:59
-
-
Save alexeygorelov/45d58a310d814d4137a6c99aae6c088a to your computer and use it in GitHub Desktop.
difference between a 'terminal', a 'shell', a 'tty' and a 'console'
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Консоль, терминал и 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