De esta respuesta a Linux: Diferencia entre / dev / console, / dev / tty y / dev / tty0
De la 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
representan la pantalla actual y generalmente son lo mismo. Puede anularlo, por ejemplo, agregandoconsole=ttyS0
agrub.conf
. Después de eso, tu/dev/tty0
es un monitor y lo/dev/console
es/dev/ttyS0
.
Por " Consola del sistema ", /dev/console
parece el archivo del dispositivo de un terminal físico de texto, al igual /dev/tty{1..63}
que los archivos del dispositivo para las consolas virtuales.
Por " /dev/console
y /dev/tty0
representan la pantalla actual y generalmente son las mismas", /dev/console
me parece que también puede ser el archivo del dispositivo de una consola virtual. /dev/console
parece más parecido /dev/tty0
que como /dev/tty{1..63}
( /dev/tty0
es la consola virtual actualmente activa, y puede ser cualquiera de /dev/tty{1..63}
).
¿Qué es /dev/console
? ¿Para qué se usa esto?
¿ /dev/console
Juega el mismo papel para el kernel de Linux que /dev/tty
para un proceso? (¿ /dev/tty
Es el terminal de control de la sesión de proceso del proceso, y puede ser un punto, /dev/ttyn
donde n
es de 1 a 63 o más?)
La otra respuesta menciona:
La documentación del núcleo se 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.
Significa "la lista de las consolas" significa todos los console=
's en la opción de arranque ?
Por " /dev/console
como un dispositivo de caracteres numerado 5: 1", ¿significa que /dev/console
es el archivo del dispositivo de un terminal de texto físico, es decir, una consola del sistema? (Pero nuevamente, la primera respuesta que cité anteriormente dice que /dev/console
puede ser la misma /dev/tty0
que no es un terminal de texto físico, sino una consola virtual)
Gracias.
Respuestas:
/dev/console
existe principalmente para exponer la consola del kernel al espacio de usuario. La documentación del kernel de Linux en dispositivos ahora dice/dev/console
, el nodo de dispositivo con mayor 5 y menor 1, proporciona acceso a cualquier cosa que el núcleo considere su principal medio de interacción con el administrador del sistema; Esto puede ser una consola física conectada al sistema (con la abstracción de la consola virtual en la parte superior, por lo que puede usartty0
o en cualquier lugarttyN
donde N esté entre 1 y 63), o una consola serie, o una consola de hipervisor, o incluso un dispositivo Braille. Tenga en cuenta que el núcleo en sí no usa/dev/console
: los nodos de los dispositivos son para el espacio de usuario, no para el núcleo; sin embargo, verifica si/dev/console
existe y es utilizable, y seinit
configura con su entrada, salida y error estándar apuntando a/dev/console
.Como se describe aquí,
/dev/console
es un dispositivo de caracteres con un mayor y menor fijo porque es un dispositivo separado (como en, un medio de acceso al núcleo; no un dispositivo físico), no equivalente a/dev/tty0
ningún otro dispositivo. Esto es algo similar a la situación con la/dev/tty
que se encuentra su propio dispositivo (5: 0) porque proporciona características ligeramente diferentes a las de la otra consola virtual o dispositivos terminales.La "lista de consolas" es, de hecho, la lista de consolas definidas por los
console=
parámetros de arranque (o la consola predeterminada, si no hay ninguna). Puede ver las consolas definidas de esta manera mirando/proc/consoles
./dev/console
de hecho proporciona acceso al último de estos :fuente
"¿Qué es
/dev/console
?" se responde en la respuesta anterior . Quizás esa respuesta sea más clara cuando conozca las respuestas a las otras dos preguntas.Q1. "¿Cuál es el archivo del dispositivo que representa el terminal físico en sí?"
No existe tal archivo de dispositivo.
Q2 "¿Para qué se
/dev/console
usa?"En Linux,
/dev/console
se usa para mostrar mensajes durante el inicio (y apagado). También se usa para el "modo de usuario único", como se señala en la respuesta de Stephen Kitt. No hay mucho más para lo que tenga sentido usarlo."En los viejos tiempos" de Unix,
/dev/console
era un dispositivo físico dedicado. Pero este no es el caso en Linux.Evidencia relacionada
1. "¿Cuál es el archivo del dispositivo que representa el propio terminal físico?"
Los dispositivos subyacentes para
/dev/tty{1..63}
sonstruct con_driver
. Para ver todos los controladores posibles, consulte https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_console¡No hay ningún archivo de dispositivo para estos dispositivos subyacentes!
Solo hay una interfaz mínima de espacio de usuario para administrarlos.
Si realmente quiere saber más, el
(M)
sinónimo de módulo . Es decir, el dispositivo de consola ficticio no es proporcionado por un módulo de núcleo cargable; es parte de la imagen inicial del núcleo (también conocida como "incorporada").En segundo lugar, el
bind
archivo en cada subdirectorio de/sys/class/vtconsole
parece indicarle qué dispositivo vtconsole está activo. Si escribo0
en el activo, parece cambiar al simulado. (Los VT de GUI parecen no verse afectados, pero los VT de texto dejan de funcionar). Escribir1
para el muerto no lo activa. Cualquiera de los métodos funciona para volver al real. Si leo el código correctamente, el truco es queecho 1 > bind
solo se supone que funciona para los controladores de consola que se construyen como un módulo (?!).Para las consolas framebuffer específicamente, hay más información sobre cómo vincular diferentes dispositivos framebuffer (
/dev/fb0
...) a consolas virtuales específicas en https://kernel.org/doc/Documentation/fb/fbcon.txt . Esto implica una opción de kernelfbcon:map=
o un comando llamadocon2fbmap
.Por supuesto, los detalles pueden variar con diferentes versiones del núcleo, arquitecturas, firmwares, dispositivos, controladores, etc. Nunca he tenido que usar ninguna de las interfaces anteriores. El kernel simplemente deja que
i915
/inteldrmfb
/ como quieras llamarlo se haga cargo cuando se carga, reemplazando, por ejemplovgacon
.Parece que mi máquina EFI nunca lo ha hecho
vgacon
. Por lo tanto, en primer lugar, utiliza una consola ficticia y, en segundo lugar, después de 1,2 segundos cambia afbcon
, ejecutándose encimaefifb
. Pero hasta ahora no he tenido que preocuparme por los detalles; Simplemente funciona.2. "¿Para qué se
/dev/console
utiliza?"Puede usar / dev / console como dispositivo TTY. Escribir en él, por ejemplo, escribirá en un dispositivo subyacente específico, que también tendrá un número de dispositivo de caracteres propio.
A menudo, / dev / console está vinculado a / dev / tty0, pero a veces puede estar vinculado a un dispositivo diferente.
Entonces, en este caso, escribir en / dev / console escribirá en / dev / tty0. Y a su vez, escribir en / dev / tty0 es equivalente a escribir en cualquier dispositivo / dev / ttyN que esté actualmente activo.
Pero esto plantea una pregunta interesante. Accediendo
tty0
accederá a diferentes consolas virtuales, dependiendo de cuál esté actualmente activo. ¿Para qué usan realmente las personastty0
, y de manera similar para qué seconsole
usa en Linux?Técnicamente, puede leer y escribir desde
console
/tty0
, por ejemplo, ejecutando agetty
para permitir iniciar sesióntty0
. Pero esto solo es útil como un truco rápido. Porque significa que no puede aprovechar las múltiples consolas virtuales de Linux.systemd
buscasysfs
un atributo asociado con el dispositivo / dev / console para detectar el dispositivo TTY subyacente. Esto permitesystemd
generar automáticamente ungetty
e iniciar sesión, por ejemplo, en una consola en serie, cuando el usuario configura una consola del núcleo iniciando conconsole=ttyS0
. Esto es conveniente; evita la necesidad de configurar esta consola en dos lugares diferentes. De nuevo, miraman systemd-getty-generator
. Sin embargo, ensystemd
realidad no se abre/dev/console
para esto.Durante el arranque del sistema, es posible que ni siquiera tenga sysfs montados todavía. ¡Pero desea poder mostrar mensajes de error y progreso tan pronto como sea posible! Entonces damos la vuelta al punto 1). El núcleo inicia el PID 1 con stdin / stdout / stderr conectado
/dev/console
. Es muy bueno tener este mecanismo simple configurado desde el principio.Dentro de un contenedor de Linux, el archivo en
/dev/console
puede crearse como algo diferente, no como el número de dispositivo de caracteres5:1
. En cambio, se puede crear como un archivo de dispositivo PTS. Entonces tendría sentido iniciar sesión a través de este/dev/console
archivo.systemd
dentro de un contenedor permitirá iniciar sesión en dicho dispositivo; verman systemd-getty-generator
.Este mecanismo se usa cuando ejecuta un contenedor con el
systemd-nspawn
comando. (Creo que solo cuando ejecutassystemd-nspawn
un TTY, aunque no puedo distinguirlo al buscar en la página de manual).systemd-nspawn
crea el contenedor/dev/console
como un montaje de enlace de un dispositivo PTS desde el host. Esto significa que este dispositivo PTS no es visible/dev/pts/
dentro del contenedor.Los dispositivos PTS son locales para un
devpts
montaje específico . Los dispositivos PTS son una excepción a la regla normal, que los dispositivos se identifican por su número de dispositivo. Los dispositivos PTS se identifican por la combinación de su número de dispositivo y sudevpts
montaje.Puede escribir mensajes urgentes en
console
/tty0
, para escribir en la consola virtual actual del usuario. Esto podría ser útil para los mensajes de error urgentes del espacio de usuario, similares a los mensajes urgentes del núcleo que se imprimen en la consola (verman dmesg
). Sin embargo, no es común hacer esto, al menos una vez que el sistema ha finalizado el arranque.rsyslog tiene un ejemplo en esta página , que imprime mensajes del kernel
/dev/console
; Esto no tiene sentido en Linux porque el núcleo ya lo hará de forma predeterminada. Un ejemplo que no puedo encontrar nuevamente dice que no es una buena idea usar esto para mensajes que no son del núcleo porque hay demasiados mensajes de syslog, inunda su consola y se interpone demasiado.systemd-journald también tiene opciones para reenviar todos los registros a la consola. En principio, esto podría ser útil para la depuración en un entorno virtual. Aunque, para la depuración, generalmente lo reenviamos
/dev/kmsg
. Esto los guarda en el búfer de registro del núcleo para que pueda leerlosdmesg
. Al igual que los mensajes generados por el núcleo en sí, estos mensajes pueden repetirse en la consola dependiendo de la configuración actual del núcleo.fuente
xconsole
para realizar un seguimiento de lo que estaba sucediendo ;-). (Y para evitar que los mensajes se escriban directamente en el framebuffer, por ejemplo , en estaciones SPARC.)/dev/tty{1..63}
y/dev/pts/n
son archivos de dispositivos que representan dispositivos en sí mismos (aunque son emulaciones), no en relación con el proceso o el núcleo./dev/tty0
representa el/dev/tty{1..63}
que actualmente usa algo (¿tal vez un proceso de kernel o shell?)./dev/tty
representa el terminal de control utilizado actualmente por una sesión de proceso./dev/console
representa el terminal utilizado actualmente por el kernel? ¿Cuál es el archivo del dispositivo que representa el terminal físico en sí, no en relación con el núcleo o el proceso?