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

237

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

Зачем
источник

Ответы:

225

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

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

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

Чарли Мартин
источник
Я думаю, что ptys был добавлен в Unix в первую очередь для поддержки Telnet, rsh и rlogin.
Фред Фу
5
@CharlieMartin Что вы имеете в виду, что pty - это нечто, «действующее как терминал?» Зачем нам что-то подобное? И как другая программа использует этот pty? Я предполагаю, что pty передает команды или что-то еще для реального терминала (tty) для программы. Это верно? Если нет, игнорируйте мои предположения и, пожалуйста, ответьте на первую часть моего комментария.
OKGimmeMoney
16
Подумайте о терминале как об объекте: он соединяет что-то на одном конце с stdin и stdout на другом. Настоящий TTY подключается к физическому терминалу. PTY соединяется с программой, например, xterm, или окном команд, или окном оболочки. Затем он лжет программе и говорит, что это действительно так , честно говоря. До PTY вы соединяли программы, подобные этой, с трубами, но у труб есть существенные различия, например, отсутствие контроля потока. Похоже, что PTYS решили это.
Чарли Мартин
3
@CharlieMartin "Настоящий TTY подключается к физическому терминалу". Что насчет консоли Linux? Например, в системе Ubuntu включены консоли Linux, к которым Ctrl-Alt-F{1..6}они подключены /dev/tty{1..6}. Консоль Linux не является физическим терминалом, но она подключена к ttyN(а не к ptyN). Я что-то здесь упускаю?
Утку
1
Только то, что вы не можете сказать что-то определенное о LINUX, у которого не будет странного крайнего случая. В этом случае консоль Linux - это функция ядра, которая использует запись / dev / tty dev, но затем подключается к множеству вещей, чтобы получить доступ к пользователю. ru.wikipedia.org/wiki/Linux_console
Чарли Мартин,
235

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

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

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

кафе
источник
1
Не могли бы вы привести немного более «точный» пример PTY? Я до сих пор не понял, откуда они приходят и как их вообще называют. Спасибо
user3085931
Может кто-нибудь помочь, когда и как на *nixоснове операционной системы создаются эти псевдо-терминалы.
Кришна Оза
@darth_coder: они создаются, когда приложение запрашивает их. Это происходит, когда вы делаете такие вещи, как открытие нового графического окна терминала или вход в систему удаленно.
кафе
@caf вы можете назвать модули ядра или демон, ответственный за порождение терминала.
Кришна Оза
@darth_coder: это может сделать любое приложение. sshdи xtermдва типичных примера.
CAF
21

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

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

wnoise
источник
19

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

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

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

Например, если номер PTY нового окна терминала равен 7, вызовите эту команду из другого окна:% echo 'I am a virtual di'> / dev / pts / 7 Вывод отобразится в новом окне терминала.

nikolaos_mparoutis
источник
2

ttyЯвляется физической т erminal- т Элета у ре порта на компьютере ( как правило, последовательный порт).

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

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

ptyЯвляется р seudo- т Эля ти ре порта обеспечивается компьютером ядра операционной системы для подключения программ эмуляции терминалов, таких как SSH, XTerm, или экран.

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

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


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

Они используют р seudo- т Эль ти ре портов , однако их имена и реализации отклонились немного.

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


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


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

Тони Баргански
источник