Linux: Diferença entre / dev / console, / dev / tty e / dev / tty0

121

Em um sistema Linux, qual é a diferença entre /dev/console , /dev/tty e /dev/tty0 ?

Qual é o respectivo uso e como eles se comparam?

    
por Axel Fontaine 08.01.2013 / 11:46

3 respostas

87

Na documentação :

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

Nos bons e velhos tempos /dev/console era o console do Administrador do Sistema. E os TTYs eram dispositivos seriais de usuários conectados a um servidor. Agora /dev/console e /dev/tty0 representam a exibição atual e geralmente são iguais. Você pode substituí-lo, por exemplo, adicionando console=ttyS0 a grub.conf . Depois disso, seu /dev/tty0 é um monitor e /dev/console é /dev/ttyS0 .

Um exercício para mostrar a diferença entre /dev/tty e /dev/tty0 :

Mude para o segundo console pressionando Ctrl + Alt + F2 . Faça o login como root . Digite sleep 5; echo tty0 > /dev/tty0 . Pressione Enter e mude para o 3º console pressionando Alt + F3 . Agora volte para o segundo console pressionando Alt + F2 . Digite sleep 5; echo tty > /dev/tty , pressione Enter e mude para o terceiro console.

Você pode ver que tty é o console no qual o processo é iniciado e tty0 é um console sempre atual.

    
por 08.01.2013 / 17:36
57
  • /dev/console é um conjunto virtual de dispositivos que podem ser definidos como um parâmetro no momento da inicialização. Ele pode ser redirecionado para um dispositivo serial ou um console virtual e, por padrão, aponta para /dev/tty0 . Quando várias opções console= são passadas para o kernel, a saída do console irá para mais de um dispositivo.

  • /dev/tty0 é o console virtual atual

  • /dev/tty[1-x] é um dos consoles virtuais com os quais você muda com controle - alt - F1 e assim por diante.

  • /dev/tty é um tipo de alias para o console (físico, virtual ou pseudo dispositivo, se houver) associado ao processo que o abre. Ao contrário dos outros dispositivos, você não precisa de privilégios de root para gravar nele. Observe também que processos como os lançados por cron e processos em lote semelhantes não possuem /dev/tty utilizáveis, pois não estão associados a nenhum. Esses processos têm ? na coluna TTY de ps -ef output.

por 08.01.2013 / 17:18
12

/ dev / console

link

No Linux, o console do kernel pode ser configurado usando a opção de inicialização console= . O código do kernel que chama printk() pode gravar mensagens para ele, por exemplo quando um dispositivo é carregado ou ocorre um erro. Essas mensagens também são armazenadas em buffer pelo kernel. (Veja também dmesg ). Quando um dispositivo de console é encontrado e iniciado, ele recebe todas as mensagens previamente armazenadas em buffer.

Você pode transmitir console= várias vezes para configurar vários consoles e as mensagens serão gravadas em todos eles. Aparentemente, você pode selecionar apenas um console de cada "tipo": você não pode usar console=ttyS0 e console=ttyS1 .

A documentação do kernel especifica /dev/console como um dispositivo de caractere numerado (5,1) . Abrir este dispositivo de caracteres abre o console "principal", que é o último tty na lista de consoles. O primeiro processo não kernel, chamado init ou "PID 1", é iniciado com /dev/console conectado à saída padrão, erro padrão e entrada padrão.

Se nenhum dos consoles for um tty, abrir /dev/console retornará o erro ENODEV ("No such device"). O kernel irá imprimir uma mensagem, e iniciar init independentemente. Para um exemplo de console do kernel que não é um dispositivo tty, veja netconsole , ou meu console favorito a impressora de linha .

Você também pode ver uma lista de consoles tty lendo /sys/class/tty/console/active . A documentação do systemd aponta que o dispositivo primeiro mostrado é o console principal. A lista está na ordem inversa da linha de comando do kernel. A documentação atual do kernel afirma incorretamente que o último dispositivo mostrado é o principal ou "ativo" console. Por algum motivo, é possível pesquisar este arquivo em busca de alterações (no caso de dispositivos de console serem removidos?).

Dentro de um contêiner systemd-nspawn , o arquivo /dev/console padrão é substituído por um pseudo- dispositivo terminal (PTY). Estes seriam melhor descritos como dispositivos terminais virtuais. Eles são criados dinamicamente e também são usados para implementar emuladores de terminal gráficos como o Terminal GNOME, e para acesso remoto como ssh .

/ dev / tty0

Os nós de dispositivo do Linux TTY tty1 through tty63 são terminais virtuais . Eles também são referidos como VTs ou como consoles virtuais. Eles simulam vários consoles no topo do driver de dispositivo do console físico. Apenas um console virtual é mostrado e controlado por vez. O terminal ativo pode ser comutado, por ex. usando chvt ou Ctrl + Alt + F1 através de quantas teclas de função você tiver.

Você também pode ler e gravar no VT atual usando /dev/tty0 . tty0 é a consola habitual do kernel, por ex. se você não selecionou um explicitamente. "O sistema primeiro procura uma placa VGA [na qual os VTs são executados] e depois para uma porta serial". Você também pode definir o console para um VT específico, por ex. console=tty1 .

"Se você não tiver uma placa VGA no seu sistema, a primeira porta serial se tornará automaticamente o console." Um "console serial" como ttyS0 é provavelmente a alternativa mais comum a tty0 . Não é possível usar o sistema VT em cima de um console serial.

/ dev / tty

/dev/tty é um dos três arquivos de dispositivos padrão especificados pelo POSIX ( /dev/ é um dos três nomes de diretório especificados pelo POSIX). A abertura equivale a abrir o terminal de controle do processo atual. O terminal de controle é definido quando um processo abre primeiro um terminal, pelo menos no Linux . Por exemplo, em init , referir-se-ia a /dev/console .

O desvinculação do terminal de controle é uma das etapas tradicionalmente necessárias para iniciar um processo em segundo plano, por exemplo, um daemon de registro do sistema . As etapas para se tornar um processo em segundo plano são terrivelmente complicadas, mas, para ser específico, a etapa que se destaca do terminal de controle é o setsid chamada do sistema. Em sistemas mais modernos, o sistema init, e. O systemd inicia o serviço sem nenhum terminal de controle em primeiro lugar.

    
por 08.08.2017 / 20:38