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).
@ 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 umpty, 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.
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.
"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]).
/dev/sda
e/dev/sda1
designam 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.Respostas:
/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/tty
n ) e pode ser umpty, 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/tty
para seus processos)driver de kernel Pty
⇕
/dev/ptmx
emulador de terminal
⇕ X Window protocolo
servidor X
⇕
/dev/tty7
(≡/dev/tty
para o servidor)console do sistema
zxc↿⇂ [_̈░░]
usuário
O uso de
/dev/tty
programas por parte do usuário inclui:/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/console
tem muito uso pelos daemons do syslog e, às vezes, pelo próprio kernel.Experimente mostrar a diferença: execute um
root
shell emtty3
( Ctrl+ Alt+ F3) ou em um emulador de terminal. Agoraentã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
.fonte
sshd
) ou em umaxterm
janela, 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./ 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 tty
para 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 exemploman -k tty
.fonte