Como o Linux usa / dev / tty e / dev / tty0

8

Eu posso ver a diferença entre / dev / tty e / dev / tty0 testando o método fornecido a partir desta pergunta . Mas realmente me pergunto sobre o uso prático desses dispositivos (como situações em que eles serão usados).

Ron Vince
fonte
@ 0xC0000022L De alguma forma, não consigo relacionar tty com sda porque, ao contrário de sda, tty tem 3 categorias diferentes (tty, tty0, tty [1, .., N]).
Ron Vince
Eu acho que a analogia fornecida por @ 0xC0000022L é bastante enganadora. Ambos /dev/sdae /dev/sda1designam dispositivos de bloco específicos (um passa a ser uma parte do outro). /dev/tty, por outro lado, é um dispositivo virtual relacionado a nenhum outro tty específico.
Celada

Respostas:

16

/dev/ttyé o controle tty do processo atual , para qualquer processo que realmente abra esse arquivo especial. Não é necessariamente um dispositivo de console virtual ( /dev/ttyn ) e pode ser um, uma porta serial etc. Se o controle tty não for um console virtual, o processo não precisará interagir com os dispositivos do console, mesmo que seu pseudotty seja realmente implementado no console do sistema. Por exemplo. para um shell em um emulador de terminal no servidor X em execução local, os programas formam uma cadeia de interações como:

   Unix shell
     ⇕ /dev/pts/2(≡ /dev/ttypara seus processos)
 driver de kernel Pty
     ⇕ /dev/ptmx
 emulador de terminal
     ⇕ X Window protocolo
   servidor X
     ⇕ /dev/tty7(≡ /dev/ttypara o servidor)
 console do sistema
zxc↿⇂ [_̈░░]
    usuário

O uso de /dev/ttyprogramas por parte do usuário inclui:

  • Escreva algo no terminal de controle, ignorando todos os redirecionamentos e pipes;
  • Faça um ioctl () - veja tty_ioctl (4);
  • Por exemplo, desconecte-se do terminal (TIOCNOTTY).

/dev/tty0é o console virtual atualmente ativo (ou seja, visível no monitor) do sistema operacional . Esse arquivo especial é improvável usado significativamente pelo software do sistema, mas /dev/consoleé praticamente um “alias” paratty0 e /dev/consoletem muito uso pelos daemons do syslog e, às vezes, pelo próprio kernel.

Experimente mostrar a diferença: execute um rootshell em tty3( Ctrl+ Alt+ F3) ou em um emulador de terminal. Agora

# sleep 2; echo test >/dev/tty

então rapidamente Ctrl+ Alt+ F2, aguarde dois segundos e Ctrl+ Alt+ o que quer que seja. Onde você vê a saída?
E agora o mesmo teste para /dev/tty0.

Incnis Mrsi
fonte
Sua resposta não tem diferença com a resposta fornecida pela pergunta que eu vinculei na minha pergunta. O que me preocupa é o processo de como o kernel os usa juntos.
Ron Vince
@ Ron Vince: atualizado.
Incnis MRSI
É obrigatório que um processo grave em / dev / tty em vez de em / dev / tty específico [1, .., N]?
Ron Vince
@ Ron Vince: Novamente, um processo executado dentro de uma sessão SSH (tecnicamente, filho de sshd) ou em uma xtermjanela, não tem seu / dev / tty  n específico . Ele não interage com os dispositivos do console do sistema , porque está conectado a um dispositivo pseudo-terminal. Isso não impede que ele abra / dev / tty  n se for um processo raiz ou se o mesmo usuário fez logon tty  n . Prestes a adicionar alguns pontos sobre "tty específico" à resposta.
você precisa saber é o seguinte
Digamos que eu use o xterm, que é um emulador de terminal. Essa é a cadeia (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> shell)? Para / dev / tty0, acho que sou claro sobre isso. A saída de qualquer processo e kernel será enviada para o / dev / tty [1, .., N] que o driver de dispositivo tty manipula agora. Esta é a cadeia (kernel / processo -> / dev / tty0 -> corrente / dev / tty [1, .., N])
Ron Vince
2

/ dev / tty é o controle tty para qualquer processo. Esta pode ser sua concha.

Se seu processo não possui um tty de controle, / dev / tty não está disponível, isso é verdade para daemons.

Se seu processo possui um tty de controle, / dev / tty é um alias de driver para o driver de tty real que seu processo está usando para stdin, stdout ou stderr.

Veja man -s7d ttypara mais informações. Observe que a seção em que este manual se encontra pode diferir entre diferentes sistemas operacionais e não deve ser confundida com a página de manual da seção 1. Portanto, verifique, por exemplo man -k tty.

esperto
fonte
"alias para o driver real que seu processo está usando". O texto citado refere-se a tty [1, .., N]?
Ron Vince
O alias do driver é algo diferente do que apenas o alias. É um driver diferente, mas direciona o trabalho para qualquer que seja o seu processo realmente conectado.
schily
Se eu entendi corretamente (consulte também tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), / dev / tty é a interface do processo atual (atualmente processado pela CPU) para / dev / tty [1, .., N]. Enquanto isso, / dev / tty0 é para saída de dados que não pertencem a / dev / tty específico [1, .., N], portanto, saída para / dev / tty [1, .., N] que pertence ao processo atual . Se estiverem corretas, pergunto-me quando o / dev / tty0 será realmente usado.
Ron Vince
Se você não tiver uma casa própria, uma possível entrada alternativa nessa casa não lhe dará uma casa.
schily
Portanto, / dev / tty0 é a saída de dados para a sessão atual do shell do superusuário (associada a / dev / tty [1, .., N]).
Ron Vince