Como usar o comando de tela do Linux

Um terminal Linux em um laptop com outras sessões de terminal sobrepostas atrás dele.
fatmawati achmad zaenuri / Shutterstock

Com o screencomando do Linux , você pode colocar aplicativos de terminal em execução em segundo plano e puxá-los para frente quando quiser vê-los. Ele também oferece suporte a telas divididas e funciona em conexões SSH , mesmo depois de você desconectar e reconectar!

Qual é o comando da tela?

O screencomando é um multiplexador de terminal e está repleto de opções. Dizer que pode fazer muito é o avô dos eufemismos. A página do manual tem mais de 4.100 linhas .

A seguir estão os casos mais comuns em que você usaria o screencomando, e vamos abordá-los com mais detalhes neste artigo:

  • A operação padrão é criar uma nova janela com um shell nela, executar um comando e, em seguida, empurrar a janela para o fundo (chamado de “desanexação”). Quando quiser ver como está o seu processo, você pode puxar a janela para o primeiro plano novamente (“reconectar”) e usá-la novamente. Isso é ótimo para processos longos que você não deseja encerrar acidentalmente fechando a janela do terminal.
  • Depois de ter uma screensessão em execução, você pode criar novas janelas e executar outros processos nelas. Você pode facilmente pular entre as janelas para monitorar seu progresso. Você também pode dividir sua janela de terminal em regiões verticais ou horizontais e exibir suas várias screenjanelas em uma janela.
  • Você pode se conectar a uma máquina remota, iniciar uma screensessão e iniciar um processo. Você pode se desconectar do host remoto, reconectar e seu processo ainda estará em execução.
  • Você pode compartilhar uma screensessão entre duas conexões SSH diferentes para que duas pessoas possam ver a mesma coisa, em tempo real.

Tela de instalação

Para instalar screenno ubuntu, use este comando:

sudo apt-get install tela

O comando "sudo apt-get install screen" em uma janela de terminal.

Para instalar  screenno Manjaro, use o seguinte comando:

sudo pacman -Sy screen

O comando "sudo pacman -Sy screen" em uma janela de terminal.

No Fedora, você digita o seguinte:

tela de instalação do sudo dnf

O comando "sudo dnf install screen" em uma janela de terminal.

Introdução à tela

Para começar screen, simplesmente digite-o conforme mostrado abaixo e pressione Enter:

tela

O comando "tela" em uma janela de terminal.

Você verá uma página de informações sobre a licença. Você pode pressionar a barra de espaço para ler a segunda página ou Enter para retornar ao prompt de comando.

As informações de licença do comando "screen" em uma janela de terminal.

Você fica no prompt de comando e nada mais parece ter acontecido. No entanto, agora você está executando um shell dentro de um emulador de terminal multiplexado. Por que isso é uma coisa boa? Bem, vamos iniciar um processo que demorará muito para ser concluído. Faremos download do código-fonte do kernel Linux mais recente e o redirecionaremos para um arquivo chamado latest_kernel.zip.

Para fazer isso, digitamos o seguinte:

curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz> latest_kernel.zip

O comando "curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz> latest_kernel.zip" em uma janela de terminal.

Nosso download começa e a curlsaída nos mostra o progresso.

A saída do comando "curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz> latest_kernel.zip" em uma janela de terminal.

Não podemos mostrar uma imagem do próximo bit, porque é uma sequência de teclas. Você digita Ctrl + A, libera essas teclas e, em seguida, pressiona d para destacar a tela.

Recomendado:  Como ativar o modo escuro no Firefox

O processo de download ainda está em execução, mas a janela que mostra o download foi removida. Você retornará à janela do terminal a partir da qual iniciou a screen sessão. Uma mensagem informa que uma screenjanela rotulada 23167.pts-0.howtogeekfoi destacada.

Você precisa do número do início do nome da janela para reanexá-la. Se você esquecer, você sempre pode usar a -lsopção (listar), conforme mostrado abaixo, para obter uma lista das janelas desanexadas:

tela -ls

O comando "screen -ls" em uma janela de terminal.

Quando estiver pronto, você pode usar a -ropção (reanexar) e o número da sessão para reanexá-lo, assim:

tela -r 23167

O comando "screen -3 23167" em uma janela de terminal.

A janela que estava funcionando em segundo plano agora é trazida de volta para a janela do terminal como se nunca tivesse saído.

Uma sessão de tela reanexada restaurada na janela do terminal.

Se for um processo que vai chegar à sua conclusão, ele eventualmente será concluído. Se for um processo contínuo, você eventualmente desejará encerrá-lo. De qualquer forma, quando o processo terminar, você pode digitar  exit para sair do screen. Como alternativa, você pode pressionar Ctrl + A e, em seguida, K para encerrar à força uma janela.

Digite o seguinte comando:

Saída

O comando "sair" em uma janela de terminal.

Você retornará à janela anterior do terminal, que ainda mostrará o comando usado para reanexar a janela. Como fechamos nossa única janela separada, recebemos uma mensagem que screenestá encerrando.

A mensagem de encerramento do comando "screen" em uma janela de terminal.

Usando sessões de tela nomeada

Você pode usar a opção -S(nome da sessão) para nomear sua screensessão. Se você usar um nome memorável em vez da identidade numérica da sessão, é mais conveniente se reconectar a uma sessão. Nós digitamos o seguinte para nomear nossa sessão “bigfile”:

tela -S bigfile

O comando "screen -S bigfile" em uma janela de terminal.

Quando screeninicia nossa sessão, vemos uma janela em branco com um prompt de comando. Vamos baixar um arquivo grande, para que possamos usar um processo de longa duração como exemplo.

Nós digitamos o seguinte:

curl http://ipv4.download.thinkbroadband.com/1GB.zip> bigfile.zip

O comando "curl http://ipv4.download.thinkbroadband.com/1GB.zip> bigfile.zip" em uma janela de terminal.

Quando o download começa, pressionamos Ctrl + A e, em seguida, D para desanexar a sessão. Nós digitamos o seguinte para usar a -lsopção (listar) screenpara ver os detalhes de nossa sessão desanexada:

tela -ls

O comando "screen -ls" em uma janela de terminal.

Atrás do identificador numérico (23266), vemos o nome da nossa sessão (bigfile). Digite o seguinte, incluindo o nome da sessão, para reanexá-la:

screen -r bigfile

O comando "screen -r bigfile" em uma janela de terminal.

Estamos reconectados à nossa janela de download e vemos que o longo download ainda está em andamento.

Saída de download do Curl em uma sessão de tela reanexada em uma janela de terminal.

Quando o download for concluído, digitamos exitpara fechar a janela da sessão.

Usando a tela com várias janelas

Até agora, costumávamos screencolocar um único processo em segundo plano em uma janela separada. No entanto,  screené capaz de fazer muito mais do que isso. A seguir, executaremos alguns processos que nos permitem monitorar alguns aspectos do nosso computador.

Digamos o seguinte para iniciar uma sessão de tela chamada “monitor”:

tela -S monitor

O comando "screen -S monitor" em uma janela de terminal.

No prompt de comando em nossa nova sessão de janela, iniciaremosdmesg  e usaremos as opções -H(legível por humanos) e -w(aguardar novas mensagens). Isso exibirá as mensagens do buffer do kernel ; novas mensagens aparecerão à medida que ocorrerem.

Recomendado:  O que é GPIO e para que você pode usá-lo?

Nós digitamos o seguinte:

dmesg -H -w

O comando "dmesg -H -w" em uma janela de terminal.

As mensagens existentes são exibidas. Não voltamos ao prompt de comando porque estamos dmsegaguardando novas mensagens e as exibiremos assim que chegarem.

A saída "dmsesg" em uma janela de terminal.

Queremos executar outro aplicativo, portanto, precisamos de uma nova screen janela. Pressionamos Ctrl + A e então C para criar uma nova janela. Vamos usar watchpara executar repetidamente vmstat , de modo que tenhamos uma exibição freqüentemente atualizada do uso da memória virtual em nosso computador.

No novo prompt de comando, digitamos o seguinte:

assistir vmstat

O comando "watch vmstat" em uma janela de terminal.

A vmstatsaída aparece e é atualizada a cada dois segundos.

A saída "vmstat" em uma janela de terminal.

Nossos dois processos estão em execução. Para pular entre as  screenjanelas, você pressiona Ctrl + A e o número da janela. A primeira que criamos é a janela zero (0), a próxima é a janela 1 e assim por diante. Para pular para a primeira janela ( dmesgaquela), pressionamos Ctrl + A e 0.

Retornando à tela "dmesg" em uma janela de terminal.

Se pressionarmos Ctrl + A e 1, isso nos leva de volta à vmstatjanela.

Retornando à tela "vmstat" em uma janela de terminal.

Isso é muito bacana! Podemos pressionar Ctrl + A e, em seguida, D para desligar desta sessão; podemos reconectar mais tarde. Ambas as sessões ainda estarão em execução. Novamente, para alternar entre as janelas, pressionamos Ctrl + A e o número (0 ou 1) da janela para a qual queremos alternar.

Vamos para a próxima etapa e ver as duas telas em uma janela. Ao fazer isso, você aumentará a janela do terminal para um tamanho que torne esta etapa útil. Nossos exemplos são limitados ao tamanho de nossas capturas de tela, então nossas janelas parecerão um pouco apertadas.

Para fazer isso, pressionamos Ctrl + A e, em seguida, Shift + S (é necessário um “S” maiúsculo).

A janela se divide em duas “regiões”.

Uma sessão de janela de "tela" dividida em duas regiões horizontais em uma janela de terminal.

A região superior ainda é exibida vmstate a região inferior está em branco. O cursor é destacado na imagem abaixo. Para movê-lo para a região inferior, pressionamos Ctrl + A e, em seguida, Tab.

Uma sessão de janela de "tela" dividida em duas regiões horizontais com o cursor na região inferior de uma janela de terminal.

O cursor se move para a região inferior, que na verdade é apenas um espaço vazio. Não é um shell, então não podemos digitar nada nele. Para obter uma exibição útil, pressionamos Ctrl + A e, em seguida, pressionamos “0” para exibir a dmesgjanela nesta região.

A sessão de "tela" com um painel dividido horizontal que mostra um processo diferente em cada região em uma janela de terminal.

Isso nos dá ambas as saídas ao vivo em uma janela dividida. Se pressionarmos Ctrl + A e D para destacar a janela e, em seguida, reconectá-la, perderemos a visualização do painel dividido. No entanto, podemos restaurá-lo com os seguintes atalhos de teclado:

  • Ctrl + A, S: Divide a janela horizontalmente.
  • Ctrl + A , Tab: mover para a região inferior.
  • Ctrl + A, 0: Exibir o zero da janela na região inferior.

Podemos dar um passo adiante. Agora vamos dividir o painel inferior verticalmente e adicionar um terceiro processo à exibição. Com o cursor na região inferior, pressionamos Ctrl + A e C para criar uma nova janela com uma concha. A região inferior exibe a nova janela e nos dá um prompt de comando.

Uma sessão de "tela" com um painel de divisão horizontal mostrando uma nova janela na região inferior de uma janela de terminal.

Em seguida, executamos o dfcomando para verificar o uso do sistema de arquivos :

df

Uma sessão de "tela" com um painel dividido horizontal e "df" digitado na região inferior de uma janela de terminal.

Quando vemos a dfexecução, pressionamos Ctrl + A e a barra vertical (|). Isso divide a região inferior verticalmente. Pressionamos Ctrl + A e Tab para mover para a nova região. Em seguida, pressionamos Ctrl + A e 0 para exibir a dmesgjanela.

Recomendado:  Como remover aplicativos integrados da Apple da tela inicial do iOS

Uma sessão de "tela" mostrando três painéis em uma janela de terminal.

Você também pode mover-se de região para região e adicionar mais divisões verticais ou horizontais. Aqui estão algumas combinações de teclas mais úteis:

  • Ctrl + A: Salta para a frente e para trás entre a região atual e a anterior.
  • Ctrl + A, Q: Fechar todas as regiões, exceto a atual.
  • Ctrl + A, X: Fechar a região atual.

Usando a tela sobre SSH

Com o screen, você pode iniciar uma sessão de janela, desanexá-la para que continue em execução em segundo plano, efetuar logoff ou login novamente e reconectar a sessão.

Vamos fazer uma conexão SSH ao nosso computador de um diferente com o  ssh comando. Temos que fornecer o nome da conta com a qual vamos nos conectar e o endereço do computador remoto.

Para nosso exemplo, digitamos o seguinte:

ssh dave@192.168.4.30

O comando "ssh dave@192.168.4.30" em uma janela de terminal.

Depois de autenticar no computador remoto e fazer login, digitamos o seguinte para iniciar uma screensessão chamada “ssh-geek”:

tela -S ssh-geek

O comando "screen -S ssh-geek" em uma janela de terminal.

Para fins de demonstração, executaremos  top na screenjanela, mas você pode iniciar qualquer processo demorado ou interminável.

Nós digitamos o seguinte:

topo

O comando "top" em uma janela de terminal.

Uma vez que  topestá em execução na janela, pressionamos Ctrl + A e, em seguida, D para destacar a janela.

O processo "superior" em execução em uma janela de "tela" em uma janela de terminal.

Voltamos à janela original do terminal remoto.

O usuário retornou à janela original do terminal

Se digitarmos exit, conforme mostrado abaixo, ele desconecta a sessão SSH e estamos de volta em nosso computador local:

Saída

O comando "sair" em uma janela de terminal.

Nós digitamos o seguinte para reconectar:

ssh dave@192.168.4.30

O comando "ssh dave@192.168.4.30" em uma janela de terminal.

Depois de reconectar e fazer login, podemos digitar o seguinte para reconectar a screensessão:

screen -r ssh-geek

O comando "screen -r ssh-geek" em uma janela de terminal.

Agora estamos reconectados à nossa instância ainda em execução de top.

O processo "superior" em execução em uma janela de terminal.

Isso é ótimo se você deseja iniciar um processo em uma máquina e continuar de onde parou em outra.

Compartilhando uma sessão de tela

Você também pode usar uma screensessão para permitir que duas pessoas vejam e interajam com a mesma janela. Digamos que alguém executando o Fedora em seu computador deseja se conectar ao nosso servidor Ubuntu.

Ele digitaria o seguinte:

ssh dave@192.168.4.30

O comando "ssh dave@192.168.4.30" em uma janela de terminal.

Depois de conectado, ele inicia uma sessão de tela chamada “ssh-geek” usando a opção -S (nome da sessão). Ele também usa as opções -d(desanexar) e  -m(criação forçada) para criar uma nova screensessão que já está desanexada.

Ele digita o seguinte:

screen -d -m -S ssh-geek

O comando "screen -d -m -S ssh-geek" em uma janela de terminal.

Ele digita o seguinte, usando a opção -X(modo multiscreen) para anexar a sessão:

screen -X ssh-geek

O comando "screen -X ssh-geek" em uma janela de terminal.

Em um computador Manjaro, outra pessoa se conecta ao computador Ubuntu com as mesmas credenciais de conta, conforme mostrado abaixo:

ssh dave@192.168.4.1

O comando "ssh dave@192.168.4.1" em uma janela de terminal.

Assim que screenestiver conectada, ela digita o  comando e usa a opção -X (modo multiscreen) para ingressar na mesma sessão da janela, assim:

screen -X ssh-geek

O comando "screen -X ssh-geek" em uma janela de terminal.

Agora, qualquer coisa que qualquer uma das pessoas digitar, a outra verá. Por exemplo, quando uma pessoa emite o comando de data, ambas as vêem conforme é digitado, bem como sua saída.

O comando "data" em uma janela de terminal.

Saída do comando "data" em uma janela de terminal.

Ambas as pessoas agora estão compartilhando uma screensessão que está sendo executada em um computador Ubuntu remoto.


Para um software que viu a luz do dia pela primeira vez em 1987, screen ainda traz um grande golpe de produtividade. Familiarizar-se com ele será um tempo bem aproveitado!