desarrollo-web-br-bd.com

Linux: diferencia entre / dev / console, / dev / tty y / dev / tty0

En un sistema Linux, ¿cuál es la diferencia entre /dev/console, /dev/tty y /dev/tty0?

¿Cuál es su uso respectivo y cómo se comparan?

142
Axel Fontaine

Del documentación :

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

En los viejos tiempos /dev/console era la consola del administrador del sistema. Y los TTY eran dispositivos seriales de los usuarios conectados a un servidor. Ahora /dev/console y /dev/tty0 representa la pantalla actual y generalmente son las mismas. Puede anularlo, por ejemplo, agregando console=ttyS0 a grub.conf. Después de eso tu /dev/tty0 es un monitor y /dev/console es /dev/ttyS0.

Un ejercicio para mostrar la diferencia entre /dev/tty y /dev/tty0:

Cambie a la segunda consola presionando Ctrl+Alt+F2. Inicie sesión como root. Tipo sleep 5; echo tty0 > /dev/tty0. prensa Enter y cambie a la tercera consola presionando Alt+F3. Ahora vuelva a la segunda consola presionando Alt+F2. Tipo sleep 5; echo tty > /dev/tty, prensa Enter y cambia a la tercera consola.

Puede ver que tty es la consola donde comienza el proceso, y tty0 es una consola siempre actual.

97
dchirikov
  • /dev/console es un conjunto virtual de dispositivos que se pueden configurar como parámetro en el momento del arranque. Puede ser redirigido a un dispositivo serie o una consola virtual y, por defecto, apunta a /dev/tty0. Cuando múltiples console= las opciones se pasan al kernel, la salida de la consola irá a más de un dispositivo.

  • /dev/tty0 es la consola virtual actual

  • /dev/tty[1-x] es una de las consolas virtuales a las que cambias control-alt-F1 y así.

  • /dev/tty es una especie de alias de la consola (física, virtual o pseudo dispositivo, si la hay) asociada al proceso que la abre. A diferencia de los otros dispositivos, no necesita privilegios de root para escribir en él. Tenga en cuenta también que los procesos como los iniciados por cron y procesos por lotes similares no pueden utilizarse /dev/tty, ya que no están asociados con ninguno. Estos procesos tienen un ? en la columna TTY de ps -ef salida.

59
jlliagre

/ dev/console

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

En Linux, la consola del kernel se puede configurar usando console=opción de arranque . El código del kernel que llama a printk() puede escribirle mensajes, p. cuando se carga un dispositivo o se produce un error. Estos mensajes también son almacenados por el núcleo. (Ver también dmesg ). Cuando se encuentra e inicia un dispositivo de consola, recibe todos los mensajes almacenados previamente en el búfer.

Puede pasar console= Varias veces para configurar varias consolas, y se escribirán mensajes en todas ellas. Aparentemente, solo puede seleccionar una consola de cada "tipo": no puede usar tanto console=ttyS0 Como console=ttyS1.

La documentación del kernel especifica /dev/console Como un dispositivo de caracteres numerado (5,1). Al abrir este dispositivo de caracteres se abre la consola "principal", que es el último tty en la lista de consolas. El primer proceso que no es del núcleo, llamado init o "PID 1", se inicia con /dev/console Conectado a la salida estándar, error estándar y entrada estándar.

Si ninguna de las consolas es un tty, al abrir /dev/console Se devuelve el error ENODEV ("No existe tal dispositivo") El kernel impresión registre un mensaje e inicie init independientemente. Para ver un ejemplo de una consola del núcleo que no es un dispositivo tty, consulte netconsole , o mi consola favorita la impresora de línea .

También puede ver una lista de consolas tty leyendo /sys/class/tty/console/active. documentación de systemd señala que el primer dispositivo que se muestra es la consola principal. La lista está en el orden inverso de la línea de comando del núcleo. documentación actual del núcleo indica incorrectamente que el último dispositivo que se muestra es la consola principal o "activa". Por alguna razón, es posible sondear este archivo en busca de cambios (¿en caso de que se eliminen los dispositivos de la consola?).

Dentro de un contenedor systemd-nspawn , el archivo estándar /dev/console Se reemplaza con un dispositivo pseudo-terminal (PTY). Estos se describirían mejor como dispositivos de terminal virtual. Se crean dinámicamente y también se usan para implementar emuladores gráficos de terminal como GNOME Terminal y para acceso remoto como ssh.

/ dev/tty0

El TTY de Linux nodos de dispositivotty1 Hasta tty63 Son terminales virtuales. También se les conoce como VT o consolas virtuales. Simulan varias consolas en la parte superior del controlador del dispositivo de la consola física. Solo se muestra y se controla una consola virtual a la vez. El terminal activo se puede cambiar, p. usando chvt, o Ctrl + Alt + F1 a través de las teclas de función que tenga.

También puede leer y escribir en el VT actual usando /dev/tty0. tty0 Es la consola del núcleo habitual, p. si no seleccionó uno explícitamente. "El sistema primero busca una tarjeta VGA [que es en lo que se ejecutan los VT] y luego un puerto serie". También puede configurar la consola a un TV específico, p. console=tty1.

"Si no tiene una tarjeta VGA en su sistema, el primer puerto serie se convertirá automáticamente en la consola". Una "consola serie" como ttyS0 Es probablemente la alternativa más común a tty0. No es posible utilizar el sistema VT encima de una consola en serie.

/ dev/tty

/dev/tty Es uno de los tres archivos de dispositivo estándar especificados por POSIX (/dev/ Es uno de los tres nombres de directorio especificados por POSIX). Abrirlo equivale a abrir el terminal de control del proceso actual. El terminal de control se establece cuando un proceso abre por primera vez un terminal, al menos en Linux . Por ejemplo, en init, se referiría a /dev/console.

Separarse del terminal de control es uno de los pasos tradicionalmente necesarios para iniciar un proceso en segundo plano, por ejemplo, un daemon de registro del sistema . Los pasos para convertirse en un proceso en segundo plano son terriblemente intrincados, pero para ser específicos, el paso que se separa del terminal de control es la llamada al sistema setsid . En sistemas más modernos, el sistema init, p. systemd inicia el servicio sin ningún terminal de control en primer lugar.

22
sourcejedi