Что означают pty и tty?

Я заметил много упоминаний pty и tty в некоторых проектах с открытым исходным кодом, может ли кто-нибудь сказать мне, что они означают и в чем разница между ними?


person why    schedule 13.12.2010    source источник
comment
Можно прочитать справочную страницу pty (7) (например, по этой ссылке) , где pty/ttys описываются как заранее созданные пары файлов, представляющие ведущий / ведомый конец псевдотерминала (см. описание стиля BSD).   -  person wangkaibule    schedule 23.09.2020
comment
@wangkaibule Это должен быть ответ!   -  person Franklin Yu    schedule 25.12.2020


Ответы (5)


«tty» изначально означало «телетайп», а «pty» - «псевдотелетайп».

В UNIX / dev / tty * - это любое устройство, которое действует как «телетайп», то есть терминал. (Называется телетайпом, потому что это то, что у нас было для терминалов в те тяжелые дни.)

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

person Charlie Martin    schedule 13.12.2010
comment
Я думаю, что ptys были добавлены в Unix в первую очередь для поддержки Telnet, rsh и rlogin. - person Fred Foo; 18.12.2010
comment
@larsmans, у нас был telnet (по крайней мере) до того, как появился pty - на самом деле, telnet и я оба начали заниматься вычислениями в одном и том же 1969 году. Я был в некотором роде в мире DECNET, когда rsh появился в UNIX, поэтому я Я не уверен, что там. Во всяком случае, это часть и тому подобное. - person Charlie Martin; 19.12.2010
comment
Я знаю, что протокол Telnet старше ptys, но нынешняя программа Telnet для Unix появилась в 4.2BSD с 1983 года; также первый Unix с ptys. - person Fred Foo; 19.12.2010
comment
да, но программа telnet не использует pty. xterm делает. - person Charlie Martin; 22.12.2010
comment
@CharlieMartin Что ты имеешь в виду, pty - это что-то, что действует как терминал? Зачем нам это нужно? И как другая программа использует эту pty? Я предполагаю, что pty передает команды или что-то еще на настоящий терминал (tty) для программы. Это правильно? Если нет, проигнорируйте мою догадку и ответьте, пожалуйста, на первую часть моего комментария. - person OKGimmeMoney; 04.10.2014
comment
Подумайте о терминале как об объекте: он соединяет что-то на одном конце со стандартным вводом и выводом на другом. Настоящий TTY подключается к физическому терминалу. PTY подключается к программе, например xterm, или командному окну, или окну оболочки. Затем он лжет программе и говорит, что это действительно так терминал, честно. До PTY вы соединяли подобные программы с помощью каналов, но каналы имеют существенные различия, например, отсутствие управления потоком. PTY, похоже, решили эту проблему. - person Charlie Martin; 06.10.2014
comment
@CharlieMartin Настоящий телетайп подключается к физическому терминалу. А как насчет консоли Linux? Например, в системе Ubuntu консоли Linux находятся на Ctrl-Alt-F{1..6}, и они подключены к /dev/tty{1..6}. Консоль Linux не является физическим терминалом, но она подключена к ttyN (не к ptyN). Я что-то упустил? - person Utku; 26.03.2017
comment
Только то, что вы почти не можете сказать ничего определенного о LINUX, у которого не будет странного крайнего случая. В этом случае консоль Linux - это функция ядра, которая использует запись / dev / tty dev, но затем подключается к множеству вещей, чтобы получить доступ к пользователю. en.wikipedia.org/wiki/Linux_console - person Charlie Martin; 27.03.2017

Терминал - это терминал (это означает телетайп - исходные терминалы использовали линейный принтер для вывода и клавиатуру для ввода!). Терминал - это в основном просто устройство пользовательского интерфейса, которое использует текст для ввода и вывода.

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

Например, когда вы подключаетесь к машине по ssh и запускаете ls, команда ls отправляет свой вывод на псевдотерминал, другая сторона которого подключена к демону SSH.

person caf    schedule 13.12.2010
comment
Не могли бы вы привести более точный пример PTY? Я так и не понял, откуда они берутся, и как они вообще называются. Спасибо - person user3085931; 30.06.2014
comment
Может ли кто-нибудь помочь в том, когда и как операционная система на основе *nix создает эти псевдотерминалы. - person Krishna Oza; 07.02.2017
comment
@darth_coder: они создаются, когда приложение запрашивает его. Это происходит, когда вы открываете новое графическое окно терминала или входите в систему удаленно. - person caf; 08.02.2017
comment
@caf можете ли вы назвать модули ядра или демона, ответственного за порождение терминала. - person Krishna Oza; 08.02.2017
comment
@darth_coder: Любое приложение может это сделать. sshd и xterm - два типичных примера. - person caf; 08.02.2017
comment
@caf - Консоль KDE считается псевдотерминалом? Судя по вашему ответу, это так. - person Motivated; 05.01.2019
comment
@Motivated: Технически консоль - это программа, которая управляет главной стороной пары псевдотерминалов (фактический псевдотерминал является объектом ядра), но да, она определенно использует псевдотерминал. - person caf; 06.01.2019
comment
@caf - Мне непонятно. Я читал такие сообщения, как (askubuntu.com/questions/331432/terminal -emulator-vs-terminal), однако ответы различаются. Например, текстовый терминал - это то же самое, что и консоль? Если и текстовые терминалы, и консоли считаются терминалами (tty), используют ли они также псевдотерминалы или псевдотерминалы ограничиваются только эмуляторами терминала? - person Motivated; 06.01.2019
comment
Разница сводится к тому, предоставляет ли само ядро ​​драйвер для терминала или вместо него его реализует программа пользовательского пространства (которая использует псевдотерминал в качестве устройства ядра). В Linux под консолью понимается драйвер ядра, который управляет обычным видео и клавиатурой как терминал (так что он не использует псевдотерминал). Как уже упоминалось, sshd также использует псевдотерминалы, потому что ему необходимо предоставить локальным программам интерфейс терминала, где ввод и вывод идут на другую сторону сетевого соединения. - person caf; 06.01.2019
comment
@caf - Вы хотите сказать, что текстовый терминал и консоль (которые, как я полагаю, находятся в одно и то же время) предоставляются драйвером в ядре? Если да, то если я неправильно понял (askubuntu.com/ questions / 331432 / terminal-emulator-vs-terminal /), предполагается, что текстовый терминал / консоль также использовал эмулятор. Если да, то разве это не псевдотерминал? - person Motivated; 06.01.2019
comment
@caf - Чтобы уточнить, является ли эмулятор терминала, такой как консоль KDE, псевдотерминалом? - person Motivated; 06.01.2019

tty: телетайп. Обычно относится к последовательным портам компьютера, к которому были подключены терминалы.

pty: псевдотелетип. Ядро предоставляет псевдосерийный порт, подключенный к программам, эмулирующим терминалы, например xterm или screen.

person wnoise    schedule 13.12.2010

Если вы запустите команду mount без аргументов командной строки, которая отображает файловые системы, смонтированные в вашей системе, вы заметите строку, которая выглядит примерно так: none на / dev / pts type devpts (rw, gid = 5, mode = 620) Это указывает на то, что особый тип файловой системы, devpts, смонтирован в / dev / pts. Эта файловая система, которая не связана с каким-либо аппаратным устройством, является «волшебной» файловой системой, созданной Ядро Linux. Она похожа на файловую систему / proc.

Как и каталог / dev, / dev / pts содержит записи, соответствующие устройствам. Но в отличие от / dev, который является обычным каталогом, / dev / pts - это специальный каталог, который динамически создается ядром Linux. Содержимое каталога меняется со временем и отражает состояние работающей системы. Записи в / dev / pts соответствуют псевдотерминалам (или псевдотерминалам, или PTY).

Linux создает PTY для каждого нового окна терминала, которое вы открываете, и отображает соответствующую запись в / dev / pts. Устройство PTY действует как терминальное устройство - оно принимает ввод с клавиатуры и отображает текстовый вывод из программ, которые в нем работают. . PTY пронумерованы, а номер PTY - это имя соответствующей записи в / dev / pts.

Например, если номер PTY нового окна терминала равен 7, вызовите эту команду из другого окна:% echo «Я виртуальный ди»> / dev / pts / 7 Результат появится в новом окне терминала.

person nikolaosmparoutis    schedule 14.11.2015

tty - это физический t окончательный t порт на компьютер (обычно последовательный порт).

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

Слово телетайп является сокращением от телеграфной пишущей машинки или телетайп, устройство 1930-х годов - само по себе электромагнитное устройство, которое заменило телеграфные кодирующие машины 1830-х и 1840-х годов.

Телетайп
Телетайп - телетайп 1930-х годов

pty - это p seudo- t тип pe порт, предоставляемый ядром операционной системы компьютера для подключения пользователя программы эмуляции наземного терминала, такие как ssh, xterm или screen.

введите описание изображения здесь PTY - PseudoTeletype

Терминал - это просто пользовательский интерфейс компьютера, который использует текст для ввода и вывода.


Реализации ОС

В них используются порты p seudo- t element pe, однако их названия и реализации немного различаются.

Linux монтирует специальную файловую систему devpts на / dev ('s' предположительно означает s erial), которая создает соответствующую запись в /dev/pts для каждого нового окна терминала, которое вы открываете, например /dev/pts/0


macOS / FreeBSD также используют файловую структуру / dev, однако они используют пронумерованное TTY соглашение об именах ttys для каждого нового окна терминала, которое вы открываете, например /dev/ttys002


В Microsoft Windows по-прежнему используется концепция LPT порта для терминалов построчного принтера в командной оболочке для вывода на принтер.

person Tony Barganski    schedule 09.11.2019
comment
Второе изображение, которое вы предоставили, - это видеотерминал VT100. Это по-прежнему физический TTY (хотя производители TTY в 1970-х годах перешли от принтеров к видеодисплеям), и определенно не PTY (программный терминал). Стоит отметить, что видеотерминалы старой школы, такие как DEC VT100, который вы изобразили, не могут запускать программное обеспечение, не говоря уже об ОС, поскольку они не компьютеры. - person Username Obfuscation; 25.07.2020
comment
@dwk Хорошо заметен в отношении видеотерминала VT100. Обновил фото. - person Tony Barganski; 04.03.2021