Desde esta resposta para Linux: Diferença entre / dev / console, / dev / tty e / dev / tty0
A partir da documentação :
/dev/tty Current TTY device /dev/console System console /dev/tty0 Current virtual console
Nos bons velhos tempos
/dev/console
era console do administrador do sistema. E os TTYs eram dispositivos seriais dos usuários conectados a um servidor. Agora/dev/console
e/dev/tty0
represente a exibição atual e geralmente são os mesmos. Você pode substituí-lo, por exemplo, adicionandoconsole=ttyS0
agrub.conf
. Depois que você/dev/tty0
é um monitor e/dev/console
é/dev/ttyS0
.
Por " Console do sistema ", /dev/console
parece o arquivo de dispositivo de um terminal físico de texto, assim como /dev/tty{1..63}
os arquivos de dispositivo para os consoles virtuais.
Por " /dev/console
e /dev/tty0
representa a exibição atual e geralmente são os mesmos", /dev/console
parece-me que também pode ser o arquivo de dispositivo de um console virtual. /dev/console
parece mais do /dev/tty0
que gosta /dev/tty{1..63}
( /dev/tty0
é o console virtual atualmente ativo e pode ser qualquer um /dev/tty{1..63}
).
O que é /dev/console
? Para que isso é usado?
Desempenha /dev/console
o mesmo papel no kernel do Linux que /dev/tty
em um processo? ( /dev/tty
é o terminal de controle da sessão do processo e pode ser um pts, /dev/ttyn
onde n
é de 1 a 63 ou mais?)
A outra resposta menciona:
A documentação do kernel especifica
/dev/console
como um dispositivo de caractere numerado 5: 1. A abertura desse dispositivo de caractere abre o console "principal", que é o último tty na lista de consoles.
"A lista de consoles" significa todos os console=
itens na opção de inicialização ?
Por " /dev/console
como um dispositivo de caractere numerado 5: 1", significa que /dev/console
é o arquivo do dispositivo de um terminal de texto físico, ou seja, um console do sistema? (Mas, novamente, a primeira resposta que citei acima diz que /dev/console
pode ser a mesma /dev/tty0
que não é um terminal de texto físico, mas um console virtual)
Obrigado.
Respostas:
/dev/console
existe principalmente para expor o console do kernel ao espaço do usuário. A documentação do kernel do Linux em dispositivos agora diz/dev/console
, o nó do dispositivo com 5 principais e 1 menor, fornece acesso a qualquer que seja o núcleo que considere ser seu principal meio de interagir com o administrador do sistema; pode ser um console físico conectado ao sistema (com a abstração do console virtual na parte superior, para que ele possa usartty0
ou qualquer localttyN
onde N esteja entre 1 e 63), ou um console serial, ou um console hipervisor ou até um dispositivo Braille. Observe que o próprio kernel não usa/dev/console
: os nós dos dispositivos são para o espaço do usuário, não para o kernel; no entanto, verifica se/dev/console
existe e é utilizável e configurainit
com sua entrada, saída e erro padrão apontando para/dev/console
.Conforme descrito aqui,
/dev/console
é um dispositivo de caractere com um maior e um menor fixos, porque é um dispositivo separado (como um meio de acessar o kernel; não um dispositivo físico), não equivalente a/dev/tty0
nenhum outro dispositivo. Isso é um pouco semelhante à situação em/dev/tty
que é seu próprio dispositivo (5: 0) porque fornece recursos ligeiramente diferentes dos outros dispositivos de console ou terminal virtual.A "lista de consoles" é realmente a lista de consoles definidos pelos
console=
parâmetros de inicialização (ou pelo console padrão, se não houver nenhum). Você pode ver os consoles definidos dessa maneira, olhando/proc/consoles
./dev/console
realmente fornece acesso ao último destes :fonte
"O que é isso
/dev/console
?" é respondido na resposta anterior . Talvez essa resposta seja mais clara quando você souber as respostas para as outras duas perguntas.Q1 "Qual é o arquivo do dispositivo que representa o próprio terminal físico?"
Não existe esse arquivo de dispositivo.
Q2 "Para que é
/dev/console
usado?"No Linux,
/dev/console
é usado para mostrar mensagens durante a inicialização (e o desligamento). Também é usado para o "modo monousuário", como apontado na resposta de Stephen Kitt. Não há muito mais para fazer sentido usá-lo."Nos bons velhos tempos" do Unix,
/dev/console
era um dispositivo físico dedicado. Mas este não é o caso no Linux.Evidência relacionada
1. "Qual é o arquivo do dispositivo que representa o próprio terminal físico?"
O (s) dispositivo (s) subjacente (s) para
/dev/tty{1..63}
sãostruct con_driver
. Para ver todos os drivers possíveis, consulte https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_consoleNão há arquivo de dispositivo para esses dispositivos subjacentes!
Existe apenas uma interface de espaço de usuário mínima para gerenciá-los.
Se você realmente quer saber mais, o
(M)
módulo significa . Ou seja, o dispositivo do console fictício não é fornecido por um módulo do kernel carregável; faz parte da imagem inicial do kernel (aka "builtin").Em segundo lugar, o
bind
arquivo em cada subdiretório de/sys/class/vtconsole
aparece para informar qual dispositivo vtconsole está ativo. Se eu escrevo0
no ativo, ele parece mudar para o falso. (VTs da GUI parecem inalterados, mas os VTs de texto param de funcionar). Escrever1
para o manequim não o ativa. Qualquer um dos métodos funciona para voltar ao real. Se eu li o código corretamente, o truque é que eleecho 1 > bind
deve funcionar apenas para drivers de console que são construídos como um módulo (?!).Para consoles framebuffer especificamente, há mais informações sobre como vincular diferentes dispositivos framebuffer (
/dev/fb0
...) a consoles virtuais específicos em https://kernel.org/doc/Documentation/fb/fbcon.txt . Isso envolve uma opção de kernelfbcon:map=
ou um comando chamadocon2fbmap
.É claro que os detalhes podem variar de acordo com as diferentes versões do kernel, arquiteturas, firmwares, dispositivos, drivers, etc. Nunca tive que usar nenhuma das interfaces acima. O kernel apenas deixa
i915
/inteldrmfb
/ como você quiser chamá-lo quando ele é carregado, substituindo, por exemplovgacon
.Parece que minha máquina EFI nunca foi
vgacon
. Então, primeiro, ele usa um console fictício e, em seguida, após 1,2 segundos, ele muda parafbcon
, rodando em cima deefifb
. Mas até agora não precisei me importar com os detalhes; simplesmente funciona.2. "Para que é
/dev/console
utilizado?"Você pode usar / dev / console como um dispositivo TTY. Escrever nele, por exemplo, gravará em um dispositivo subjacente específico, que também terá um número de dispositivo de caractere próprio.
Freqüentemente / dev / console está vinculado a / dev / tty0, mas às vezes pode estar vinculado a um dispositivo diferente.
Portanto, neste caso, escrever para / dev / console escreverá para / dev / tty0. Por sua vez, gravar em / dev / tty0 equivale a gravar em qualquer dispositivo / dev / ttyN atualmente ativo.
Mas isso levanta uma questão interessante. O acesso
tty0
acessará diferentes consoles virtuais, dependendo de qual está ativo no momento. Para que as pessoas realmente usamtty0
e da mesma forma que sãoconsole
usadas no Linux?Tecnicamente, você pode ler e gravar em
console
/tty0
, por exemplo, executando agetty
para permitir o logintty0
. Mas isso é útil apenas como um hack rápido. Porque isso significa que você não pode tirar proveito dos vários consoles virtuais do Linux.systemd
procurasysfs
um atributo associado ao dispositivo / dev / console, para detectar o dispositivo TTY subjacente. Isso permitesystemd
gerar automaticamente umgetty
e permitir o login, por exemplo, em um console serial, quando o usuário configura um console do kernel, inicializando comconsole=ttyS0
. Isso é conveniente; evita a necessidade de configurar esse console em dois lugares diferentes. Mais uma vez, vejaman systemd-getty-generator
. No entanto,systemd
não é realmente aberto/dev/console
para isso.Durante a inicialização do sistema, talvez você nem tenha o sysfs montado ainda. Mas você deseja poder mostrar mensagens de erro e progresso o mais rápido possível! Então, circulamos para o ponto 1). O kernel inicia o PID 1 com stdin / stdout / stderr conectado
/dev/console
. É muito bom ter esse mecanismo simples configurado desde o início.Dentro de um contêiner Linux, o arquivo em
/dev/console
pode ser criado como algo diferente - não o número do dispositivo do caractere5:1
. Em vez disso, ele pode ser criado como um arquivo de dispositivo PTS. Então, faria sentido fazer logon nesse/dev/console
arquivo.systemd
dentro de um contêiner permitirá o login em um dispositivo desse tipo; vejaman systemd-getty-generator
.Este mecanismo é usado quando você executa um contêiner com o
systemd-nspawn
comando (Acho que apenas quando você executasystemd-nspawn
um TTY, embora não seja possível pesquisar na página de manual).systemd-nspawn
cria o contêiner/dev/console
como uma montagem de ligação de um dispositivo PTS a partir do host. Isso significa que este dispositivo PTS não é visível/dev/pts/
dentro do contêiner.Os dispositivos PTS são locais para uma
devpts
montagem específica . Os dispositivos PTS são uma exceção à regra normal, que os dispositivos são identificados pelo seu número de dispositivo. Os dispositivos PTS são identificados pela combinação do número do dispositivo e dadevpts
montagem.Você pode gravar mensagens urgentes em
console
/tty0
, para gravar no console virtual atual do usuário. Isso pode ser útil para mensagens de erro urgentes no espaço do usuário, semelhantes às mensagens urgentes do kernel que são impressas no console (consulteman dmesg
). No entanto, não é comum fazer isso, pelo menos uma vez que o sistema tenha finalizado a inicialização.O rsyslog possui um exemplo nesta página , que imprime mensagens do kernel para
/dev/console
; isso não faz sentido no Linux, porque o kernel já o fará por padrão. Um exemplo que não consigo encontrar novamente diz que não é uma boa ideia usá-lo para mensagens que não são do kernel, porque há muitas mensagens syslog, você inunda seu console e isso atrapalha demais.O systemd-journald também possui opções para encaminhar todos os logs para o console. Em princípio, isso pode ser útil para depuração em um ambiente virtual. Embora, para depuração, geralmente encaminhamos para o
/dev/kmsg
invés. Isso os salva no buffer de log do kernel para que você possa lê-los comdmesg
. Como as mensagens geradas pelo próprio kernel, essas mensagens podem ser exibidas no console, dependendo da configuração atual do kernel.fonte
xconsole
para acompanhar o que estava acontecendo ;-). (E para evitar que as mensagens sejam gravadas diretamente no buffer de quadros, por exemplo , nas estações SPARC)./dev/tty{1..63}
e/dev/pts/n
são arquivos de dispositivos representando os próprios dispositivos (embora sejam emulações), não em relação ao processo ou ao kernel./dev/tty0
representa aquele em/dev/tty{1..63}
que atualmente é usado por algo (talvez processo de kernel ou shell?)./dev/tty
representa o terminal de controle atualmente usado por uma sessão de processo./dev/console
representa o terminal atualmente usado pelo kernel? Qual é o arquivo do dispositivo que representa o próprio terminal físico, não em relação ao kernel ou processo?