/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
Nos bons velhos tempos /dev/consoleera console do administrador do sistema. E os TTYs eram dispositivos seriais dos usuários conectados a um servidor. Agora /dev/consolee /dev/tty0represente a exibição atual e geralmente são os mesmos. Você pode substituí-lo, por exemplo, adicionando console=ttyS0a grub.conf. Depois que você /dev/tty0é um monitor e /dev/consoleé /dev/ttyS0.
Um exercício para mostrar a diferença entre /dev/ttye /dev/tty0:
Mude para o 2º console pressionando Ctrl+ Alt+ F2. Entre como root. Digite sleep 5; echo tty0 > /dev/tty0. Pressione Entere alterne para o terceiro console pressionando Alt+ F3. Agora volte para o segundo console pressionando Alt+ F2. Digite sleep 5; echo tty > /dev/tty, pressione Entere alterne para o terceiro console.
Você pode ver que ttyé o console em que o processo inicia e tty0é sempre um console atual.
@ SFun28: se sudo anycommandfuncionar, então sudo -iir para a raiz também funciona. Não existe um Linux / BSD / Unix em que você não possa fazer root. (Então não seria Linux / BSD / Unix mais.)
Evi1M4chine
60
/dev/consoleé um conjunto virtual de dispositivos que pode ser definido como parâmetro no momento da inicialização. Pode ser redirecionado para um dispositivo serial ou um console virtual e, por padrão, aponta para /dev/tty0. Quando várias console=opções 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 para os quais você alterna control- alt- F1e 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 iniciados por crone processos em lote semelhantes não podem ser utilizados /dev/tty, pois não estão associados a nenhum. Esses processos têm um ?na TTYcoluna de ps -efsaída.
O que você quer dizer com consultá-lo a partir desta declaração "/ dev / tty é o console usado pelo processo que o consultou"?
Ron Vince
1
@ RonVince, quero dizer, /dev/ttypode ser um dispositivo diferente, se houver, dependendo do processo que o abrir. Resposta atualizada.
Jlliagre
Obrigado. Posso saber se os processos realmente gravam / lêem para / de / dev / tty em vez de diretamente para / do arquivo de dispositivo associado a eles?
Ron Vince
@ RonVince Receio não ter certeza do que você está perguntando. Você poderia reformular isso?
Jlliagre 19/09/2015
1
@RonVince A abertura / dev / tty (não /dev/tty[1,..,n]) é o padrão Unix (e Linux) para um processo de escrever algo no terminal do usuário. A gravação direta em qualquer outro dispositivo não é portátil, mais complexo e menos confiável. Um processo não precisa saber qual é o dispositivo real ao qual o terminal do processo está conectado, o kernel já o conhece.
No Linux, o console do kernel pode ser configurado usando a console=opção de inicialização . O código do kernel que chama printk()pode gravar mensagens nele, 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 do console é encontrado e iniciado, ele recebe todas as mensagens armazenadas em buffer anteriormente.
Você pode passar 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 ambos console=ttyS0e console=ttyS1.
A documentação do kernel especifica /dev/consolecomo um dispositivo de caracteres numerado (5,1). A abertura desse dispositivo de caractere abre o console "principal", que é o último tty na lista de consoles. O primeiro processo que não é do kernel, chamado initou "PID 1", é iniciado com /dev/consoleconectado à saída padrão, erro padrão e entrada padrão.
Se nenhum dos consoles for um tty, a abertura /dev/consoleretornará o erro ENODEV("Não existe esse dispositivo"). O kernel iráimpressãoregistrar uma mensagem e iniciar initindependentemente. Para um exemplo de console do kernel que não é um dispositivo tty, consulte netconsole, ou meu console favorito, a impressora de linha .
Você também pode ver uma lista de tty consoles lendo /sys/class/tty/console/active. A documentação do systemd indica que o primeiro dispositivo mostrado é o console principal. A lista está realmente na ordem inversa da linha de comando do kernel. A documentação atual do kernel afirma incorretamente que o último dispositivo mostrado é o console principal ou "ativo". Por alguma razão, é possível pesquisar este arquivo em busca de alterações (caso os dispositivos do console sejam removidos?).
Dentro de um systemd-nspawncontêiner, o /dev/consolearquivo padrão é substituído por um dispositivo pseudo-terminal (PTY). Estes seriam melhor descritos como dispositivos de terminal virtual. Eles são criados dinamicamente e também são usados para implementar emuladores de terminal gráficos como o GNOME Terminal e para acesso remoto como ssh.
/ dev / tty0
O Linux TTY dispositivo nodostty1 através tty63são terminais virtuais. Eles também são chamados de VTs ou consoles virtuais. Eles simulam vários consoles na parte superior do driver de dispositivo do console físico. Somente um console virtual é mostrado e controlado por vez. O terminal ativo pode ser alternado, por exemplo, 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é o console comum do kernel, por exemplo, se você não selecionou um explicitamente. "O sistema procura primeiro uma placa VGA [que é o que os VTs executam] e depois uma porta serial". Você também pode definir o console para uma VT específica, por exemplo console=tty1.
"Se você não possui uma placa VGA em seu sistema, a primeira porta serial se tornará automaticamente o console". Um "console serial" como ttyS0é provavelmente a alternativa mais comum tty0. Não é possível usar o sistema VT em cima de um console serial.
A separação do terminal de controle é uma das etapas tradicionalmente necessárias para iniciar um processo em segundo plano, por exemplo, um daemon de log do sistema . As etapas para se tornar um processo em segundo plano são terrivelmente complexas, mas, para ser específico, a etapa que se desconecta do terminal de controle é a chamada do sistema de conjunto. Em sistemas mais modernos, o sistema init, por exemplo, systemd inicia o serviço sem nenhum terminal de controle em primeiro lugar.
Respostas:
A partir da documentação :
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
.Um exercício para mostrar a diferença entre
/dev/tty
e/dev/tty0
:Mude para o 2º console pressionando Ctrl+ Alt+ F2. Entre como
root
. Digitesleep 5; echo tty0 > /dev/tty0
. Pressione Entere alterne para o terceiro console pressionando Alt+ F3. Agora volte para o segundo console pressionando Alt+ F2. Digitesleep 5; echo tty > /dev/tty
, pressione Entere alterne para o terceiro console.Você pode ver que
tty
é o console em que o processo inicia etty0
é sempre um console atual.fonte
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, e voila - um shell raiz.sudo anycommand
funcionar, entãosudo -i
ir para a raiz também funciona. Não existe um Linux / BSD / Unix em que você não possa fazer root. (Então não seria Linux / BSD / Unix mais.)/dev/console
é um conjunto virtual de dispositivos que pode ser definido como parâmetro no momento da inicialização. Pode ser redirecionado para um dispositivo serial ou um console virtual e, por padrão, aponta para/dev/tty0
. Quando váriasconsole=
opções 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 para os quais você alterna control- alt- F1e 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 iniciados porcron
e processos em lote semelhantes não podem ser utilizados/dev/tty
, pois não estão associados a nenhum. Esses processos têm um?
naTTY
coluna deps -ef
saída.fonte
/dev/tty
pode ser um dispositivo diferente, se houver, dependendo do processo que o abrir. Resposta atualizada./ dev / console
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
No Linux, o console do kernel pode ser configurado usando a
console=
opção de inicialização . O código do kernel que chamaprintk()
pode gravar mensagens nele, por exemplo, quando um dispositivo é carregado ou ocorre um erro. Essas mensagens também são armazenadas em buffer pelo kernel. (Veja tambémdmesg
). Quando um dispositivo do console é encontrado e iniciado, ele recebe todas as mensagens armazenadas em buffer anteriormente.Você pode passar
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 ambosconsole=ttyS0
econsole=ttyS1
.A documentação do kernel especifica
/dev/console
como um dispositivo de caracteres numerado(5,1)
. A abertura desse dispositivo de caractere abre o console "principal", que é o último tty na lista de consoles. O primeiro processo que não é do kernel, chamadoinit
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, a abertura
/dev/console
retornará o erroENODEV
("Não existe esse dispositivo"). O kernel iráimpressãoregistrar uma mensagem e iniciarinit
independentemente. Para um exemplo de console do kernel que não é um dispositivo tty, consultenetconsole
, ou meu console favorito, a impressora de linha .Você também pode ver uma lista de tty consoles lendo
/sys/class/tty/console/active
. A documentação do systemd indica que o primeiro dispositivo mostrado é o console principal. A lista está realmente na ordem inversa da linha de comando do kernel. A documentação atual do kernel afirma incorretamente que o último dispositivo mostrado é o console principal ou "ativo". Por alguma razão, é possível pesquisar este arquivo em busca de alterações (caso os dispositivos do console sejam removidos?).Dentro de um
systemd-nspawn
contêiner, o/dev/console
arquivo padrão é substituído por um dispositivo pseudo-terminal (PTY). Estes seriam melhor descritos como dispositivos de terminal virtual. Eles são criados dinamicamente e também são usados para implementar emuladores de terminal gráficos como o GNOME Terminal e para acesso remoto comossh
./ dev / tty0
O Linux TTY dispositivo nodos
tty1
atravéstty63
são terminais virtuais. Eles também são chamados de VTs ou consoles virtuais. Eles simulam vários consoles na parte superior do driver de dispositivo do console físico. Somente um console virtual é mostrado e controlado por vez. O terminal ativo pode ser alternado, por exemplo, usandochvt
, 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
é o console comum do kernel, por exemplo, se você não selecionou um explicitamente. "O sistema procura primeiro uma placa VGA [que é o que os VTs executam] e depois uma porta serial". Você também pode definir o console para uma VT específica, por exemploconsole=tty1
."Se você não possui uma placa VGA em seu sistema, a primeira porta serial se tornará automaticamente o console". Um "console serial" como
ttyS0
é provavelmente a alternativa mais comumtty0
. Não é possível usar o sistema VT em cima de um console serial./ dev / tty
/dev/tty
é um dos três arquivos de dispositivo padrão especificados pelo POSIX (/dev/
é um dos três nomes de diretório especificados pelo POSIX). Abri-lo é equivalente a abrir o terminal de controle do processo atual. O terminal de controle é definido quando um processo abre pela primeira vez um terminal, pelo menos no Linux . Por exemplo, eminit
, ele se referiria a/dev/console
.A separação do terminal de controle é uma das etapas tradicionalmente necessárias para iniciar um processo em segundo plano, por exemplo, um daemon de log do sistema . As etapas para se tornar um processo em segundo plano são terrivelmente complexas, mas, para ser específico, a etapa que se desconecta do terminal de controle é a chamada do sistema de conjunto. Em sistemas mais modernos, o sistema init, por exemplo, systemd inicia o serviço sem nenhum terminal de controle em primeiro lugar.
fonte