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 por lo general son los mismos. 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 . Iniciar sesión como root
. Escribe sleep 5; echo tty0 > /dev/tty0
. Pulse Intro y cambie a la tercera consola presionando Alt +F3 .Ahora regrese a la segunda consola presionando Alt +F2 . Escribe sleep 5; echo tty > /dev/tty
, presione Entrar y cambie a la tercera consola.
Puedes ver que 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 un parámetro en el momento del arranque. Puede ser redirigido a un dispositivo serial o a una consola virtual y por defecto apunta a/dev/tty0
. Cuando múltiplesconsole=
las opciones se pasan al núcleo, 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, p. 63) es una de las consolas virtuales a las que cambia con control -alt -F1 y así sucesivamente; -
/dev/tty0
también es por defecto consola virtual; -
/dev/tty
es una especie de alias de la consola (física, virtual o pseudodispositivo, si lo 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 porcron
y procesos por lotes similares no tienen/dev/tty
utilizable , ya que no están asociados a ninguno. Estos procesos tienen un?
en elTTY
columna deps -ef
salida.
/dev/consola
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
En Linux, la consola del kernel se puede configurar usando el console=
opción de arranque. Código del núcleo que llama a printk()
puede escribirle mensajes, p. cuando se carga un dispositivo o se produce un error. Estos mensajes también son almacenados en el búfer por el kernel. (Véase también dmesg
). Cuando se encuentra e inicia un dispositivo de consola, recibe todos los mensajes previamente almacenados 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 dispositivo de caracteres numerado (5,1)
. Al abrir este dispositivo de caracteres, se abre la consola "principal", que es la última tty en la lista de consolas. El primer proceso fuera del kernel, llamado init
o "PID 1", se inicia con /dev/console
conectado a salida estándar, error estándar y entrada estándar.
Si ninguna de las consolas es un tty, abra /dev/console
devuelve el error ENODEV
("Hay tal dispositivo"). El kernel imprimir registrar un mensaje e iniciar init
sin importar. 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 el primero El dispositivo que se muestra es la consola principal. La lista está en orden inverso a la línea de comandos del núcleo. La documentación actual del kernel afirma 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 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 Linux TTY tty1
a través de tty63
son terminales virtuales. También se conocen como VT o consolas virtuales. Simulan varias consolas sobre el controlador del dispositivo de la consola física. Solo se muestra y controla una consola virtual a la vez. El terminal activo se puede cambiar, p. usando chvt
, o Ctrl+Alt+F1 a través de cuantas teclas de función 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 la que se ejecutan los VT] y luego un puerto serie". También puede configurar la consola en un VT 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 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. 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
.
Desconectarse del terminal de control es uno de los pasos que se requieren tradicionalmente 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 terriblemente complicados, 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.