Por que o UNIX / Linux fornece vários terminais?

8

Nos anos 70, tínhamos um terminal de hardware com interface CUI (interface de usuário de caracteres) para entrada / saída.

Agora, temos emuladores de terminal ( Ctrl+ Alt+ Fn) no mundo Unix / Linux.

No Ubuntu OS, vejo sete emuladores de terminal, onde a GUI ocupa o 7º emulador de terminal ( Ctrl+ Alt+ F7).

Por exemplo, este é o meu primeiro emulador de terminal ( Ctrl+ Alt+ F1)

$ tty
/dev/tty0

Por que o Unix / Linux fornece vários emuladores de terminal?

overexchange
fonte
8
Sempre havia uma demanda por isso. Um programa chamado "tela" foi usado quando havia apenas um terminal disponível.
VPfB
7
A tela @vpfb ainda está disponível e é parte integrante do meu fluxo de trabalho!
precisa saber é o seguinte
1
Eu acho que o que você está perguntando aqui não são emuladores de terminal (que são programas como xterm, rxvt, & c que são executados como aplicativos gráficos no X), mas terminais de modo de texto que não estão executando gráficos. O único uso que eu realmente encontrei para esses (e isso não por alguns anos) é depurar as coisas quando o X não funciona corretamente. OTOH Faço a maior parte do meu trabalho real em janelas xterm e pode ter de três a uma dúzia ou mais de janelas abertas.
Jamesqf #
@jamesqf Por que você não chama ctrl + alt + f1 como emulador de terminal? Porque não é o terminal CUI hardware que tínhamos em 1970
overexchange
2
@overexchange: não os chamo assim porque essa não é a terminologia usada por pessoas familiarizadas com eles. Se você pesquisar "emulador de terminal linux", obterá muitos resultados, a maioria dos quais nada tem a ver com os consoles em modo texto que você obtém com Ctl-Alt-F [1-7].
jamesqf

Respostas:

25

Por que o UNIX / Linux fornece vários emuladores de terminal [no console]?

Pela mesma razão, seu emulador de terminal da GUI provavelmente suporta guias (por exemplo, GNOME Terminal) e, se não (por exemplo rxvt), pelo mesmo motivo, iniciar uma segunda instância de aplicativo de terminal da GUI não apenas puxa a primeira para o primeiro plano e sai, forçando você a usar a primeira instância.

Uso rotineiramente pelo menos três janelas de terminal no meu trabalho e muitas vezes mais:

  1. Editor de texto para o lado do servidor do sistema em que estou trabalhando

  2. Editor de texto para o lado do cliente do mesmo sistema

  3. Janela de comando para executar o servidor

Raramente preciso de um quarto terminal para executar o programa cliente, pois ele geralmente é executado em outro local (aplicativo Web, aplicativo GUI nativo, aplicativo móvel etc.), mas se eu estivesse desenvolvendo um cliente CLI para meu aplicativo servidor, teria um terminal separado aberto para ele também.

No passado, antes de sudose tornar popular, eu mantinha um rootterminal aberto o tempo todo.

Atualmente, raramente uso caixas Unix / Linux interativamente no console sem uma GUI, mas geralmente as executo sem acesso e as acesso através do SSH. Meu cliente de terminal SSH de escolha suporta guias, configuradas como acima.

Um dos meus projetos atuais de hobby me faz usar um terminal de vidro antigo de vez em quando, o que significa que eu não tenho mais várias janelas de terminal, então finalmente estou aprendendo um pouco sobre o GNUscreen , um programa que eu nunca tinha muito uso antes, pois eu tinha vários terminais do console ou vários terminais da GUI. E o que screenfaz? Entre outras coisas, você pode configurá-lo para fornecer vários terminais virtuais em uma única tela, assim como o Linux faz com Ctrl- Alt- .Fx

Warren Young
fonte
10
A melhor parte da tela - além de ter vários terminais em um terminal de console idiota - é que você pode desconectar, sair, fazer login novamente e reconectar-se às sessões e aos processos ou o que você estava fazendo nos termos da tela continue.
ivanivan
Além do que o @ivanivan disse, outras pessoas podem ver sua sessão na tela e várias pessoas podem vê-la ao mesmo tempo. É como o compartilhamento de área de trabalho do console.
stanri
Nota: existem algumas alternativas disponíveis para uso da tela pura superuser.com/q/423310
moooeeeep
18

Esse é um recurso fornecido por quase todos, se não todos, Unix e Unix, como rodando em hardware x86. Curiosamente, os consoles virtuais foram introduzidos pela primeira vez em um Unix pelo Microsoft Xenix no início dos anos 80, e também estavam disponíveis no CP / M simultâneo.

Esse recurso foi posteriormente integrado ao AT&T SVR4 Unix, Solaris e emprestado por BSDs e Linux.

Por que o UNIX / Linux fornece vários emuladores de terminal?

Quando eles foram introduzidos pela primeira vez, não havia ambiente gráfico disponível para as máquinas que executavam essas implementações do Unix. Embora ter um terminal físico conectado a um servidor Unix central por meio de linhas RS232 fosse o padrão, conectar vários terminais a um PC padrão executando o Xenix seria um exagero se o objetivo fosse apenas um usuário executar múltiplos programas interativos simultaneamente. Os terminais virtuais forneceram uma solução elegante e conveniente para esse problema.

Outras implementações do Unix posteriormente forneceram o mesmo recurso para atender à mesma necessidade.

Quando os ambientes gráficos, especialmente o X11, se espalharam, poder ver vários emuladores de terminal ao mesmo tempo na mesma tela foi uma melhoria significativa. No entanto, o recurso de console virtual geralmente era mantido, apenas porque ainda era conveniente poder alternar para um console, caso o ambiente gráfico estivesse congelado ou disfuncional por algum motivo.

Observe que os utilitários gostam screene tmuxvieram muito depois dos terminais virtuais para generalizar a mesma funcionalidade. Sua vantagem é que eles podem ser usados ​​não apenas no console físico local, mas também em qualquer sessão, local ou remota (por exemplo telnet, ssh). Quando usado no console físico, consoles virtuais ainda são úteis como são funcionais em algumas situações onde screen/ tmuxnão pode ajudar, como se o X11 é congelado, ou se uma janela tem capturado o foco e não liberá-lo.

A virtualização baseada em contêiner, como zonas Solaris ou Linux LXC, também fornece um método para conectar-se ao console de contêineres através zlogin -C zonee lxc-console -t 0 -n containerrespectivamente.

jlliagre
fonte
4

Suponho que uma boa razão para ter emuladores de terminal extras é que, se você fizer algo errado na sua interface gráfica e ela se tornar inutilizável, você poderá rapidamente mudar para um emulador de terminal e corrigir todos os problemas que está tendo na interface gráfica. Na verdade, isso acontece com bastante frequência quando você está fazendo alterações no gerenciador de janelas ou em outros recursos da interface gráfica. Suponho que também seria útil ter mais alguns terminais, no entanto, ter 6 overtop da interface gráfica principal parece um pouco excessivo.

Também me corrija se estiver errado, mas não é possível executar vários comandos como usuários diferentes em um único emulador de terminal?

user166213
fonte
"se você fizer algo errado" - isso explica por que existe um console virtual, não por que há vários (por exemplo, respondendo a uma pergunta diferente). "não é possível executar vários comandos como usuários diferentes de um único emulador de terminal?" - sim, mas seus resultados seriam confusos e a execução de programas de maldições seria difícil.
Radovan Garabík
4

Muitas das outras perguntas parecem responder por que o recurso foi introduzido.

Ainda assim, a questão real é:

Por que o Unix / Linux fornece vários emuladores de terminal?

"faz", não "fez".

Portanto, focando no horário atual, eis alguns motivos atuais:

  • Eles podem ser úteis. Às vezes, em vez de criar uma nova janela que cubra outras janelas na área de trabalho, posso simplesmente mudar para outro terminal. Então, posso voltar, para que a área de trabalho seja o primeiro plano. Ocasionalmente (geralmente quando há várias janelas abertas), isso pode ser mais conveniente do que colocar uma janela do terminal em segundo plano e, posteriormente, tentar fazer com que a mesma janela chegue ao primeiro plano (em vez de selecionar acidentalmente uma diferente do terminal) janelas que estão na área de trabalho gráfica).

    Por exemplo, lembro que Alt-Ctrl-F2 é o editor de texto que analisa um arquivo de texto (por exemplo, documentação) e Alt-Ctrl-F3 é usado para procurar rapidamente outro arquivo (por exemplo, um arquivo de configuração), e Alt-Ctrl-F4 é usado para um prompt de comando, enquanto a área de trabalho gráfica pode ser dividida entre navegação na web, e-mail, music player etc.
  • As janelas do terminal podem ser úteis para trabalhar com o computador, se houver algum problema com a exibição gráfica. Para pessoas que possam ter uma necessidade atual de usar um computador (talvez personalizado) que não possua uma placa de vídeo gráfica, essa funcionalidade pode ser essencial. Há também a possibilidade de necessidades futuras (possivelmente com um sistema operacional sucessor / descendente) que podem ser adicionais às necessidades atuais existentes.
    • Esses terminais de texto tendem a usar menos recursos. Por exemplo, eles tendem a usar menos memória em uma placa gráfica. Portanto, se uma placa de vídeo apresentar um mau funcionamento físico que interrompa a funcionalidade dos 3º e 4º megabyte de memória de vídeo, isso pode até não afetar alguém que esteja usando apenas os terminais de texto clássicos. Processos mais simples, que usam menos recursos, podem ser úteis ao trabalhar na recuperação.
  • O código já existe. Portanto, apoiá-los é fácil.
  • A quantidade de recursos para um terminal não utilizado (antes do login) é muito pequena. Mesmo essa pequena quantidade de memória pode ser reivindicada ajustando / etc / ttys
  • O código para suportar vários terminais é bastante semelhante ao código para suportar E / S em conexões seriais. Os desenvolvedores de sistemas operacionais tendem a valorizar muito isso. Com os avanços nas máquinas virtuais, o valor do uso de conexões seriais é menos crítico do que costumava ser. Ainda assim, alguns desenvolvedores de kernel (já familiarizados com o processo) podem gostar de usar esse hardware. As organizações que usam hardware antigo também podem ter vantagens em não precisar alterar o hardware.

Em resumo, simplesmente não há muitas razões para não apoiar isso. Há algum benefício que algumas pessoas apreciam, pelo menos algumas vezes, e não muito custo.

Na verdade, remover o suporte para isso pode ser mais trabalhoso do que deixar o suporte lá. Embora a remoção do suporte provavelmente seja simples, se algo falhar, identificar e corrigir o problema pode ser um pouco desafiador. Portanto, a redução da quantidade de esforço necessária (para desenvolver a próxima versão de um sistema operacional) é mais um motivo para deixar as coisas como estão. Isso significa que esse recurso pode permanecer disponível.

TOOGAM
fonte
Ter uma perspectiva histórica é frequentemente útil. Você diz que quer se concentrar no presente, mas, finalmente, concluir "Uma das razões pelas quais Unix / Linux atualmente fornece vários emuladores de terminal é porque ele fez fornecer-lhes em primeiro lugar ..."
jlliagre
Sim. Sim. Se não, talvez não hoje. Mas desde que o Unix o fez, essa continua sendo uma razão convincente para isso. De maneira alguma pretendi minimizar a utilidade de estar familiarizado com o passado. Minha tendência natural seria focar no motivo de ter sido adicionado (e meu primeiro rascunho ou dois o detalhou mais detalhadamente), mas minha principal razão para tentar me concentrar no presente é a pergunta feita. Além disso, outras respostas mencionaram o passado, e tentei fazer uma resposta útil adicionando ao que foi afirmado, em vez de apenas duplicar o que já foi dito em outras partes da página.
TOOGAM 13/04
3

Primeiro, o que você perguntou é sobre um recurso de um kernel chamado Linux. Não é do Unix em geral, e não do Gnu.

Quanto ao motivo, você teria que perguntar aos autores. No entanto, meu palpite é que isso permite que um administrador de um dispositivo não em rede (aqui eu incluo um RS232 como um tipo de rede), faça o login e faça algum trabalho administrativo, sem desconectar outro usuário.

ctrl-alt-delor
fonte
Sim, os VTs dos kernels são configurados pelo código de terra do usuário e, sim, existem outros Unixes que os possuem. No entanto, não é uma coisa geral do Unix.
ctrl-alt-Delor