¿Por qué hay tantos / dev / tty en Linux?

27

En ubuntu 10.04, si verifico bajo / dev, hay más de 50 ttys. tty0, tty1, tty2 ...

Entiendo que tty es un dispositivo de caracteres para la entrada / salida de la consola.

  1. pero ¿por qué hay tantos de ellos? ¿Es algo así como la piscina?

  2. ¿Y cuál es la diferencia entre / dev / pts / 0, 1, 2 ..., / dev / tty?

  3. Si abro un terminal, se crea un nuevo número en / dev / pts. pero no sé cuando / dev / tty? es usado

    incluso si creo una conexión SSH, el número de / dev / tty s es el mismo.

    y si lo hago

    cat /dev/tty0
    

    y escribo algo en el teclado, obtengo las salidas correspondientes. ¿Por qué está pasando esto?

daehee
fuente

Respuestas:

25

Los ttys no son solo dispositivos de entrada / salida. También hacen un trabajo especial de actuar como terminal de control para una sesión, como enviar señales (Ctrl + C). / dev / ttyNN son consolas virtuales, que son pantallas completas en el monitor.

Los terminales comienzan desde / dev / tty1. Por lo general, puede cambiar a estas consolas presionando las teclas Ctrl + Alt + Fn.

por ejemplo, Ctrl + Alt + F1 te lleva a la primera terminal virtual. Hoy en día, la mayoría de las distribuciones de Linux ejecutan el servidor X desde tty1. Por lo tanto, presionar Ctrl + Alt + F1 puede no tener efecto.

$ 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 lo llevará a la segunda terminal. Por lo general, las distribuciones ejecutan un programa de inicio de sesión (agetty) en el terminal virtual.

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

Los programas de inicio de sesión le proporcionan una solicitud de inicio de sesión y le permiten iniciar sesión con nombre de usuario / contraseña. Los scripts de inicio deciden dónde se ejecutará todo el programa de inicio de sesión. Entonces, dependiendo de eso, puede o no ver un mensaje de inicio de sesión, diga tty9. Para volver a su interfaz GUI, presione Ctrl + Alt + F1 (como en la salida de ejemplo anterior).

/ dev / tty0 es un dispositivo especial que apunta al terminal actual. Entonces, independientemente de dónde lo ejecute (cualquier consola virtual), cualquier cosa leída / escrita en tty0 va a su terminal actual.

La segunda columna en 'ps ax' también proporciona el terminal de control del programa. Para algunos programas, como los demonios, puede ver que la columna es '?', Lo que significa que no están vinculados a un terminal.

/ dev / pts / 0 etc. son dispositivos psuedo-terminales, que no están conectados a la pantalla del sistema. por ejemplo, la terminal que obtienes cuando abres una terminal gnome o cualquier otra terminal GUI. Estos son enfoques basados ​​en cliente-servidor donde el lado del cliente se exportará a programas, como bash. Los datos enviados por el programa al pseudo terminal se envían al lado del 'servidor' (que generalmente es monitoreado por otro programa, como gnome-terminal). El proceso de control (del lado del servidor) determina lo que debe enviarse al terminal, que eventualmente ve el cliente. Estos dispositivos lo ayudan a abrir múltiples 'terminales GUI' sin ningún límite en su sistema, y ​​aún proporcionan el mismo terminal antiguo como controles (ioctl (), configuración de color, envío de señales [Ctrl + C] etc.).

Garfio
fuente
2
¿Cómo debería uno saber esto, excepto preguntarlo aquí? alguna página de manual?
n611x007
1
@ n611x007 - también man /dev/ptses un buen comienzo, man termiostenga en cuenta que el cliente / servidor es bidireccional entre los ptys - ptm y pts - donde un terminal virtual como gnome-terminal o xterm generalmente está conectado al maestro y un shell como bash, el esclavo .
wulfgarpro
En mi sistema /dev/ttyestá el terminal de control actual, pero no sé qué /dev/tty0, sin embargo, /dev/tty1es el KMSCON de Linux. Y /dev/tty7es el servidor X.
CMCDragonkai
Sin embargo, esto no responde la pregunta. Como dijo Daehee, hay 64 dispositivos / dev / ttyN. 1-8 son consolas virtuales. Los ptys están separados, bajo / dev / pts. ¿En qué sistema se usa, por ejemplo, / dev / tty30, y cómo?
Andrew McGuinness
1

Solo quiero aclarar las relaciones de este tipo de cosas.

Primero, / dev / tty está en el nivel de proceso, puede ser ttyn (tty1, tty2, ...), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1) y algo más.

/ dev / tty0 es un alias de la consola virtual actual (en primer plano), por lo que podría ser tty1, tty2, etc. Tenga en cuenta que ttyS0 no es un alias; Es el primer puerto serie.

/ dev / console es la consola del sistema, apunta a / dev / tty0 como valor predeterminado. Puede ser ttyn, ttySn, ttyUSBn, lpn, etc.

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

Firo
fuente
¿Es una cita de algún lado, tiene una referencia? Puede ser una lectura interesante
Xen2050
@ Xen2050 No, pero espero que esto sea útil tldp.org/HOWTO/Remote-Serial-Console-HOWTO/…
firo