Saltar al contenido

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

Este dilema se puede abordar de diversas maneras, pero nosotros te compartimos la que para nosotros es la resolución más completa.

Solución:

De la documentación del kernel de Linux en Kernel.org:

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

En los buenos 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 representan la pantalla actual y normalmente son iguales. Puede anularlo, por ejemplo, agregando console=ttyS0 para 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 control+Alt+F2. Iniciar sesión como root. Escribe sleep 5; echo tty0 > /dev/tty0. prensa Ingresar y cambie a la tercera consola presionando Alt+F3. Ahora vuelva a la segunda consola presionando Alt+F2. Escribe sleep 5; echo tty > /dev/tty, prensa Ingresar y cambie a la tercera consola.

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

  • /dev/console es un conjunto virtual de dispositivos que se puede configurar como parámetro en el momento del arranque. Puede redirigirse a un dispositivo serie o una consola virtual y, de forma predeterminada, apunta a /dev/tty0. Cuando varios console= las opciones se pasan al kernel, la salida de la consola irá a más de un dispositivo;

  • /dev/tty[0-N] (N es el número TTY atribuido más alto, por ejemplo, 63) es una de las consolas virtuales a las que cambia con controlaltF1 etcétera;

  • /dev/tty0 también es por defecto una consola virtual;

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

/ dev / console

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

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

Puedes 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 ambas console=ttyS0 y console=ttyS1.

La documentación del kernel especifica /dev/console como un dispositivo de carácter 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 no kernel, llamado init o “PID 1”, comienza con /dev/console conectado a salida estándar, error estándar y entrada estándar.

Si ninguna de las consolas es un tty, entonces abriendo /dev/console devuelve el error ENODEV (“Hay tal dispositivo”). El kernel impresión registrar un mensaje y empezar init a pesar de todo. Para ver un ejemplo de una consola del kernel 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. La documentación de systemd señala que primero El dispositivo que se muestra es la consola principal. En realidad, la lista está en orden inverso al de la línea de comandos del kernel. La documentación actual del kernel indica incorrectamente que el último dispositivo mostrado 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 una systemd-nspawn contenedor, el estándar /dev/console El archivo se reemplaza con un dispositivo pseudo-terminal (PTY). Estos se describirían mejor como dispositivos terminales virtuales. Se crean dinámicamente y también se utilizan para implementar emuladores de terminales gráficos como GNOME Terminal, y para acceso remoto como ssh.

/ dev / tty0

Los nodos del dispositivo TTY de Linux tty1 mediante tty63 son terminales virtuales. También se denominan VT o consolas virtuales. Simulan varias consolas sobre el controlador del dispositivo de la consola física. Solo se muestra y se controla una consola virtual a la vez. El terminal activo puede conmutarse, p. Ej., Utilizando chvt, o Ctrl + Alt + F1 a través de muchas funciones keys tú tienes.

También puede leer y escribir en el VT actual usando /dev/tty0. tty0 es la consola del núcleo habitual, por ejemplo, si no seleccionó una explícitamente. “El sistema busca primero una tarjeta VGA [which is what VTs run on] y luego para un puerto serie “. También puede configurar la consola a un VT específico, por ejemplo console=tty1.

“Si no tiene una tarjeta VGA en su sistema, el primer puerto serie se convertirá automáticamente en la consola”. Una “consola en serie” como ttyS0 es probablemente la alternativa más común a tty0. No es posible utilizar el sistema VT encima de una consola 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. La terminal de control se establece cuando un proceso abre por primera vez una 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 que tradicionalmente se requieren para iniciar un proceso en segundo plano, por ejemplo, un demonio de registro del sistema. Los pasos para convertirse en un proceso en segundo plano son horriblemente 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, por ejemplo systemd, inicia el servicio sin ningún terminal de control en primer lugar.

Si guardas algún reparo y disposición de aumentar nuestro escrito te proponemos realizar una observación y con placer lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *