Cómo usa Linux / dev / tty y / dev / tty0

8

Puedo ver la diferencia entre / dev / tty y / dev / tty0 probando el método proporcionado de esta pregunta . Pero realmente me pregunto sobre el uso práctico de esos dispositivos (como situaciones en las que se usarán).

Ron Vince
fuente
@ 0xC0000022L De alguna manera, no puedo relacionar tty con sda porque a diferencia de sda, tty tiene 3 categorías diferentes (tty, tty0, tty [1, .., N]).
Ron Vince
Creo que la analogía proporcionada por @ 0xC0000022L es bastante engañosa. Ambos /dev/sday /dev/sda1designan dispositivos de bloque específicos (uno resulta ser una parte del otro). /dev/tty, por otro lado, es un dispositivo virtual relacionado con ningún otro tty específico.
Celada

Respuestas:

16

/dev/ttyes el tty controlador del proceso actual , para cualquier proceso que realmente abra este archivo especial. No es necesariamente un dispositivo de consola virtual ( /dev/ttyn ), y puede ser un, un puerto serie, etc. Si el tty controlador no es una consola virtual, entonces el proceso no tiene que interactuar con los dispositivos de la consola, incluso si su pseudotty se implementa realmente en la consola del sistema. P.ej. para un shell en un emulador de terminal bajo un servidor X que se ejecuta localmente, dichos programas forman una cadena de interacciones como:

   Unix shell
     ⇕ /dev/pts/2(≡ /dev/ttypara sus procesos)
 controlador kernel pty
     ⇕ /dev/ptmx
 terminal emulador
     ⇕ Protocolo X Window
   X servidor
     ⇕ /dev/tty7(≡ /dev/ttypara el servidor)
 consola del sistema
zxc↿⇂ [_̈ ° °]
    usuario

El uso de los /dev/ttyprogramas de usuario incluye:

  • Escriba algo en el terminal de control, ignorando todas las redirecciones y tuberías;
  • Haga un ioctl () - vea tty_ioctl (4);
  • Por ejemplo, desconectar de la terminal (TIOCNOTTY).

/dev/tty0es la consola virtual actualmente activa (es decir, visible en el monitor) del sistema operativo . Este archivo especial improbable que se utiliza de manera significativa por el software del sistema, pero /dev/consolees prácticamente un “alias” paratty0 y /dev/consoletiene mucho uso por los demonios de registro del sistema y, a veces, por el propio núcleo.

Experimente para mostrar la diferencia: ejecute un rootshell en tty3( Ctrl+ Alt+ F3) o en un emulador de terminal. Ahora

# sleep 2; echo test >/dev/tty

luego rápidamente Ctrl+ Alt+ F2, espere dos segundos y Ctrl+ Alt+ lo que sea de regreso. ¿Dónde ves la salida?
Y ahora la misma prueba para /dev/tty0.

Incnis Mrsi
fuente
Su respuesta no tiene diferencia con la respuesta proporcionada por la pregunta que vinculé en mi pregunta. Lo que me preocupa es el proceso de cómo el núcleo los usa juntos.
Ron Vince
@Ron Vince: actualizado.
Incnis Mrsi
¿Es obligatorio que un proceso escriba en / dev / tty en lugar de su / dev / tty específico [1, .., N]?
Ron Vince
@Ron Vince: Una vez más, un proceso ejecutado dentro de una sesión SSH (técnicamente, un hijo de sshd), o en una xtermventana, no tiene su especificación / dev / tty  n . No interactúa con los dispositivos de la consola del sistema , porque está conectado a un dispositivo pseudo-terminal. Esto no impide que abra / dev / tty  n si es un proceso raíz o si el mismo usuario inició sesión en tty  n . A punto de agregar algunos puntos sobre "tty específico" a la respuesta.
Incnis Mrsi
Digamos que uso xterm, que es un emulador de terminal. ¿Es esta la cadena (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> shell)? Para / dev / tty0, creo que lo tengo claro. La salida de cualquier proceso y núcleo se enviará al / dev / tty [1, .., N] que maneja el controlador de dispositivo tty ahora. Esta es la cadena (kernel / proceso -> / dev / tty0 -> current / dev / tty [1, .., N])
Ron Vince
2

/ dev / tty es el tty controlador para cualquier proceso. Este puede ser tu caparazón.

Si su proceso no tiene un tty controlador, / dev / tty no está disponible, esto es cierto para los demonios.

Si su proceso tiene un tty controlador, entonces / dev / tty es un alias de controlador para el controlador tty real que su proceso está utilizando para stdin, stdout o stderr.

Ver man -s7d ttypara más información. Tenga en cuenta que la sección donde se encuentra este manual puede diferir entre diferentes sistemas operativos y no debe confundirse con la página del manual en la sección 1. Por lo tanto, verifique, por ejemplo man -k tty.

astuto
fuente
"alias al controlador tty real que está usando su proceso". ¿El texto citado se refiere a tty [1, .., N]?
Ron Vince
El alias del controlador es algo diferente al solo alias. Es un controlador diferente, pero dirige el trabajo a cualquier cosa a la que esté realmente conectado su proceso.
schily
Si entiendo correctamente (también consulte tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), / dev / tty es la interfaz para el proceso actual (actualmente procesado por la CPU) a / dev / tty [1, .., N]. Mientras tanto, / dev / tty0 es la salida de datos que no pertenecen a / dev / tty [1, .., N] específico, por lo tanto, la salida a / dev / tty [1, .., N] que pertenece al proceso actual . Si eso es correcto, me pregunto cuándo se usará / dev / tty0.
Ron Vince
Si no tiene una casa propia, una posible entrada alternativa en esa casa no le daría una casa.
schily
Entonces, / dev / tty0 es enviar datos a la sesión de shell actual del superusuario (asociado a / dev / tty [1, .., N]).
Ron Vince