/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
En 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, agregando console=ttyS0a grub.conf. Después de eso tu /dev/tty0es un monitor y lo /dev/consolees /dev/ttyS0.
Un ejercicio para mostrar la diferencia entre /dev/ttyy /dev/tty0:
Cambie a la segunda consola presionando Ctrl+ Alt+ F2. Inicie sesión como root. Tipo sleep 5; echo tty0 > /dev/tty0. Presione Entery cambie a la tercera consola presionando Alt+ F3. Ahora vuelva a la segunda consola presionando Alt+ F2. Escriba sleep 5; echo tty > /dev/tty, presione Entery cambie a la tercera consola.
Puede ver que ttyes la consola donde comienza el proceso, y tty0es una consola siempre actual.
@ SFun28: si sudo anycommandfunciona, entonces sudo -iir a la raíz también funciona. No hay tal cosa como Linux / BSD / Unix donde no puedas ir a la raíz. (Entonces ya no sería Linux / BSD / Unix.)
Evi1M4chine
59
/dev/consolees un conjunto virtual de dispositivos que se pueden configurar como parámetro en el momento del arranque. Puede ser redirigido a un dispositivo serie o una consola virtual y, por defecto, apunta a /dev/tty0. Cuando console=se pasan varias opciones al núcleo, la salida de la consola irá a más de un dispositivo.
/dev/tty0 es la consola virtual actual
/dev/tty[1-x]es una de las consolas virtuales se cambia a con control- alt- F1y así sucesivamente.
/dev/ttyes una especie de alias de la consola (física, virtual o pseudo dispositivo, si la 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 cronprocesos por lotes similares no tienen uso /dev/tty, ya que no están asociados con ninguno. Estos procesos tienen un ?en la TTYcolumna de ps -efsalida.
¿Qué quiere decir al consultarlo desde esta declaración "/ dev / tty es la consola utilizada por el proceso que lo consulta"?
Ron Vince
1
@RonVince quiero decir que /dev/ttypuede ser un dispositivo diferente, si lo hay, dependiendo del proceso que lo abra. Respuesta actualizada
jlliagre
Gracias. ¿Puedo saber si los procesos realmente escriben / leen a / desde / dev / tty en lugar de directamente a / desde el archivo de dispositivo asociado a ellos?
Ron Vince
@RonVince Me temo que no estoy seguro de lo que estás preguntando. ¿Podrías reformularlo?
jlliagre
1
@RonVince Opening / dev / tty (not /dev/tty[1,..,n]) es el estándar de Unix (y Linux) para que un proceso escriba algo en el terminal del usuario. Escribir directamente en cualquier otro dispositivo que no sea portátil, más complejo y menos confiable. Un proceso no necesita saber cuál es el dispositivo real al que está conectado el terminal de proceso, el núcleo ya lo sabe.
En Linux, la consola del núcleo se puede configurar mediante la console=opción de arranque . Código de kernel que llama printk()puede escribirle mensajes, por ejemplo, cuando se carga un dispositivo o se produce un error. Estos mensajes también son almacenados por el núcleo. (Ver también dmesg) Cuando se encuentra e inicia un dispositivo de consola, recibe todos los mensajes almacenados previamente en el búfer.
Puede 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=ttyS0y console=ttyS1.
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. El primer proceso que no es del núcleo, denominado init"PID 1", se inicia con /dev/consolela salida estándar, el error estándar y la entrada estándar.
Si ninguna de las consolas es un tty, la apertura /dev/consoledevuelve el error ENODEV("No existe tal dispositivo"). El kernelimpresiónregistrar un mensaje y comenzar de todos initmodos. Para ver un ejemplo de una consola de kernel que no es un dispositivo tty, vea 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 primer dispositivo que se muestra es la consola principal. La lista está en el orden inverso de la línea de comando del núcleo. La documentación actual del núcleo indica 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-nspawncontenedor, el /dev/consolearchivo estándar se reemplaza con un dispositivo pseudo-terminal (PTY). Estos se describirían mejor como dispositivos de terminal virtual. Se crean dinámicamente y también se usan para implementar emuladores gráficos de terminal como GNOME Terminal y para acceso remoto como ssh.
/ dev / tty0
Los nodos del dispositivo Linux TTY a tty1través de tty63son terminales virtuales. También se les conoce como VT o consolas virtuales. Simulan varias consolas en la parte superior del controlador del dispositivo de la consola física. Solo se muestra y se controla una consola virtual a la vez. El terminal activo puede cambiarse, por ejemplo, usando chvtCtrl + Alt + F1 a través de las teclas de función que tenga.
También puede leer y escribir en el VT actual usando /dev/tty0. tty0es la consola habitual del kernel, por ejemplo, si no seleccionó una explícitamente. "El sistema primero busca una tarjeta VGA [que es en lo que se ejecutan los VT] y luego un puerto serie". También puede configurar la consola para un TV 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 serie" como ttyS0es probablemente la alternativa más común a tty0. No es posible utilizar el sistema VT encima de una consola en serie.
Separarse del terminal de control es uno de los pasos tradicionalmente necesarios 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 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.
Respuestas:
De la documentación :
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
.Un ejercicio para mostrar la diferencia entre
/dev/tty
y/dev/tty0
:Cambie a la segunda consola presionando Ctrl+ Alt+ F2. Inicie sesión como
root
. Tiposleep 5; echo tty0 > /dev/tty0
. Presione Entery cambie a la tercera consola presionando Alt+ F3. Ahora vuelva a la segunda consola presionando Alt+ F2. Escribasleep 5; echo tty > /dev/tty
, presione Entery cambie a la tercera consola.Puede ver que
tty
es la consola donde comienza el proceso, ytty0
es una consola siempre actual.fuente
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, y listo, un shell de raíz.sudo anycommand
funciona, entoncessudo -i
ir a la raíz también funciona. No hay tal cosa como Linux / BSD / Unix donde no puedas ir a la raíz. (Entonces ya no sería Linux / BSD / Unix.)/dev/console
es un conjunto virtual de dispositivos que se pueden configurar como parámetro en el momento del arranque. Puede ser redirigido a un dispositivo serie o una consola virtual y, por defecto, apunta a/dev/tty0
. Cuandoconsole=
se pasan varias opciones al núcleo, la salida de la consola irá a más de un dispositivo./dev/tty0
es la consola virtual actual/dev/tty[1-x]
es una de las consolas virtuales se cambia a con control- alt- F1y así sucesivamente./dev/tty
es una especie de alias de la consola (física, virtual o pseudo dispositivo, si la 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
procesos por lotes similares no tienen uso/dev/tty
, ya que no están asociados con ninguno. Estos procesos tienen un?
en laTTY
columna deps -ef
salida.fuente
/dev/tty
puede ser un dispositivo diferente, si lo hay, dependiendo del proceso que lo abra. Respuesta actualizada/ dev / console
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
En Linux, la consola del núcleo se puede configurar mediante la
console=
opción de arranque . Código de kernel que llamaprintk()
puede escribirle mensajes, por ejemplo, cuando se carga un dispositivo o se produce un error. Estos mensajes también son almacenados por el núcleo. (Ver tambiéndmesg
) Cuando se encuentra e inicia un dispositivo de consola, recibe todos los mensajes almacenados previamente en el búfer.Puede 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 ambasconsole=ttyS0
yconsole=ttyS1
.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. El primer proceso que no es del núcleo, denominadoinit
"PID 1", se inicia con/dev/console
la salida estándar, el error estándar y la entrada estándar.Si ninguna de las consolas es un tty, la apertura
/dev/console
devuelve el errorENODEV
("No existe tal dispositivo"). El kernelimpresiónregistrar un mensaje y comenzar de todosinit
modos. Para ver un ejemplo de una consola de kernel que no es un dispositivo tty, veanetconsole
, 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 primer dispositivo que se muestra es la consola principal. La lista está en el orden inverso de la línea de comando del núcleo. La documentación actual del núcleo indica 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/dev/console
archivo estándar se reemplaza con un dispositivo pseudo-terminal (PTY). Estos se describirían mejor como dispositivos de terminal virtual. Se crean dinámicamente y también se usan para implementar emuladores gráficos de terminal como GNOME Terminal y para acceso remoto comossh
./ dev / tty0
Los nodos del dispositivo Linux TTY a
tty1
través detty63
son terminales virtuales. También se les conoce como VT o consolas virtuales. Simulan varias consolas en la parte superior del controlador del dispositivo de la consola física. Solo se muestra y se controla una consola virtual a la vez. El terminal activo puede cambiarse, por ejemplo, usandochvt
Ctrl + Alt + F1 a través de las teclas de función que tenga.También puede leer y escribir en el VT actual usando
/dev/tty0
.tty0
es la consola habitual del kernel, por ejemplo, si no seleccionó una explícitamente. "El sistema primero busca una tarjeta VGA [que es en lo que se ejecutan los VT] y luego un puerto serie". También puede configurar la consola para un TV específico, por ejemploconsole=tty1
."Si no tiene una tarjeta VGA en su sistema, el primer puerto serie se convertirá automáticamente en la consola". Una "consola serie" como
ttyS0
es probablemente la alternativa más común atty0
. No es posible utilizar el sistema VT encima de una consola en 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 es equivalente 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, eninit
, se referiría a/dev/console
.Separarse del terminal de control es uno de los pasos tradicionalmente necesarios 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 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.
fuente