- Dave McKay
@TheGurkha
27 de Março de 2020, 8:00am EDT
Com o comando Linux screen
, pode empurrar as aplicações terminais em execução para o fundo e puxá-las para a frente quando as quiser ver. Suporta também ecrã dividido e funciona sobre ligações SSH, mesmo depois de desligar e voltar a ligar!
Qual é o comando do ecrã?
O comando screen
é um multiplexador de terminal, e está absolutamente repleto de opções. Dizer que pode fazer muito é o avô dos understatatements. A página man corre para mais de 4.100 linhas.
Os seguintes são os casos mais comuns em que utilizaria o comando screen
, e iremos abordar estes casos mais adiante neste artigo:
- A operação padrão é criar uma nova janela com uma concha, executar um comando, e depois empurrar a janela para o fundo (chamado “detaching”). Quando quiser ver como está o seu processo, pode puxar novamente a janela para o primeiro plano (“reatar”) e utilizá-la novamente. Isto é óptimo para processos longos que não quer terminar acidentalmente fechando a janela do terminal.
- Pode ligar-se a uma máquina remota, iniciar uma
screen
sessão, e iniciar um processo. Pode desligar da máquina remota, voltar a ligar, e o seu processo continuará a correr. - Pode partilhar uma sessão
screen
entre duas ligações SSH diferentes para que duas pessoas possam ver a mesma coisa, em tempo real.
li>Após ter uma screen
sessão em execução, pode criar novas janelas e executar outros processos nelas. Pode facilmente saltar entre janelas para monitorizar o seu progresso. Pode também dividir a sua janela terminal em regiões verticais ou horizontais, e exibir as suas várias screen
janelas numa janela.
Ecrã de instalação
Para instalar screen
no ubuntu, use este comando:
sudo apt-get install screen
Para instalar screen
no Manjaro, usar o seguinte comando:
sudo pacman -Sy screen
No Fedora, digite o seguinte:
sudo dnf install screen
Arrancar com ecrã
Para começar screen
, basta digitar como se mostra abaixo e premir Enter:
screen
Verá uma página de informação de licença. Pode premir a barra de espaço para ler a segunda página ou Enter para voltar ao prompt de comando.
É deixado no prompt de comando, e nada de mais parece ter acontecido. No entanto, está agora a correr uma shell dentro de um emulador de terminal multiplexado. Porque é que isto é uma coisa boa? Bem, vamos iniciar um processo que vai demorar muito tempo a concluir. Vamos descarregar o código fonte para o último kernel Linux e redireccioná-lo para um ficheiro chamado latest_kernel.zip
.
Para o fazer, digitamos o seguinte:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
O nosso download começa, e a saída curl
mostra-nos o progresso.
Não podemos mostrar uma imagem do bit seguinte, porque é uma sequência de teclas. Digita-se Ctrl+A, solte essas teclas, e depois prima d para destacar o ecrã.
O processo de descarga ainda está a decorrer, mas a janela que mostra a descarga é removida. Volta à janela do terminal a partir da qual lançou a sessão screen
. Uma mensagem diz-lhe que um screen
janela rotulada 23167.pts-0.howtogeek
foi destacado.
É necessário o número desde o início do nome da janela para o voltar a ligar. Se o esquecer, pode sempre usar a opção -ls
(lista), como mostrado abaixo, para obter uma lista das janelas destacadas:
screen -ls
Quando estiver pronto, pode usar a opção -r
(reatar) e o número da sessão para a reatar, como assim:
screen -r 23167
A janela que tem estado a funcionar em segundo plano é agora trazida de volta à sua janela terminal como se nunca tivesse saído.
Se for um processo que vai até à sua conclusão, acabará por ser concluído. Se for um processo contínuo, acabará por querer terminá-lo. Seja como for, quando o processo terminar, poderá digitar exit
para sair do screen
. Em alternativa, pode pressionar Ctrl+A, e depois K para matar à força uma janela.
Digite o seguinte comando:
exit
O comando “exit” numa janela terminal.
É devolvido à janela terminal anterior, que ainda mostrará o comando que usou para voltar a ligar a janela. Porque fechámos a nossa única janela, e só a destacamos, recebemos uma mensagem que screen
está a terminar.
RELATADO: Como usar o “curl” para descarregar ficheiros da linha de comando do Linux
Usando sessões de ecrã nomeadas
P>Pode usar a opção -S
(nome da sessão) para nomear a sua screen
sessão. Se utilizar um nome memorável em vez da identidade numérica da sessão, é mais conveniente reconectar-se a uma sessão. Escrevemos o seguinte para nomear a nossa sessão “bigfile”:
screen -S bigfile
Quando screen
lança a nossa sessão, vemos uma janela em branco com um prompt de comando. Vamos descarregar um ficheiro grande, para podermos usar um processo de longa duração como exemplo.
Escrevemos o seguinte:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Quando o download começa, premimos Ctrl+A, e depois premimos D para destacar a sessão. Digitamos o seguinte para utilizar a opção -ls
(lista) com screen
para ver os detalhes da nossa sessão destacada:
screen -ls
Atrás do identificador numérico (23266), vemos o nome da nossa sessão (bigfile). Escrevemos o seguinte, incluindo o nome da sessão, para a recolocar:
screen -r bigfile
Estamos novamente ligados à nossa janela de descarga e vemos que a descarga longa ainda está em curso.
Quando a descarga está completa, escrevemos exit
para fechar a janela da sessão.
Tela de utilização com múltiplas janelas
Até agora, utilizámos screen
para colocar um único processo em segundo plano numa janela separada. Contudo, screen
é capaz de fazer muito mais do que isso. A seguir, vamos executar alguns processos que nos permitem monitorizar alguns aspectos do nosso computador.
Digitamos o seguinte para iniciar uma sessão de ecrã chamada “monitor”:
screen -S monitor
No prompt de comando na nossa nova sessão de janela, vamos lançar dmesg
e usar as opções -H
(human-readable) e -w
(wait for new messages). Isto irá exibir as mensagens de buffer do kernel; novas mensagens aparecerão à medida que ocorrem.
Escrevemos o seguinte:
dmesg -H -w
As mensagens existentes aparecem. Não voltamos ao prompt de comando porque dmseg
está à espera de novas mensagens, e irá exibi-las à medida que chegam.
A saída “dmsesg” numa janela terminal.
RELATADO: Como utilizar o comando dmesg no Linux
Queremos executar outra aplicação, por isso precisamos de uma nova janela screen
. Pressionamos Ctrl+A, e depois C para criar uma nova janela. Vamos utilizar watch
para executar repetidamente vmstat
, de modo a obter uma exibição frequentemente actualizada da utilização da memória virtual no nosso computador.
No novo prompt de comando, digitamos o seguinte:
watch vmstat
O comando vmstat
aparece e actualiza cada dois segundos.
Os nossos dois processos estão agora em execução. Para saltar entre as janelas screen
, prima Ctrl+A, e o número da janela. A primeira que criámos é a janela zero (0), a seguinte é a janela 1, e assim por diante. Para saltar para a primeira janela (o dmesg
one), premimos Ctrl+A e 0.
Se premirmos Ctrl+A e 1, voltamos ao vmstat
janela.
Isso é muito elegante! Podemos premir Ctrl+A, e depois D para nos separarmos desta sessão; podemos voltar a colocar mais tarde. Ambas as sessões ainda estarão a decorrer. Mais uma vez, para alternar entre as janelas, premimos Ctrl+A e o número (0 ou 1) da janela que queremos alternar para.
Vamos para o próximo passo e vemos ambos os ecrãs numa só janela. Quando o fizer, esticará a sua janela terminal para um tamanho que torne este passo útil. Os nossos exemplos estão limitados ao tamanho das nossas capturas de ecrã, pelo que as nossas janelas ficarão um pouco apertadas.
Para fazer isto, premimos Ctrl+A, e depois Shift+S (é necessário um “S” maiúsculo).
A janela divide-se em duas “regiões”.”
A região superior ainda exibe vmstat
, e a região inferior está em branco. O cursor é realçado na imagem de ecrã abaixo. Para o mover para a região inferior, premimos Ctrl+A, e depois Tab.
O cursor move-se para a região inferior, que na realidade é apenas um espaço vazio. Não é uma concha, pelo que não podemos escrever nada nela. Para obter uma exibição útil, premimos Ctrl+A, e depois premimos “0” para exibir a janela dmesg
nesta região.
Isto dá-nos ambas as saídas em directo numa janela dividida. Se pressionarmos Ctrl+A e D para destacar a janela, e depois voltarmos a colocá-la, perderemos a vista do painel dividido. No entanto, podemos restaurá-la com os seguintes atalhos de teclado:
- Ctrl+A, S: Dividir a janela horizontalmente.
- Ctrl+A, Tab: Ir para a região inferior.
- Ctrl+A, 0: Mostrar a janela zero na região inferior.
Podemos levar as coisas ainda um passo mais longe. Vamos agora dividir o painel inferior verticalmente, e adicionar um terceiro processo à visualização. Com o cursor na região inferior, pressionamos Ctrl+A e C para criar uma nova janela com uma concha dentro. A região inferior mostra a nova janela e dá-nos um comando prompt.
P>Próximo, executamos o comando df
para verificar a utilização do sistema de ficheiros:
df
Quando vemos df
a correr, batemos em Ctrl+A e o caracter de canalização (|)
. Isto divide a região inferior verticalmente. Pressionamos Ctrl+A e Tab para nos deslocarmos para a nova região. A seguir, premimos Ctrl+A e 0 para exibir o dmesg
window.
Também se pode mover de região para região, e adicionar mais divisões verticais ou horizontais. Aqui estão algumas combinações chave mais úteis:
- Ctrl+A: Saltar para trás e para a frente entre a região actual e a anterior.
- Ctrl+A, Q: Fechar todas as regiões excepto a actual.
- Ctrl+A, X: Fechar a região actual.
Utilizar ecrã Sobre SSH
Com screen
, pode iniciar uma sessão em janela, desligá-la para que ainda esteja a correr em segundo plano, sair ou voltar a entrar, e voltar a colocar a sessão.
Vamos fazer uma ligação SSH ao nosso computador a partir de uma ligação diferente com o comando ssh
. Temos de fornecer o nome da conta com a qual nos vamos ligar e o endereço do computador remoto.
Para o nosso exemplo, escrevemos o seguinte:
ssh [email protected]
Após autenticarmos no computador remoto e iniciarmos sessão, digitamos o seguinte para iniciar uma sessão chamada “ssh-geek”:
screen -S ssh-geek
Para fins de demonstração, executaremos top
na janela screen
, mas poderá iniciar qualquer processo de longa duração ou interminável.
Digitamos o seguinte:
top
Once top
está a correr na janela, clicamos em Ctrl+A, e depois D para destacar a janela.
Voltamos à janela do terminal remoto original.
Se digitarmos exit
, como se mostra abaixo, desliga a sessão SSH e estamos de volta ao nosso computador local:
exit
Digitamos o seguinte para reconectar:
ssh [email protected]
Após estarmos reconectados e logados, podemos digitar o seguinte para reatar a sessão screen
:
screen -r ssh-geek
Estamos agora reconectados à nossa instância ainda em curso de top
.
O processo “top” a correr numa janela de terminal.
Isto é óptimo se quiser iniciar um processo numa máquina, e depois retomar onde parou noutra.
RELACIONADO: Como criar e instalar chaves SSH a partir da shell Linux
Partilhar uma sessão de ecrã
P>Pode também usar uma sessão screen
para permitir que duas pessoas vejam e interajam com a mesma janela. Digamos que alguém a correr o Fedora no seu computador quer ligar-se ao nosso servidor Ubuntu.
Ele escreveria o seguinte:
ssh [email protected]
Depois de ligado, inicia uma sessão de ecrã chamada “ssh-geek” usando a opção -S (nome da sessão). Ele também usa as opções -d
(detach) e -m
(criação forçada) para criar uma nova screen
sessão que já está destacada.
Ele digita o seguinte:
screen -d -m -S ssh-geek
Ele digita o seguinte, usando a opção -X
(modo multi-ecrãs) para anexar a sessão:
screen -X ssh-geek
Num computador Manjaro, outra pessoa liga-se ao computador Ubuntu com as mesmas credenciais de conta, como mostrado abaixo:
ssh [email protected]
Após ela estar ligada, ela digita o comando screen
e usa a opção -X (modo multi-ecrãs) para entrar na mesma sessão da janela, assim:
screen -X ssh-geek
Agora, tudo o que uma pessoa digitar, a outra verá. Por exemplo, quando uma pessoa emite o comando “data” numa janela de terminal.
ambos estão agora a partilhar uma sessão screen
que está a correr num computador Ubuntu remoto.
Para um software que viu a luz do dia pela primeira vez em 1987, screen
ainda tem uma boa produtividade wallop. Familiarizar-se com ele será tempo bem passado!
RELATADO: 37 Comandos importantes do Linux que deve saber
Dave McKay usou pela primeira vez computadores quando a fita de papel perfurado estava na moda, e tem vindo a programar desde então. Após mais de 30 anos na indústria das TI, é agora um jornalista de tecnologia a tempo inteiro. Durante a sua carreira, trabalhou como programador freelance, gestor de uma equipa internacional de desenvolvimento de software, gestor de projectos de serviços de TI e, mais recentemente, como responsável pela protecção de dados. Dave é um evangelista Linux e defensor do código aberto. Leia a biografia completa ”