Domine o Comando `screen` no Linux: Tutoriais e Truques!

Com o auxílio do comando `screen` no Linux, você consegue executar aplicativos de terminal em segundo plano e trazê-los para a frente sempre que precisar. Ele também oferece suporte a visualizações em tela dividida e funciona em conexões SSH, mesmo que você se desconecte e reconecte posteriormente!

O que é o Comando `screen`?

O `screen` é um multiplexador de terminal repleto de recursos. Afirmar que ele é capaz de realizar muitas tarefas seria um eufemismo. A sua página de manual ultrapassa as 4.100 linhas.

A seguir, apresentamos os cenários mais comuns nos quais você utilizaria o comando `screen`, que detalharemos neste artigo:

O funcionamento padrão envolve criar uma nova janela com um shell, executar um comando e, em seguida, enviar a janela para o plano de fundo (processo conhecido como “desanexação”). Quando você desejar acompanhar o progresso do seu processo, pode trazer a janela novamente para o primeiro plano (“reanexar”) e utilizá-la novamente. Isso é extremamente útil para processos longos, nos quais você não quer correr o risco de encerrá-los acidentalmente ao fechar a janela do terminal.
Após ter uma sessão `screen` em andamento, você pode criar novas janelas e executar outros processos nelas. É possível alternar facilmente entre as janelas para monitorar seu progresso. Além disso, você pode dividir sua janela de terminal em regiões verticais ou horizontais e visualizar suas várias janelas `screen` em uma única tela.
Você pode se conectar a uma máquina remota, iniciar uma sessão `screen` e iniciar um processo. Em seguida, você pode se desconectar do host remoto, reconectar-se e o processo continuará em execução.
É possível compartilhar uma sessão `screen` entre duas conexões SSH diferentes, possibilitando que duas pessoas vejam a mesma coisa em tempo real.

Instalando o `screen`

Para instalar o `screen` no Ubuntu, utilize o seguinte comando:

sudo apt-get install screen

Para instalar o `screen` no Manjaro, use este comando:

sudo pacman -Sy screen

No Fedora, digite o seguinte:

sudo dnf install screen

Primeiros Passos com o `screen`

Para iniciar o `screen`, basta digitar o comando abaixo e pressionar Enter:

screen

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

Você permanece no prompt de comando e parece que nada mais aconteceu. No entanto, você agora está executando um shell dentro de um emulador de terminal multiplexado. Por que isso é uma vantagem? Bem, vamos iniciar um processo que levará bastante tempo para ser concluído. Faremos o download do código-fonte mais recente do kernel do Linux e o salvaremos em um arquivo chamado `latest_kernel.zip`.

Para fazer isso, digite o seguinte:

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

Nosso download será iniciado, e o resultado do `curl` exibirá o progresso.

Não podemos mostrar uma imagem da próxima etapa, pois ela envolve uma sequência de teclas. Digite Ctrl + A, solte as teclas e, em seguida, pressione D para desanexar o `screen`.

O processo de download ainda estará em execução, mas a janela que mostrava o download será removida. Você retornará à janela do terminal de onde iniciou a sessão `screen`. Uma mensagem informará que uma janela `screen` com o rótulo `23167.pts-0.wdzwdz` foi desanexada.

Você precisará do número no início do nome da janela para anexá-la novamente. Se você esquecer, sempre pode usar a opção `-ls` (lista), como mostrado abaixo, para obter uma lista das janelas desanexadas:

screen -ls

Quando estiver pronto, você pode usar a opção `-r` (reanexar) e o número da sessão para anexá-la novamente, assim:

screen -r 23167

A janela que estava rodando em segundo plano será trazida de volta para a janela do terminal, como se nunca tivesse saído.

Se for um processo que eventualmente chegará ao fim, ele será concluído. Se for um processo contínuo, você poderá querer encerrá-lo. Em ambos os casos, 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 uma janela à força.

Digite o seguinte comando:

exit

Você retornará à janela anterior do terminal, que ainda exibirá o comando usado para anexar novamente a janela. Como encerramos nossa única janela separada, recebemos uma mensagem informando que o `screen` está sendo encerrado.

Utilizando Sessões Nomeadas no `screen`

Você pode usar a opção `-S` (nome da sessão) para nomear sua sessão `screen`. Utilizar um nome memorável em vez da identidade numérica da sessão facilita a reconexão com uma sessão. Para nomear nossa sessão como `bigfile`, digite:

screen -S bigfile

Quando o `screen` iniciar nossa sessão, veremos uma janela em branco com um prompt de comando. Vamos baixar um arquivo grande, usando um processo de longa duração como exemplo.

Digite o seguinte:

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

Quando o download começar, pressione Ctrl + A e, em seguida, pressione D para desanexar a sessão. Para visualizar os detalhes da nossa sessão desanexada usando a opção `-ls` (lista) com `screen`, digite:

screen -ls

Além do identificador numérico (23266), vemos o nome da nossa sessão (`bigfile`). Para anexá-la novamente, digite o seguinte, incluindo o nome da sessão:

screen -r bigfile

Fomos reconectados à nossa janela de download, e vemos que o download de longa duração ainda está em andamento.

Quando o download for concluído, digite `exit` para fechar a janela da sessão.

Usando o `screen` com Múltiplas Janelas

Até agora, utilizamos o `screen` para executar um único processo em segundo plano em uma janela separada. No entanto, o `screen` pode fazer muito mais do que isso. A seguir, vamos executar alguns processos que nos permitirão monitorar alguns aspectos do nosso computador.

Para iniciar uma sessão `screen` chamada `monitor`, digite:

screen -S monitor

No prompt de comando em nossa nova sessão de janela, vamos executar o `dmesg` e utilizar 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 forem geradas.

Digite o seguinte:

dmesg -H -w

As mensagens existentes são exibidas. Não voltamos ao prompt de comando porque o `dmseg` está aguardando novas mensagens e as exibirá assim que chegarem.

Desejamos executar outro aplicativo, portanto, precisamos de uma nova janela `screen`. Pressione Ctrl + A e, em seguida, C para criar uma nova janela. Vamos usar o `watch` para executar repetidamente o `vmstat`, para que tenhamos uma atualização frequente da exibição do uso de memória virtual em nosso computador.

No novo prompt de comando, digite o seguinte:

watch vmstat

O resultado do `vmstat` é exibido e atualizado a cada dois segundos.

Nossos dois processos estão em execução. Para alternar entre as janelas do `screen`, você pressiona Ctrl + A e o número da janela. A primeira que criamos é a janela zero (0), a seguinte é a janela 1 e assim por diante. Para alternar para a primeira janela (a do `dmesg`), pressione Ctrl + A e 0.

Se pressionarmos Ctrl + A e 1, isso nos levará de volta à janela do `vmstat`.

Isso é bem útil! Podemos pressionar Ctrl + A e, em seguida, D para se desconectar desta sessão; podemos nos reconectar mais tarde. Ambas as sessões continuarão em execução. Novamente, para alternar entre as janelas, pressione Ctrl + A e o número (0 ou 1) da janela para a qual você deseja alternar.

Vamos para a próxima etapa e exibir ambas as telas em uma janela. Ao fazer isso, expanda a janela do terminal para um tamanho que torne esta etapa útil. Nossos exemplos são limitados pelo tamanho de nossas capturas de tela, portanto, nossas janelas parecerão um pouco apertadas.

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

A janela será dividida em duas “regiões”.

A região superior ainda exibe o `vmstat`, e a região inferior está em branco. O cursor está destacado na imagem abaixo. Para movê-lo para a região inferior, pressione Ctrl + A e, em seguida, Tab.

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, pressione Ctrl + A e, em seguida, pressione “0” para exibir a janela do `dmesg` nesta região.

Isso nos fornece ambas as saídas ao vivo em uma janela dividida. Se pressionarmos Ctrl + A e D para desanexar a janela e, em seguida, anexá-la novamente, 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: move para a região inferior.
Ctrl + A, 0: exibe o zero da janela na região inferior.

Podemos ir além. Agora, vamos dividir o painel inferior verticalmente e adicionar um terceiro processo à exibição. Com o cursor na região inferior, pressione Ctrl + A e C para criar uma nova janela com um shell. A região inferior exibe a nova janela e nos fornece um prompt de comando.

Em seguida, execute o comando `df` para verificar o uso do sistema de arquivos:

df

Quando virmos o `df` em execução, pressione Ctrl + A e a barra vertical (`|`). Isso dividirá a região inferior verticalmente. Pressione Ctrl + A e Tab para mover para a nova região. Em seguida, pressione Ctrl + A e 0 para exibir a janela `dmesg`.

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

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

Utilizando o `screen` sobre SSH

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

Vamos fazer uma conexão SSH com nosso computador a partir de um outro, utilizando o comando `ssh`. Precisamos fornecer o nome da conta com a qual vamos nos conectar e o endereço do computador remoto.

Para nosso exemplo, digite o seguinte:

ssh [email protected]

Após se autenticar no computador remoto e fazer login, digite o seguinte para iniciar uma sessão `screen` chamada `ssh-geek`:

screen -S ssh-geek

<img loading=”lazy” decoding=”async” src=”https://etechpt.com/wp-content/