что такое терминал в компьютере

Начало работы с Windows Terminal

Привет, Хабр! Сегодня делимся гайдом по началу работы с Windows Terminal. Да, поскольку он о начале работы с инструментом, в основном в материале описываются какие-то базовые моменты. Но я думаю, что и профессионалы смогут подчерпнуть для себя что-то полезное, как минимум из списка полезных ссылок в конце статьи. Заглядывайте под кат!

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Установка

Windows Terminal доступен в двух разных сборках: Windows Terminal и Windows Terminal Preview. Обе сборки доступны для загрузки в Microsoft Store и на странице выпусков GitHub.

Требования

Для запуска любой сборки Windows Terminal на вашем компьютере должна быть установлена Windows 10 1903 или более поздняя версия.

Windows Terminal Preview

Windows Terminal

Терминал Windows — это основная сборка продукта. Функции, которые поступают в Windows Terminal Preview, появляются в Windows Terminal через месяц эксплуатации. Это позволяет проводить обширное тестирование ошибок и стабилизацию новых функций. Эта сборка предназначена для тех, кто хочет получить функции после того, как они были изучены и протестированы сообществом Preview.

Первый запуск

После установки терминала вы можете запустить приложение и сразу приступить к работе с командной строкой. По умолчанию терминал включает профили Windows PowerShell, Command Prompt и Azure Cloud Shell в раскрывающемся списке. Если на вашем компьютере установлены дистрибутивы Подсистемы Windows для Linux (WSL), они также должны динамически заполняться как профили при первом запуске терминала.

Профили

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

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Дефолтный профиль

При первом запуске Windows Terminal в качестве профиля по умолчанию устанавливается Windows PowerShell. Профиль по умолчанию — это профиль, который всегда открывается при запуске терминала, и это профиль, который открывается при нажатии кнопки новой вкладки. Вы можете изменить профиль по умолчанию, установив «defaultProfile» на имя вашего предпочтительного профиля в файле settings.json.

Добавление нового профиля

Новые профили можно добавлять динамически с помощью терминала или вручную. Терминал Windows автоматически создаст профили для распределений PowerShell и WSL. Эти профили будут иметь свойство «source», которое сообщает терминалу, где он может найти соответствующий исполняемый файл.

Если вы хотите создать новый профиль вручную, вам просто нужно сгенерировать новый «guid», указать «name» и предоставить исполняемый файл для свойства «commandline».

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

Структура Settings.json

В Терминал Windows включены два файла настроек. Один из них — defaults.json, который можно открыть, удерживая клавишу Alt и нажав кнопку «Настройки» в раскрывающемся списке. Это неизменяемый файл, который включает в себя все настройки по умолчанию, которые поставляются с терминалом. Второй файл — settings.json, в котором вы можете применить все свои пользовательские настройки. Доступ к нему можно получить, нажав кнопку «Настройки» в раскрывающемся меню.

Файл settings.json разделен на четыре основных раздела. Первый — это объект глобальных настроек, который находится в верхней части файла JSON внутри первого <. Примененные здесь настройки повлияют на все приложение.

Следующим основным разделом файла является объект «profiles». Объект «profiles» разделен на два раздела: «defaults» и «list». Вы можете применить настройки профиля к объекту «defaults», и они будут применяться ко всем профилям в вашем «list». «list» содержит каждый объект профиля, который представляет профили, описанные выше, и это элементы, которые появляются в раскрывающемся меню вашего терминала. Настройки, примененные к отдельным профилям в «списке», имеют приоритет над настройками, примененными в разделе «defaults».

Далее в файле расположен массив «schemes». Здесь можно разместить собственные цветовые схемы. Отличный инструмент, который поможет вам создать свои собственные цветовые схемы, — это terminal.sexy.

Наконец, в нижней части файла находится массив «actions». Перечисленные здесь объекты добавляют действия в ваш терминал, которые можно вызывать с клавиатуры и/или находить внутри палитры команд.

Базовая кастомизация

Вот несколько основных настроек, которые помогут вам начать настройку вашего терминала.

Одна из самых популярных настроек — настраиваемое фоновое изображение. Это настройка профиля, поэтому ее можно либо поместить внутри объекта «defaults» внутри объекта «profiles», чтобы применить ко всем профилям, либо внутри определенного объекта профиля.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Цветовая схема

Список доступных цветовых схем можно найти на нашем сайте документации. Цветовые схемы применяются на уровне профиля, поэтому вы можете поместить настройку внутри «значений по умолчанию» или в конкретный объект профиля.

Этот параметр принимает название цветовой схемы. Вы также можете создать свою собственную цветовую схему и поместить ее в список «schemes», а затем установить в настройках профиля имя этой новой схемы, чтобы применить ее.

Начертание шрифта

По умолчанию Windows Terminal использует Cascadia Mono в качестве шрифта. Начертание шрифта — это настройка уровня профиля. Вы можете изменить шрифт, установив «fontFace» на имя шрифта, который вы хотите использовать.

Совет: Терминал Windows также поставляется с начертанием шрифта Cascadia Code, который включает программные лигатуры (см. Gif ниже). Если вы используете Powerline, Cascadia Code также поставляется в PL-версии, которую можно загрузить с GitHub.

Источник

Содержание:

Начиная с выпущенной в 2016 году сборки Windows 10 14971, Microsoft решила сделать консоль PowerShell основной оболочкой для выполнения команд в операционной системе. Следствием этого решения стала замена классической командной строки консолью PowerShell в контекстном меню кнопки Пуск, а также меню кнопки «Файл» на ленте Проводника, однако сама командная строка как отдельное приложение не была удалена и её по-прежнему можно было запускать любыми другими способами, в том числе из PowerShell.

↑ Что такое Терминал Windows, или как открыть командную строку в Windows 11

В Windows 11 разработчики пошли ещё дальше, упростив доступ к консольным инструментам операционной системы в новом приложении Windows Терминал, представляющим собой единую среду пользователя, обеспечивающую доступ к оболочке PowerShell, классической командной строке и подсистеме Windows для Linux. В отличие от терминалов предыдущего поколения, Windows Терминал отличается поддержкой независимых друг от друга вкладок, в которых можно открывать разные консольные приложения, более широкой поддержкой тем и настроек персонализации, настраиваемых «горячих» клавиш и использованием улучшенных шрифтов.

Физически Windows Терминал располагается в папке:

Программа представлена исполняемым файлом wt.exe, символьная ссылка на который прописана в переменной PATH, благодаря чему запуск Терминала возможен не только через контекстное меню кнопки Пуск, но и через окошко «Выполнить». В меню Win + X Windows 11 опция запуска Терминала пришла на смену опции запуска PowerShell, но по умолчанию в Терминале открывается вкладка с тем же PowerShell.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Чтобы запустить в Терминале классическую командную строку, нужно кликнуть по импровизированной стрелке рядом с кнопкой открытия новой вкладки и выбрать в меню «Командная строка» либо нажать комбинацию клавиш Ctrl + Shift + 2. Также вы можете сделать, чтобы командная строка в Windows Терминале открывалась по умолчанию. Для этого в том же меню выберите «Параметры» и в разделе «Запуск» в качестве профиля по умолчанию выберите «Командная строка».

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютеречто такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

↑ Другие способы вызвать Терминал и командную строку

Открыть Windows Терминал и командную строку в Windows 11 можно также и другими способами. Приведём здесь несколько наиболее простых и удобных.

В окошке «Выполнить». Нажмите Win + R, введите в открывшееся окошко команду wt и нажмите ввод, чтобы открыть Терминал. Чтобы запустить классическую командную строку, используйте команду cmd.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Через поиск. Откройте окно поиска и введите запрос «Windows Terminal». Запустите приложение кликом по его иконке. Обратите также внимание, что в правой области панели поиска вам будут доступны для запуска PowerShell, командная строка, Azure Cloud Shell и WLS (если установлена).

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Адресная строка Проводника. Находясь в любом окне Проводника, введите в его адресную строку команду wt и нажмите ввод. Команда cmd соответственно откроет командную строку.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Наконец, открыть Терминал можно через контекстное меню Проводника. Этот способ удобен тем, что позволяет открывать Терминал в том расположении, из которого он запускается. Если вы хотите открыть консоль, скажем, в корне диска C, перейдите туда в Проводнике, вызовите контекстное меню и выберите в нём опцию Показать дополнительные параметры → Открыть в Терминале Windows.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютеречто такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Открыт Терминал будет на вкладке «PowerShell», если вам нужна классическая командная строка, просто нажмите Ctrl + Shift + 2.

Источник

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

Терминал Windows — это современное приложение терминала для пользователей таких программ и оболочек командной строки, как «Командная строка», PowerShell и «Подсистема Windows для Linux» (WSL). К его основным функциям относится поддержка нескольких вкладок, панелей, символов Юникода и UTF-8, а также модуль отрисовки текста с ускорением GPU, возможность создания собственных тем и настройки текста, цвета, фона и сочетаний клавиш.

Более общие сведения см. в статье Скотта Хансельмана (Scott Hanselman) Разница между консолью, терминалом и оболочкой или просмотрите видео Рича Тернера (Rich Turner) Что собой представляет оболочка командной строки?.

Несколько профилей, поддерживающих различные приложения командной строки

Любое приложение с интерфейсом командной строки можно выполнять в Терминале Windows. Это касается всех приложений: от PowerShell и Командной строки до Azure Cloud Shell и любого дистрибутива WSL, например Ubuntu или Oh-My-Zsh.

Настраиваемые схемы и конфигурации

В Терминале Windows можно настроить различные цветовые схемы и параметры. Сведения о создании собственной цветовой схемы см. на этой странице. Пользовательские конфигурации Терминала также можно найти на странице о настраиваемой коллекции терминала.

Настраиваемые действия

Существует множество пользовательских команд, которые можно использовать в Терминале Windows для удобства работы. Если вам не нравится конкретное сочетание клавиш, вы можете изменить его на любое другое.

Дополнительные сведения о настройке сочетаний клавиш см. на странице «Действия».

Поддержка символов Юникода и UTF-8

В Терминале Windows могут отображаться символы Юникода и UTF-8, например эмодзи и символы из различных языков.

Отрисовка текста с ускоренным GPU

Терминал Windows использует GPU для отрисовки текста, что обеспечивает повышенную производительность по сравнению с использованием интерфейса командной строки Windows по умолчанию.

Поддержка фоновых изображений

В окне Терминала Windows можно использовать фоновые изображения и изображения в формате GIF. Сведения о добавлении фоновых изображений в профиль см. на странице Профиль — внешний вид.

Аргументы командной строки

Вы можете настроить запуск Терминала Windows в определенной конфигурации с помощью аргументов командной строки. Вы можете указать, какой профиль следует открыть на новой вкладке и какой каталог папки следует выбрать. Кроме того, терминал можно открыть с разделенными панелями и выбрать основную вкладку.

Например, чтобы открыть Терминал Windows из PowerShell с тремя панелями (на левой панели будет запущен профиль Командной строки, а правая панель будет разделена для PowerShell и ваш профиль по умолчанию с WSL), введите:

Сведения о настройке аргументов командной строки см. на этой странице.

Источник

Почему исследователи до сих пор используют эмуляторы терминалов

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

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

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

До появления привычных нам графических интерфейсов люди пользовались текстовыми терминалами, в которые вводили команды при помощи клавиатуры, а результат вычислений выводился на экран. Однако, и по сей день терминал, точнее эмулятор терминала, есть в каждой операционной системе: в Windows – это приложение cmd.exe (Command Line или просто «Консоль»), в Linux и MacOS– программа Terminal.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Все эмуляторы выглядят примерно одинаково: это командная строка, работающая по принципу «задал вопрос, получил ответ». Зачастую это черный экран, на фоне которого отображен белый текст и мигающий курсор, который используется для навигации по строке ввода.

Зачем нужен Терминал?

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

Разберем каждый из этих аспектов подробнее.

Терминал, как манипулятор файлов и папкок

Большинству пользователей нет необходимости использовать Терминал благодаря графической оболочке их операционной системы. Однако, без него не обойтись, когда речь идет о манипуляциях с файлами и папками более сложными, чем: «скопировать документ из одной папки и вставить в другую». Я приведу простой пример, показывающий ограниченность использования графической оболочки операционной системы.

Допустим, мне нужно переименовать фотографию и добавить к текущему названию дату, когда эта фотография была сделана. Что может быть проще, скажите Вы: «открой свойства файла, скопируй дату создания файла, закрой окно «Свойства» и вставь дату в название файла». Так и есть, все довольно просто, вот только повторить это действие нужно для всех фотографий на моем компьютере (а их у меня более 25 тысяч). Очевидно, что если я буду делать это подобным образом, то это задание отнимет у меня несколько недель.

Решение этой же задачи в Терминале займет не более получаса даже у начинающего пользователя. Фокус в том, что в Терминале пользователь может программировать действия, делегируя компьютеру рутинную работу. В разных типах эмуляторов терминала – разные языки программирования, но вероятно самым распространенным в наши дни является язык bash (о нем скоро будет отдельная статья).

Использование Терминала для создания скриптов

Другая важная особенность эмуляторов терминала – это возможность запуска в нем других программ, чтобы автоматизировать процессы в программах и обеспечить автономное взаимодействие между ними. Если входные и выходные данные этих программ оформить в виде файлов, то Терминал сможет запускать последовательно программы. Алгоритм будет напоминать цепочку из таких действий: запустить программу А, загрузить туда входные данные (файл А), экспортировать результаты анализа в файл B, закрыть программу A, запустить программу B, загрузить туда файл B, ну и так далее…

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

Управления суперкомпьютерами и серверами через Терминал

Терминал является не только окном в операционную систему персонального компьютера, но также и в операционную систему сервера или суперкомпьютера, который может находиться в тысячах километров от Вашего текущего месторасположения. Через эмулятор терминала на суперкомпьютер можно подавать алгоритмы (bash-скрипты), выполнение которых на Вашем компьютере могло бы занять неделю. Благодаря своей мощности суперкомпьютер проведет расчёты за считанные часы. Подобный подход позволяет проводить анализ больших массивов данных в кратчайшие сроки.

Как правило, на суперкомпьютерах и серверах стоят версии операционной системы Linux. Так как различий между эмуляторами терминала на Линуксе и на Маке практически нет, в дальнейших статьях я буду писать только об эмуляторах терминала, работающих на языке программирования bash (например, программа Terminal).

Заключение

Надеюсь эта статья была полезной и помогла дать общее представление о терминалах операционных систем и их роли в жизни исследователей. Если есть вопросы, задавайте их в комментариях, буду рад ответить.

В следующей статье мы рассмотрим как открыть Terminal на Linux и на MacOS, а также настроим его под себя для последующей удобной работы.

Источник

Hello, World! Глубокое погружение в Терминалы

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

На написание данной статьи меня вдохновила статья об анализе Сишного printf. Однако, там был пропущен момент о том, какой путь проходят данные после того, как они попадают в терминальное устройство. В данной статье я хочу исправить этот недочет и проанализировать путь данных в терминале. Также мы разберемся, чем отличается Terminal от Shell, что такое Pseudoterminal, как работают эмуляторы терминалов и многое другое.

Основы

Давайте для начала разберемся, что такое Terminal, Shell, Console, чем отличается Terminal Emulator от обычного Terminal и почему он так назван. Информации об этом написано уже довольно много, поэтому ничего нового вы здесь не услышите. Почти вся информация здесь была взята из интернета, ссылки приведу в конце статьи. Кто уже знает, что все эти вещи обозначают, может смело пропускать данный раздел.

Terminal

Terminal (терминал) — это комбинация дисплея и клавиатуры, то есть физическое устройство. До того, как терминалы стали именно данной комбинацией, они являлись неким устройством под названием teleprinter (teletype, teletypewriter или TTY сокращенно), то есть комбинацией принтера и клавиатуры. Обычно несколько терминалов подключались к одному и тому же компьютеру. Таким образом возможно было работать нескольким пользователям за одним и тем же компьютером, причем каждому выделялась своя сессия, независимая от других. Терминал был назван так потому, что он находился на конце терминального кабеля (terminal end).

Это Teletype:

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

А это Terminal:

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Console

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

Shell

Если предыдущие два представляют собой физические устройства, то данное определение относится исключительно к программному обеспечению.

Shell — это command line interpreter. Главное предназначение — запускать другие программы. Существует большое количество различных Shell’ов. Самым распространенным является Bash (от англ. Bourne Again SHell, что как подсказывает Википедия, является каламбуром для «Born again» Shell, то есть «возрождённый» Shell). Другие примеры: Dash (легковесный Shell, доступен, если запустить бинарник по адресу /bin/sh), Zsh.

Конечно же, и терминалы, и консоли не могли не найти своего отражения в современности. Поэтому далее мы рассмотрим такие вещи, как Terminal Emulator и Virtual Console.

Terminal Emulator

Terminal Emulator — эмулятор старого доброго терминала. Эмулятор терминала требуется для программ, которые не могут напрямую взаимодействовать с X Window System — Bash, Vim и прочие.

Давайте для начала установим обязанности терминала:

Так и наш Terminal Emulator выполняет абсолютно то же самое: он доставляет ввод пользователя в запущенную программу, а также отображает вывод программы на дисплей. В любом случае, смысл сохраняется — между пользователем и запущенной программой, существует какой-то слой, отвечающий за ввод/вывод. Примеры Terminal Emulator: gnome-terminal, xterm, konsole.

Прошу не путать Shell и Terminal Emulator!
Terminal Emulator — GUI приложение, то есть окно в X Window System. Shell — это command line interpreter, то есть просто исполнитель команд, он не имеет графической оболочки. Если говорить совсем правильно, вы не запускаете Bash, вы запускаете Terminal Emulator, который запускает внутри себя Bash. Terminal Emulator и Bash — абсолютно 2 различные программы. Первая отвечает исключительно за ввод/вывод, вторая — за обработку команд.

Далее в статье все упоминания терминала будут относиться к эмулятору терминала.

Virtual Console (Virtual Terminal)

Нажмите Ctrl+Alt+FN, где N, обычно, имеет значения от 1 до 6. То, что вы сейчас видели — называется Virtual Console (виртуальная консоль) или Virtual Terminal (виртуальный терминал). Помните, что я говорил ранее о терминалах? Множество терминалов были подсоединены к одному компьютеру и каждый терминал был отдельной сессией, независимой от других. Virtual Console повторяет эту идею: внутри вашего компьютера может быть несколько независимых сессий (однако, ресурсы компьютера все же, очевидно, общие).

Вы можете именовать данную сущность как Virtual Console, так и Virtual Terminal, так как по определению, консоль — это терминал, подключенный напрямую к компьютеру, но ведь все виртуальные терминалы в каком-то смысле подключены напрямую к компьютеру.

TTY устройства

Каждому терминалу назначается свое TTY устройство (терминальное устройство), которое обеспечивает работу консоли. Хотя телетайпы вы вряд ли уже найдете, но сокращение TTY дошло и до наших дней.

TTY устройство состоит из двух фундаментальных компонентов:

Строение TTY устройства:

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Существует 3 типа TTY устройств:

В данной статье мы будем говорить именно о втором типе TTY устройств — псевдотерминалах.

TTY Line Discipline

Начнем рассматривать дисциплину линии TTY устройств.

Первой важной особенностью дисциплиной линии является то, что она отвечает за процессинг ввода/вывода. Это включает в себя, например, обработку управляющих символов (см. Управляющие символы) и форматирование вывода. Например, вы вводите любой текст, но вдруг понимаете, что ошиблись в написании чего-то и хотите это стереть — именно тут в дело вступает дисциплина линии.

Разберем подробно, что именно происходит, когда мы работаем в Bash, запущенном в терминале. По умолчанию TTY устройство работает в каноничном режиме с включенным эхо (echoing). Эхо — это отображение введенных вами символов на экране.

TTY Line Editing

TTY Line Editing — это тот компонент, который отвечает за процессинг ввода в дисциплине линии. Следует сказать, что Line Editing — это общее понятие и относится оно к процессингу ввода. Например, Bash и Vim имеют свой Line Editing.

Мы можем контролировать настройки дисциплины линии текущего TTY устройства с помощью программы stty. Давайте немного поэкспериментируем.

Откройте Bash или любой другой Shell и введите:

Теперь попробуйте что-нибудь ввести — и вы не увидите вашего ввода (не беспокойтесь, вы все еще можете передавать ввод в программу). Вы только что отключили эхо — то есть отображение введенных символов на экране. Теперь введите:

Больше информации вы сможете найти в man stty.

Terminal Emulator и Pseudoterminal

Каждый раз, когда мы открываем новый терминал в X Window System, GNOME Terminal Server порождает новый процесс и запускает в нём выбранную по умолчанию программу. Обычно, это какой-то Shell (например, Bash).

Общение с запущенной программой происходит через так называемый Pseudoterminal (псевдотерминал, PTY). Сам псевдотерминал существует в ядре, однако ввод получает из пользовательского пространства — из эмулятора терминала.

Псевдотерминал состоит из следующих двух виртуальных TTY устройств:
1) PTY master (PTM) — ведущая часть псевдотерминала. Используется GNOME Terminal Server для передачи ввода с клавиатуры в запущенную внутри терминала программу, а также для чтения вывода программы и отображения вывода на дисплей. GNOME Terminal Server в свою очередь общается с X Window System по X протоколу.
2) PTY slave (PTS) — ведомая часть псевдотерминала. Используется программой, запущенной внутри терминала, для чтения ввода с клавиатуры и отображения вывода на экран. По крайней мере, так думает сама программа (объясню, что это значит, чуть далее).

Любые данные, записанные в PTS устройство, являются вводом PTM устройства, то есть становятся доступны для чтения на PTM устройстве. И наоборот: любые данные, записанные в PTM устройство, являются вводом PTS устройства. Именно таким образом и происходит общение GNOME Terminal Server и запущенной внутри терминала программы. Каждому PTM устройству сопоставляется свое PTS устройство.

Помните, я сказал, что программа, использующая PTS устройство, только думает, что она общается напрямую с терминалом? Дело в том, что PTS также является терминальным устройством (TTY устройством), но разница между PTS устройством и действительным TTY устройством в том, что PTS устройство ввод получает не с клавиатуры, а с master устройства, а вывод идет не на дисплей, а на master устройство. Именно поэтому псевдотерминал назван так — псевдотерминал лишь имитирует (опять??) терминал. Разница между эмулятором терминала и псевдотерминалом в том, что эмулятор терминала — это лишь графическая программа, позволяющая запускать терминал прямо внутри оконного интерфейса, но реализована эта возможность с помощью псевдотерминала.

То, что PTS устройство является TTY устройством — это очень важно. Вот почему:

PTM устройство также является TTY устройством, но это не играет никакой роли, так как оно не используется в роли управляющего терминала. Более того, дисциплина линии PTM устройства установлена в raw режим, поэтому процессинг при передаче данных от PTS к PTM устройству не производится. Однако, вызовы read() и write() из пользовательского пространства все равно сперва обслуживаются дисциплиной линии на обоих устройствах. Данный момент сыграет еще большую роль, как мы увидим позднее.

Процесс общения GNOME Terminal Server и запущенной внутри терминала программы выглядит следующим образом:

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Следует поподробнее рассмотреть роль, которую играет дисциплина линии при общении между обеими частями псевдотерминала. Здесь дисциплина линии отвечает за процессинг данных, переходящих от PTM к PTS устройству, а также за доставку данных из одной части псевдотерминала в другую. Когда мы находимся в драйвере PTS устройства, мы задействуем дисциплину линии PTM устройства, и наоборот.

Виртуальные устройства

Вы, наверное, могли подумать, что можете открыть файл по пути /dev/pts/N и писать или читать данные из него, как из обычного текстового файла? Да, все устройства в Unix-подобных системах являются файлами благодаря фундаментальному принципу Unix, который гласит, что все является файлом. Однако, никакие специальные файлы устройств (англ. — device file) не являются текстовыми файлами. Такие устройства называются виртуальными устройствами (virtual device) — то есть существуют исключительно в памяти, а не на диске.

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Устройство псевдотерминала

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

Перед началом введем так называемую «корзину компонентов». По мере продвижения по ядру, мы будет добавлять в нее всё больше компонентов и находить связь между ними. Надеюсь, это еще лучше поможет понять устройство псевдотерминала. Приступим.

Когда Linux запускается, он загружает необходимые драйверы устройств. Такой драйвер имеется и у нашего псевдотерминала. Его регистрация начинается с вызова данной функции:

Для всех современных систем будет вызвана функция unix98_pty_init() :

Здесь нас интересует 3 вещи:

1. tty_set_operations

Функция tty_set_operations() всего лишь устанавливает таблицу функций для текущего драйвера:

Структура tty_operations — это таблица функций, которая используется для доступа к функциям драйвера TTY устройства.

Здесь можете наблюдать уже знакомую по статье о Сишном printf функцию pty_write — к ней мы вернемся чуть позднее.

Давайте добавим данную структуру в нашу корзину компонентов:
что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

2. ptmx_open

Теперь перейдем к ptmx_open():

Сначала разберем функцию alloc_tty_struct() :

Единственное, что нас здесь интересует, это функция tty_ldisc_init() :

Которая вызывает tty_ldisc_get() :

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

Но мы создали tty_struct всего лишь для PTM устройства. А что же о PTS устройстве? Для этого вернемся к функции tty_init_dev() и вспомним о том, что дальше нас ожидает вызов функции tty_driver_install_tty() :

Комментарий подсказывает нам, что данный метод ответственен за создание различных дополнительных структур. PTS устройство и будет являться нашей дополнительной структурой. Признаюсь, это было для меня крайне удивительно, ибо это, черт возьми, целое устройство, а не просто какая-то дополнительная структура! Но мы то с вами понимаем, что все устройства — это всего лишь какие-то структуры, так что идем дальше. Хорошо, что такое здесь driver->ops->install? Для этого посмотрим на таблицу функций для PTM драйвера ещё раз:

И поймем, что нас интересует функция pty_unix98_install() :

Которая вызывает функцию pty_common_install() :

Мы видим, что для PTS устройства создается абсолютно такая же структура tty_struct за исключением того, что в ней будет находиться драйвер PTS устройства. Обе структуры хранят указатели друг на друга для общения между собой. Добавляем tty_struct для PTS устройства в нашу корзину.

Регистрация драйвера

Мы не будем рассматривать весь процесс регистрации драйвера, так как нас интересует только установка таблицы функций для файла TTY устройства (ведь мы должны как-то получить доступ к самому устройству при работе с файлом?).
Это — таблица функций, которая будет установлена для файла как PTM, так и PTS устройства:

Мы не будем добавлять данную структуру в нашу корзину, ибо она в принципе то и не относится к устройству псевдотерминалов и служит лишь для доступа к TTY устройству.

Готово. Мы рассмотрели процесс создания обоих устройств, который будет произведен при открытии мультиплексора /dev/ptmx. Таким образом, включая второе PTS устройство, которое имеет точно такое же строение, как и PTM устройство, общая картина строения псевдотерминала складывается следующая:

что такое терминал в компьютере. Смотреть фото что такое терминал в компьютере. Смотреть картинку что такое терминал в компьютере. Картинка про что такое терминал в компьютере. Фото что такое терминал в компьютере

Hello, World!

Ну вот мы и подошли к самому главному. В данной главе мы полностью разберем путь нашей строки «Hello, World!», отправленной из простой Си программы в терминальное устройство.

Итак, наша строка «Hello, World!» отправляется в увлекательное путешествие. На самом деле, программа не знает ничего, кроме того, что она пишет в стандартный поток вывода. Ей больше нет разницы, куда этот вывод пойдет. Направьте stdout в /dev/null — и вывод вообще не будет нигде отображаться. Здесь я не буду рассказывать о вызовах библиотечных Си функций, а начнем сразу с файловой системы Linux.

Так как каждое устройство в Unix является файлом с определенными для него функциями write(), read(), close() и прочими, то при вызове write() на /dev/pts/0 мы попадаем в общую для всех файлов функцию __vfs_write() :

Здесь мы вызываем операцию write() из таблицы функций для текущего файла. Как вы помните, таблица функций была установлена при регистрации драйвера и выглядела она следующим образом:

Данная функция получает структуру tty_struct для текущего файла TTY устройства, а потом достает из нее дисциплину линии и вызывает функцию write() для нее. Таблица функций дисциплины линии выглядела следующим образом:

Переходим к функции n_tty_write() :

Итак, строка «Hello, World!» наконец отправилась в write() функцию драйвера PTS устройства. Найдем эту функцию в таблице функций драйвера:

Давайте здесь остановимся и проследим наш путь до этого места:

Вроде бы ничего не упустили. Итак, буфер передается в очередь ввода на PTM устройство. Разберемся, как именно это происходит.

Для начала, следует познакомить вас с новой структурой данных под названием flip buffer. Flip buffer — это структура данных, состоящая из двух массивов. Когда tty driver получает новые данные, он сохраняет их в первом массиве. Когда массив заполняется, ожидающая данных сторона будет об этом уведомлена и сможет прочитать данные из этого массива. Если в будущем появятся новые данные, они сохранятся уже во второй массив для того, чтобы не перезаписать читающиеся другой стороной данные. Когда и этот массив заполняется, ожидающая данных сторона снова будет уведомлена, а новые данные в следующий раз будут снова записываться в первый массив. Именно из-за такой логики данная структура данных и названа flip buffer — потому что данные перемещаются между массивами (наверное, здесь лучше подойдет какое-то другое слово, но я не знаю хорошего перевода для слова flip).

На самом деле, flip buffer был замёнен новой имплементацией в новых версиях ядра, однако поведение буфера осталось почти таким же, а все функции остались совместимы с раннее реализованными драйверами. Не стоит сильно вникать в устройство данного буфера, ясно одно — в конце концов данные будут перемещены в PTM устройство, а после окончания записи ожидающая сторона будет уведомлена о готовых для чтения данных.

Итак, наша строка «Hello, World!» оказалась в PTM устройстве. В это время GNOME Terminal Server заблокирован на вызове poll() (техника мультиплексирования I/O) и ожидает новых данных на любом из master устройств. Вы думаете, сейчас он проснется и прочитает новые данные на устройстве? Как бы не так. Когда я говорил об ожидающей стороне, я говорил о дисциплине линии, ведь это именно её задача — принимать ввод и производить его процессинг при необходимости.

Дисциплина линии будет уведомлена о новых данных с помощью вызова функции tty_flip_buffer_push() (в том же pty_write):

Я не знаю, что здесь подразумевается под work (предположу, что это какая-то внутренняя структура ядра для планировки различных задач) и какой компонент ядра отвечает за планировку, но из комментариев ясно следующее — когда задача начнет выполняться, доставку организует функция flush_to_ldisc() :

Все функции, начинающиеся с n_tty_receive_buf (кроме тех, где есть суффикс _raw) производят процессинг данных и записывают данные в буфер под названием read_buf, который и является основным буфером для чтения с TTY устройства. Так как дисциплина линии для PTM устройства установлена в raw режим, то процессинг не будет произведен и данные сразу запишутся в read_buf. Однако, если бы мы разбирали доставку данных от PTM к PTS устройству, то процессинг был бы произведен.

Опишу полную цепочку вызовов до конечного вызова, включая пропущенные вызовы:

Заметьте, никакая функция PTM драйвера при перемещении данных не была использована — вся работа произошла в дисциплине линии и драйвере PTS устройства.

Таким образом, наша строчка «Hello, World!» проходит следующий путь:

Заключение

Подведем итог. В данной статье мы узнали:

На этом все, спасибо за внимание! Если у вас возникли какие-нибудь вопросы — смело задавайте их в комментариях, буду рад ответить!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *