Почему в Linux так много / dev / tty?

27

В Ubuntu 10.04, если я проверяю в / dev, существует более 50 ттыс. tty0, tty1, tty2 ....

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

  1. но почему их так много? это что-то вроде пула?

  2. и в чем разница между / dev / pts / 0, 1, 2 ..., / dev / tty?

  3. Если я открываю терминал, новый номер создается в / dev / pts. но я не знаю когда / dev / tty? используется.

    даже если я создаю SSH-соединение, число / dev / tty s одинаково.

    и если я сделаю

    cat /dev/tty0
    

    и введите что-то на клавиатуре, я получаю соответствующие выводы. почему это происходит?

daehee
источник

Ответы:

25

Ttys не просто устройства ввода / вывода. Они также выполняют специальную работу, выступая в качестве управляющего терминала для сеанса, например, отправляя сигналы (Ctrl + C). / dev / ttyNN - это виртуальные консоли, которые являются полноэкранными дисплеями на мониторе.

Терминалы начинаются с / dev / tty1. Обычно вы можете переключиться на эти консоли, нажав клавиши Ctrl + Alt + Fn.

Например, Ctrl + Alt + F1 приведет вас к первому виртуальному терминалу. В настоящее время большинство дистрибутивов Linux используют X-сервер от tty1. Таким образом, нажатие Ctrl + Alt + F1 может не иметь эффекта.

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl + Alt + F2 приведет вас ко второму терминалу. Обычно в дистрибутивах запускается программа входа в систему (agetty) на виртуальном терминале.

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

Программы входа в систему предоставляют вам приглашение для входа в систему и позволяют войти с именем пользователя / паролем. Скрипты инициализации решают, где будут запускаться все программы входа в систему. Поэтому, в зависимости от этого, вы можете видеть или не видеть приглашение для входа, скажем, tty9. Чтобы вернуться к интерфейсу GUI, нажмите Ctrl + Alt + F1 (как в примере, приведенном выше).

/ dev / tty0 - это специальное устройство, которое указывает на текущий терминал. Таким образом, независимо от того, откуда вы его запускаете (с любой виртуальной консоли), все, что читается из / записывается в tty0, отправляется на ваш текущий терминал.

Второй столбец в «ps ax» также содержит управляющий терминал программы. Для некоторых программ, таких как демоны, вы можете видеть, что столбец - «?», Что означает, что они не связаны с терминалом.

/ dev / pts / 0 и т. д. являются псевдо-терминальными устройствами, которые не подключены к системному дисплею. например, терминал, который вы получаете при открытии терминала gnome или любого другого терминала с графическим интерфейсом. Это клиент-серверный подход, при котором клиентская часть будет экспортироваться в такие программы, как bash. Данные, отправляемые программой на псевдотерминал, отправляются на сторону «сервера» (которая обычно отслеживается другой программой, такой как gnome-терминал). Процесс управления (на стороне сервера) определяет, что необходимо отправить в терминал, что в конечном итоге увидит клиент. Эти устройства помогают вам открывать несколько «графических терминалов» без каких-либо ограничений в вашей системе, по-прежнему предоставляя такие же старые терминалы, как элементы управления (ioctl (), настройка цвета, отправка сигналов [Ctrl + C] и т. Д.).

багор
источник
2
Откуда это знать, кроме как спросить здесь? какая-то справочная страница?
n611x007
1
@ n611x007 - man /dev/ptsхорошее начало, также man termiosобратите внимание, что клиент / сервер является двунаправленным среди ptys - ptm и pts - где виртуальный терминал, такой как gnome-терминал, или xterm обычно подключается к главному устройству и оболочке, такой как bash, подчиненный ,
Вульфгарпро
В моей системе /dev/ttyнаходится текущий управляющий терминал, но я не знаю, что там /dev/tty0, /dev/tty1как и Linux KMSCON. И /dev/tty7это X-сервер.
CMCDragonkai
Это не отвечает на вопрос, хотя. Как отметил Дахи, существует 64 устройства / dev / ttyN. 1-8 виртуальные консоли. ptys являются отдельными, в / dev / pts. В какой системе, скажем, / dev / tty30 когда-либо привыкаешь и как?
Эндрю МакГиннесс
1

Я просто хочу уточнить отношения такого рода вещей.

Во-первых, / dev / tty находится на уровне процесса, это может быть ttyn (tty1, tty2, ...), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1) и что-то еще.

/ dev / tty0 - псевдоним текущей (основной) виртуальной консоли, поэтому это могут быть tty1, tty2 и т. д. Обратите внимание, что ttyS0 не является псевдонимом; Это первый последовательный порт.

/ dev / console - системная консоль, по умолчанию она указывает на / dev / tty0. Это может быть ttyn, ttySn, ttyUSBn, lpn и так далее.

Грубо говоря, / dev / tty> / dev / cosole> / dev / tty0

FIRO
источник
Это цитата откуда-то, есть ссылка на это? Может сделать для интересного чтения
Xen2050
@ Xen2050 нет, но надеюсь , что это полезно tldp.org/HOWTO/Remote-Serial-Console-HOWTO/...
FIRO