26

В 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
    

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

2 ответа2

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] и т.д.),

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .