Dlaczego w Linuksie jest tak dużo / dev / tty?

27

W Ubuntu 10.04, jeśli sprawdzę pod / dev, jest więcej niż 50 tty. tty0, tty1, tty2 ....

Rozumiem, że tty jest urządzeniem znakowym dla wejścia / wyjścia konsoli.

  1. ale dlaczego jest ich tak wiele? czy to jest coś takiego jak basen?

  2. a jaka jest różnica między / dev / pts / 0, 1, 2 ..., / dev / tty?

  3. Jeśli otworzę terminal, nowy numer zostanie utworzony pod / dev / pts. ale nie wiem kiedy / dev / tty? Jest używane.

    nawet jeśli utworzę połączenie SSH, liczba / dev / tty jest taka sama.

    a jeśli to zrobię

    cat /dev/tty0
    

    i wpisuję coś na klawiaturze, otrzymuję odpowiednie dane wyjściowe. dlaczego to się dzieje?

Daehee
źródło

Odpowiedzi:

25

Tty to nie tylko urządzenia wejścia / wyjścia. Wykonują także specjalne zadanie, działając jako terminal kontrolny dla sesji, na przykład wysyłając sygnały (Ctrl + C). / dev / ttyNN to wirtualne konsole, które są pełnoekranowymi wyświetlaczami na monitorze.

Terminale zaczynają się od / dev / tty1. Możesz przełączyć się na te konsole, zwykle naciskając klawisze Ctrl + Alt + Fn.

np. Ctrl + Alt + F1 przeniesie Cię do pierwszego wirtualnego terminala. Obecnie większość dystrybucji Linuksa obsługuje serwer X z tty1. Tak więc naciśnięcie Ctrl + Alt + F1 może nie przynieść efektu.

$ 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 przeniesie Cię do drugiego terminala. Zwykle dystrybucje uruchamiają program logowania (agetty) na terminalu wirtualnym.

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

Programy do logowania wyświetlają monit o zalogowanie i umożliwiają logowanie przy użyciu nazwy użytkownika / hasła. Skrypty inicjujące decydują, gdzie zostanie uruchomiony cały program logowania. Więc w zależności od tego możesz zobaczyć monit o zalogowanie się, powiedz tty9. Aby powrócić do interfejsu GUI, naciśnij Ctrl + Alt + F1 (jak w przykładzie wyjściowym powyżej).

/ dev / tty0 to specjalne urządzenie, które wskazuje aktualny terminal. Niezależnie od tego, skąd go uruchamiasz (dowolna konsola wirtualna), wszystko, co jest czytane / zapisywane do tty0, trafia do twojego bieżącego terminala.

Druga kolumna w „ps ax” podaje również terminal sterujący programu. W przypadku niektórych programów, takich jak demony, może się okazać, że kolumna to „?”, Co oznacza, że ​​nie są powiązane z terminalem.

/ dev / pts / 0 itp. to urządzenia psuedo-terminal, które nie są podłączone do wyświetlacza systemu. na przykład terminal otrzymujesz po otwarciu terminalu gnome lub dowolnego innego interfejsu GUI. Są to podejście klient-serwer, w którym strona klienta zostanie wyeksportowana do programów, takich jak bash. Dane wysyłane przez program do pseudo terminala są wysyłane po stronie „serwera” (która jest zwykle monitorowana przez inny program, na przykład gnome-terminal). Proces kontrolny (po stronie serwera) określa, co należy wysłać do terminala, co ostatecznie widzi klient. Urządzenia te pomagają otwierać wiele „terminali GUI” bez żadnych ograniczeń w systemie, nadal zapewniając ten sam stary terminal, jak elementy sterujące (ioctl (), ustawienia kolorów, wysyłanie sygnałów [Ctrl + C] itp.).

Gafel
źródło
2
Skąd to wiedzieć, z wyjątkiem pytania tutaj? jakaś strona man?
n611x007
1
@ n611x007 - man /dev/ptsto dobry początek, należy również man termiospamiętać, że klient / serwer jest dwukierunkowy między ptys - ptm i pts - gdzie terminal wirtualny, taki jak gnome-terminal lub xterm, jest zwykle podłączony do master i powłoki jak bash, slave .
wulfgarpro
W moim systemie /dev/ttyjest obecny terminal kontrolny, ale nie wiem, co to jest /dev/tty0, jednak /dev/tty1jest Linux KMSCON. I /dev/tty7jest serwerem X.
CMCDragonkai,
To jednak nie odpowiada na pytanie. Jak zauważył Daehee, istnieją urządzenia 64 / dev / ttyN. 1-8 to wirtualne konsole. ptys są osobne, poniżej / dev / pts. W jakim systemie, powiedzmy, / dev / tty30 kiedykolwiek się przyzwyczaja i jak?
Andrew McGuinness,
1

Chcę tylko wyjaśnić relacje tego rodzaju rzeczy.

Po pierwsze, / dev / tty jest na poziomie procesu, może to być ttyn (tty1, tty2, ...), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1) i coś innego.

/ dev / tty0 to alias bieżącej (nowej wiedzy) konsoli wirtualnej, więc może to być tty1, tty2 itd. Zauważ, że ttyS0 nie jest aliasem; To pierwszy port szeregowy.

/ dev / console jest konsolą systemową, domyślnie wskazuje / dev / tty0. Może to być ttyn, ttySn, ttyUSBn, lpn i tak dalej.

Z grubsza, / dev / tty> / dev / cosole> / dev / tty0

firo
źródło
Czy to skądś cytat, masz do niego referencję? Może stanowić ciekawą lekturę
Xen2050,
@ Xen2050 Nie, ale mam nadzieję, że ta pomocna tldp.org/HOWTO/Remote-Serial-Console-HOWTO/…
firo