GNU/Linux >> Tutoriales Linux >  >> Linux

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

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últiples console= 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 por cron y procesos por lotes similares no tienen /dev/tty utilizable , ya que no están asociados a ninguno. Estos procesos tienen un ? en el TTY columna de ps -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.


Linux
  1. ¿Cuándo usar /dev/random Vs /dev/urandom?

  2. ¿Qué son los archivos /dev/zero y /dev/null en Linux?

  3. ¿Está mal vincular /dev/random a /dev/urandom en Linux?

  4. ¿Por qué en algunos sistemas Linux, el sistema de archivos raíz aparece como /dev/root en lugar de /dev/<nodo de dispositivo real> en mtab?

  5. ¿Por qué se requieren < o > para usar /dev/tcp?

tty (/dev/tty) vs pts (/dev/pts) en Linux

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

kernel:deshabilitar /dev/kmem y /dev/mem

Cómo usa Linux /dev/tty y /dev/tty0

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr

Crear un dispositivo de bloque virtual que escriba en /dev/null