Como verificar qual tty estou usando atualmente?


22

Existem 7 terminais que podem ser usados ​​em nosso sistema. tty7é baseado em GUI.

Como posso saber qual tty estou usando atualmente?

como, tty1, tty2 .... tty6?


Por que você está afirmando que é um "pts" nos comentários? Isso é totalmente diferente do que você pergunta aqui. A sessão em uma GUI NÃO é um tty.
Rinzwind

11
Estou confuso sobre este conceito, é por isso
luv.preet

Respostas:


30

Existem várias maneiras de descobrir isso. Eu iria com o comando who am i(not who):

$ who am i
ravexina    tty2        2017-04-10 11:19 (:0)

Quando estou em um terminal gráfico, ele retorna algo como:

ravexina    pts/0        2017-04-10 1:19 (:0)

Na sessão ssh, o uso de um resultado gráfico do terminal é o mesmo, mas em vez de (: 0), receberei o IP da minha máquina (192.168.xx). outros comandos, como w, who, pgrep, ps, etc são úteis também.

Por exemplo, para descobrir em que ttyminha interface gráfica está sendo executada:

ps $(pgrep Xorg)

Que no meu caso, porque eu não uso nenhum gerenciador de exibição como gdm ou slim, ele produzirá:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg

4
+1, embora no terminal mate who am inão retorne nada e whoamiretorne zanna((while whoretorna todas as sessões (lembro-me de uma pergunta relacionada (que se mostrou irrespondível)) em que notamos que diferentes emuladores produziram saída diferente who)).
Zanna

gráfica usará sempre tty7, uma vez que é o único que proporciona um suporte gráfico
luv.preet

11
@ Zanna me encontro nessa situação, mas acho que vale a pena mencionar.
Ravexina

11
de qualquer maneira, who am isempre funcionará bem em uma vt, e pgrepé muito inteligente (você pode usar a $()sintaxe para sub-backticks de comando pode ficar um pouco confuso na remarcação), então sua resposta é muito agradável e quem quer que tenha diminuído sua votação não deveria ter feito isso ...
Zanna

11
@ luv.preet que está fora do alcance da sua pergunta, mas ver Diferença entre pts e tty :) - o cargo de que este é um duplicado tem uma resposta incrível
Zanna

14

Use o ttycomando

Se eu estiver certo, esta é a referência:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6

está mostrando pts / 18.
Luv.preet 9/04

esse pts pode estar rodando em um tty, não é? Como eu sei disso?
Luv.preet 9/04

5
@ luv.preet que é o seu terminal. Consulte "Diferença entre pts e tty" .
Chai T. Rex

4
ptssignifica que você está usando o terminal de GUI ou através de SSH
lithium_js

3
Você precisará fazer uma nova pergunta para isso.
Chai T. Rex

6

Vamos dar um passo atrás e começar com a confusão: o que é um tty? Originalmente, tty era uma abreviação de teletipo que se tornou um teletipo de vidro que se tornou qualquer terminal ou a conexão a um, especificamente uma porta serial (ainda existem, geralmente / dev / ttyS0, / dev / ttyUSB0 e às vezes / dev / ttyacm0). Então você tem pseudo-ttys e virtual ttys. mãos unix antigas estão familiarizadas com os pseudo-ttys, usados ​​para terminais remotos (ssh e telnet), terminais virtuais (xterm e similares) e multiplexadores de terminal (screen e tmux). Os pseudo-ttys tiveram vários esquemas de nomeação ao longo do tempo, mas o atual usa nomes como / dev / pts / 0. Os ttys virtuais, por outro lado, estão associados aos consoles virtuais, especificamente quando você usa as teclas de função alt de controle, está alternando os consoles virtuais, cada um dos quais emparelhado com um tty virtual.

Portanto, se você precisar encontrar seu pseudo tty (ou virtual tty ao usar o modo de texto), existem todos os tipos de soluções who am iou ps ax|grep $$isso é relativamente fácil de fazer, pois existem várias maneiras de descobrir isso, pois o pseudo tty é aberto no io padrão na maioria dos casos e existem outros métodos que funcionam mesmo quando o io é redirecionado. isso também tem a vantagem de fazer a coisa certa ao usar portas seriais e ttys virtuais, desde que você não esteja usando emuladores de terminais gráficos ou multiplexadores de terminal.

Mas e se você quiser identificar o console virtual? sudo fgconsolepode ser útil para casos interativos. Ou o que faço é apenas andar pelos consoles, pois a troca geralmente é rápida o suficiente. Não conheço um método programático que funcione de maneira confiável em casos não interativos ou não de primeiro plano.

Vejamos um exemplo que garante que nunca será capaz de responder com segurança ao console virtual. O computador em que estou sentado na frente de (alpha) possui um Xserver rodando em tty2 (: 1), tenho três janelas abertas, dois xterms e um vncviewer (conectado ao bravo: 2). Um xterm está executando a tela, o outro está executando o ssh charley. A tela tem duas janelas abertas, ssh delta e quem (que identifica corretamente o pseudo tty na coluna dois e fornece a dica (:1:S0)na coluna cinco que nos diz que o pseudo tty está conectado à primeira sessão de tela conectada ao segundo servidor X, mas não fornece nenhuma informação do console virtual). Executar quem, em qualquer uma das sessões ssh, dá a dica(alpha)que identifica a máquina da qual a sessão ssh veio, comparativamente boa para sessões remotas. Embora exista pouca informação sobre o que está conectado ao pseudo-tty (e absolutamente nenhum console virtual ou mesmo informações sobre o tty remoto estejam disponíveis), pelo menos o host remoto é identificado. as informações sobre a tela podem estar erradas, pois as sessões de tela são destacáveis ​​e o vnc não fornece nenhuma informação útil, pois a única diferença entre uma sessão do vnc e uma sessão local é o número de exibição. Em muitos casos, você pode assumir que: 0 está no tty7, mas nem sempre, e nunca no meu, pois o bravo não possui uma placa de vídeo e: 0 é uma sessão vnc (que confunde quem, porque pensa que é o console local) e nenhuma das máquinas usa o tty7 como uma sessão gráfica, porque eu (não apenas pelo contrário) despejo os logs no tty7 (e no tty5, tty6 e tty8 também) religando sessões gráficas em outros lugares. Mas a tela de espera também pode atuar como um programa de terminal, permitindo que você estabeleça uma sessão através de um cabo serial. O que essa sessão informa quando quem é executado? Por que nada além da porta serial, seja através de vnc, xterm, ssh, tela e um adaptador serial usb de uma só vez ou está conectado ao meu televideo.


6

Quando você faz login em um tty, ele mostra qual tty você está usando na primeira linha automaticamente.


Se pressionar a combinação de teclado Ctrl+ Alt+ F3mostrar apenas uma tela preta, como você escreveu em um comentário, existe uma maneira alternativa de obter acesso a um shell raiz ao inicializar o computador sem pressionar Ctrl+ Alt+ F3para exibir um tty.

  1. Imediatamente após a tela inicial do BIOS / UEFI durante a inicialização, com o BIOS, pressione e segure rapidamente a Shifttecla, que exibirá o menu GNU GRUB. (Se você vir o logotipo do Ubuntu, perdeu o ponto em que pode entrar no menu GRUB.) Com UEFI, pressione (talvez várias vezes) a Esctecla para acessar o menu GRUB. Às vezes, a tela inicial do fabricante faz parte do carregador de inicialização do Windows; portanto, quando você liga a máquina, ela é direcionada diretamente para a tela do GRUB e, em seguida, pressionar Shifté desnecessário.

  2. Na primeira tela roxa do GNU GRUB, selecione Opções avançadas para Ubuntu com as teclas ↑ e ↓ e pressione Enter. Você será solicitado por outro menu roxo do GNU GRUB que contém uma lista de opções do kernel.

  3. Pressione a tecla de seta para baixo até selecionar a segunda entrada da parte superior (aquela com o modo de recuperação na descrição) e pressione Enter.

    Agora você deve ver este menu de recuperação:

    menu de recuperação

  4. Usando as teclas de seta, role para baixo até a raiz e pressione Enter.

    Agora você deve ver um prompt raiz, algo como isto:

    root@ubuntu:~#
    
  5. Nesta fase, você deve ter um sistema de arquivos somente leitura. Você precisa remontar com permissões de gravação:

    mount -o rw,remount /  
    

    Agora você pode executar comandos da mesma forma que em um terminal.


isso sempre abre tty1?
Luv.preet 9/04

Não, não abre nenhum tty. Em vez disso, monta o sistema de arquivos raiz do Ubuntu que você instalou no disco rígido como um shell interativo com permissões de gravação, permitindo executar comandos nele.
Karel

3

Eu acho que você está cuidando de algo mais do que as outras respostas fornecidas. Corra sudo fgconsole para descobrir qual realty está ativo agora.


@karel É fácil imaginar uma situação em que você perca o anúncio TTY atual. Por exemplo, seu perfil do bash limpa a tela. Eu ofereci um comando que pode ser usado a qualquer momento, não apenas imediatamente após o login. WRT Ctrl + Alt + F1 não está funcionando - há uma solução rápida: use chvt ou openvt.
Marian adam

E entre, execute-o com o sudo. É por isso que você recebeu o erro.
Marian adam

1

Use o comando tty, ele funciona no Linux e no macOS e fornece uma saída bastante simples de ler, apenas o nome do tty em que você está.

Exemplo:

$ tty
/dev/pts/0

É fácil criar um script ou incluí-lo no prompt, exemplo:

$ PS1='`tty`: '
/dev/pts/0: _

Dessa forma, você sempre saberá em qual terminal está.


1

Exceto pela GUI, nesse caso, você recebe pontos, isso mostra a saída desejada:

ls -l `tty` | awk '{print $10}'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.