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 consoleEn los viejos tiempos
/dev/consoleera la consola del administrador del sistema. Y los TTY eran dispositivos seriales de los usuarios conectados a un servidor. Ahora/dev/consoley/dev/tty0representan la pantalla actual y generalmente son lo mismo. Puede anularlo, por ejemplo, agregandoconsole=ttyS0agrub.conf. Después de eso, tu/dev/tty0es un monitor y lo/dev/consolees/dev/ttyS0.
Por " Consola del sistema ", /dev/consoleparece 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/consoley /dev/tty0representan la pantalla actual y generalmente son las mismas", /dev/consoleme parece que también puede ser el archivo del dispositivo de una consola virtual. /dev/consoleparece más parecido /dev/tty0que como /dev/tty{1..63}( /dev/tty0es la consola virtual actualmente activa, y puede ser cualquiera de /dev/tty{1..63}).
¿Qué es /dev/console? ¿Para qué se usa esto?
¿ /dev/consoleJuega el mismo papel para el kernel de Linux que /dev/ttypara un proceso? (¿ /dev/ttyEs el terminal de control de la sesión de proceso del proceso, y puede ser un punto, /dev/ttyndonde nes de 1 a 63 o más?)
La otra respuesta menciona:
La documentación del núcleo se especifica
/dev/consolecomo 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/consolecomo un dispositivo de caracteres numerado 5: 1", ¿significa que /dev/consolees 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/consolepuede ser la misma /dev/tty0que no es un terminal de texto físico, sino una consola virtual)
Gracias.

Respuestas:
/dev/consoleexiste 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 usartty0o en cualquier lugarttyNdonde 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/consoleexiste y es utilizable, y seinitconfigura con su entrada, salida y error estándar apuntando a/dev/console.Como se describe aquí,
/dev/consolees 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/tty0ningún otro dispositivo. Esto es algo similar a la situación con la/dev/ttyque 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/consolede 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/consoleusa?"En Linux,
/dev/consolese 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/consoleera 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
bindarchivo en cada subdirectorio de/sys/class/vtconsoleparece indicarle qué dispositivo vtconsole está activo. Si escribo0en el activo, parece cambiar al simulado. (Los VT de GUI parecen no verse afectados, pero los VT de texto dejan de funcionar). Escribir1para 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 > bindsolo 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/consoleutiliza?"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
tty0accederá a diferentes consolas virtuales, dependiendo de cuál esté actualmente activo. ¿Para qué usan realmente las personastty0, y de manera similar para qué seconsoleusa en Linux?Técnicamente, puede leer y escribir desde
console/tty0, por ejemplo, ejecutando agettypara 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.systemdbuscasysfsun atributo asociado con el dispositivo / dev / console para detectar el dispositivo TTY subyacente. Esto permitesystemdgenerar automáticamente ungettye 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, ensystemdrealidad no se abre/dev/consolepara 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/consolepuede 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/consolearchivo.systemddentro 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-nspawncomando. (Creo que solo cuando ejecutassystemd-nspawnun TTY, aunque no puedo distinguirlo al buscar en la página de manual).systemd-nspawncrea el contenedor/dev/consolecomo 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
devptsmontaje 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 sudevptsmontaje.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
xconsolepara 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/nson archivos de dispositivos que representan dispositivos en sí mismos (aunque son emulaciones), no en relación con el proceso o el núcleo./dev/tty0representa el/dev/tty{1..63}que actualmente usa algo (¿tal vez un proceso de kernel o shell?)./dev/ttyrepresenta el terminal de control utilizado actualmente por una sesión de proceso./dev/consolerepresenta 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?