Чому в 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
    

    і наберіть щось на клавіатурі, я отримую відповідні виходи. чому це відбувається?


Відповіді:


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

Програми входу надають вам підказку для входу та дозволяє вам увійти з ім’ям користувача / паролем. Сценарії init визначають, де буде виконуватися вся програма входу. Отже, залежно від того, ви можете або не бачите підказку для входу, скажімо, tty9. Щоб повернутися до інтерфейсу GUI, натисніть Ctrl + Alt + F1 (як у прикладі виводу вище).

/ dev / tty0 - це спеціальний пристрій, який вказує на поточний термінал. Отже, незалежно від того, звідки ви його запускаєте (будь-яка віртуальна консоль), все, що читається з / написане на tty0, переходить до вашого поточного терміналу.

Другий стовпчик у 'ps ax' також дає контрольний термінал програми. Для деяких програм, наприклад демонів, ви можете бачити, що стовпець є "?", Що означає, що вони не прив'язані до терміналу.

/ dev / pts / 0 тощо - це пристрої psuedo-терміналів, які не приєднані до дисплея системи. наприклад, термінал, який ви отримуєте, коли відкриєте gnome-термінал або будь-який інший термінал GUI. Це підхід, орієнтований на клієнт-сервер, де клієнтська частина буде експортуватися в такі програми, як bash. Дані, що надсилаються програмою на псевдотермінал, надсилаються на сторону "сервера" (яка зазвичай контролюється іншою програмою, наприклад gnome-терміналом). Процес контролю (сторона сервера) визначає, що потрібно відправити в термінал, що в кінцевому підсумку бачиться клієнтом. Ці пристрої допомагають вам відкривати кілька "терміналів GUI" без будь-яких обмежень у вашій системі, все ще забезпечуючи такий самий старий термінал, як елементи керування (ioctl (), налаштування кольору, надсилання сигналів [Ctrl + C] тощо).


2
Звідки це можна знати, окрім запитань тут? якась сторінка людини?
n611x007

1
@ n611x007 - man /dev/ptsце гарний початок, також man termiosзауважте, що клієнт / сервер є двонаправленим серед ptys - ptm та pts - де віртуальний термінал, як gnome-термінал, або xterm, як правило, підключений до ведучого та оболонки, як bash, slave .
wulfgarpro

У моїй системі /dev/ttyє поточний контрольний термінал, але я не знаю, що таке /dev/tty0, однак /dev/tty1є Linux KMSCON. І /dev/tty7це X сервер.
CMCDragonkai

Однак це не відповідає на питання. Як зауважив Daehee, існує 64 / dev / ttyN пристроїв. 1-8 - це віртуальні консолі. ptys є окремими, under / 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


Це цитата звідкись, є посилання на неї? Може зробити цікавим для читання
Xen2050

@ Xen2050 Ні, але сподіваюся, що це корисно tldp.org/HOWTO/Remote-Serial-Console-HOWTO/…
firo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.