Por que existem tantos / dev / tty no Linux?

27

No ubuntu 10.04, se eu verificar em / dev, existem mais de 50 ttys. tty0, tty1, tty2 ....

Entendo que tty é um dispositivo de caracteres para entrada / saída de console.

  1. mas por que existem tantos? é algo como piscina?

  2. e qual é a diferença entre / dev / pts / 0, 1, 2 ..., / dev / tty?

  3. Se eu abrir um terminal, um novo número será criado em / dev / pts. mas eu não sei quando / dev / tty? é usado.

    mesmo se eu criar uma conexão SSH, o número de / dev / tty s será o mesmo.

    e se eu fizer

    cat /dev/tty0
    

    e digitar algo no teclado, recebo saídas correspondentes. Por que isso está acontecendo?

daehee
fonte

Respostas:

25

Os ttys não são apenas dispositivos de entrada / saída. Eles também fazem um trabalho especial de atuar como o terminal de controle de uma sessão, como o envio de sinais (Ctrl + C). / dev / ttyNN são consoles virtuais, que são exibidos em tela cheia no monitor.

Os terminais começam em / dev / tty1. Você pode alternar para esses consoles, geralmente, pressionando as teclas Ctrl + Alt + Fn.

por exemplo, Ctrl + Alt + F1 leva você ao primeiro terminal virtual. Atualmente, a maioria das distribuições Linux roda o servidor X a partir do tty1. Portanto, pressionar Ctrl + Alt + F1 pode não ter efeito.

$ 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 o levará ao segundo terminal. Geralmente, as distribuições executam um programa de login (agetty) no terminal virtual.

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

Os programas de login fornecem um prompt de login e permitem que você faça login com nome de usuário / senha. Os scripts init decidem onde todo o programa de login será executado. Portanto, dependendo disso, você pode ou não ver um prompt de login, digamos tty9. Para voltar à sua interface GUI, pressione Ctrl + Alt + F1 (como no exemplo da saída acima).

/ dev / tty0 é um dispositivo especial, que aponta para o terminal atual. Portanto, independentemente de onde você o execute (qualquer console virtual), qualquer coisa lida / gravada em tty0 vai para o seu terminal atual.

A segunda coluna em 'ps ax' também fornece o terminal de controle do programa. Para alguns programas, como daemons, você pode ver que a coluna é '?', O que significa que eles não estão vinculados a um terminal.

/ dev / pts / 0 etc são dispositivos psuedo-terminal, que não estão conectados à tela do sistema. por exemplo, o terminal obtido quando você abre um terminal gnome ou qualquer outro terminal da GUI. Essas são abordagens baseadas em cliente-servidor, onde o lado do cliente será exportado para programas, como o bash. Os dados enviados pelo programa para o pseudo terminal são enviados para o lado do 'servidor' (que geralmente é monitorado por outro programa, como o gnome-terminal). O processo de controle (lado do servidor) determina o que precisa ser enviado ao terminal, o que é eventualmente visto pelo cliente. Esses dispositivos ajudam você a abrir vários 'terminais da GUI' sem nenhum limite no sistema, ainda fornecendo o mesmo terminal antigo como controles (ioctl (), configuração de cores, envio de sinais [Ctrl + C] etc.).

Gaff
fonte
2
Como alguém deve saber disso, exceto perguntar aqui? alguma página de manual?
N611x007
11
@ n611x007 - man /dev/ptsé um bom começo, man termiosobserve também que cliente / servidor é bidirecional entre os ptys - ptm e pts - onde um terminal virtual como gnome-terminal ou xterm geralmente está conectado ao mestre e um shell como bash, o escravo .
Wulfgarpro
No meu sistema /dev/ttyestá o terminal de controle atual, mas não sei o que é /dev/tty0, no entanto, /dev/tty1é o KMSCON do Linux. E /dev/tty7é um servidor X.
precisa saber é o seguinte
Isso não responde à pergunta, no entanto. Como daehee observou, existem dispositivos 64 / dev / ttyN. 1 a 8 são consoles virtuais. Os ptys são separados, em / dev / pts. Em que sistema, digamos, / dev / tty30 já é usado e como?
Andrew McGuinness
1

Eu só quero esclarecer as relações desse tipo de coisa.

Primeiro, / dev / tty está no nível do processo, pode ser ttyn ( tty1 , tty2, ...), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1) e outra coisa.

/ dev / tty0 é um alias do console virtual atual (em primeiro plano), portanto pode ser tty1, tty2 e assim por diante. Observe que ttyS0 não é um alias; É a primeira porta serial.

/ dev / console é o console do sistema, aponta para / dev / tty0 como padrão. Pode ser ttyn, ttySn, ttyUSBn, lpn e assim por diante.

Aproximadamente, / dev / tty> / dev / cosole> / dev / tty0

firo
fonte
É uma citação de algum lugar, tem uma referência para isso? Pode fazer uma leitura interessante
Xen2050 18/03/2017
@ Xen2050 Não, mas espero que este útil tldp.org/HOWTO/Remote-Serial-Console-HOWTO/...
firo