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 variosconsole=
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 control–alt–F1 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 porcron
y procesos por lotes similares no tienen/dev/tty
, ya que no están asociados con ninguno. Estos procesos tienen una?
en elTTY
columna deps -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.