sábado, abril 09, 2016

Vantagens e Funcionalidades do Comando screen no Linux

Com o advento das interfaces gráficas no Linux, o sistema de abas permite que em qualquer emulador de terminal o usuário crie vários prompts de comando, o que facilita bastante a vida de quem gosta de desenvolver no terminal ou realiza administração de servidores remotos. Entretanto, sempre há aquela situação em que o X pode não estar disponível (quando, por exemplo, você tem que configurar um servidor in loco) ou você considera a criação de abas em excesso uma atitude pouco prática. Uma terceira situação ocorre quando você deseja deixar um programa em execução em um servidor remoto e deseja acompanhar o progresso sem ter que redirecionar a saída para um arquivo (digamos que esteja debuggando uma configuração). Nesses cenários, o comando screen é uma ferramenta muito útil.

Como o próprio nome em inglês já deixa claro, o screen permite gerenciar telas. Para entender como ele funciona, abra um terminal qualquer e digite o comando. A impressão é de que nada acontece, mas uma pequena mudança na barra de título evidencia que agora estamos em uma nova tela. Deve mudar de algo parecido com

usuario@localhost:~
para
[screen 0:usuario@localhost:~]
Ou seja, criamos a tela 0. Sem a divisão de telas que veremos adiante, a criação de uma tela automaticamente cria um terminal dentro da tela. E agora, o que fazemos com isso? Um primeiro teste simples. Dentro da tela, execute o comando top. Irá surgir a tela com a utilização da CPU e os processos ativos. Sem sair do top (algo que você consegue simplesmente apertando a tecla q), digite a sequência de comandos ctrl + a + d. Todos os comandos para o screen começam com ctrl + a. O d significa dettach , ou seja, você vai desanexar a tela. No seu prompt, deve aparecer uma mensagem assim
[detached from 17548.pts-0.localhost] 
Não se engane. O top continua em execução na tela 0. Sem medo de terminar o processo, pode fechar o emulador de terminal no X. Ainda assim o processo top estará executando. Como retornar a tela 0? Basta abrir um novo terminal e digitar o comando screen -r. Nesse caso, o r significa retornar ou resumir as telas anteriores. Esse cenário já é interessante para quando, por exemplo, você deseja compilar algo que vai demorar alguns minutos e deseja retornar de vez em quando para observar o progresso. Ou então está conectado através do SSH a um servidor e deseja executar um tarefa remota e retornar depois para acompanhar o progresso.

Agora vamos tentar uns exemplos mais complexos. Primeiro, veja abaixo a lista dos principais comandos relacionados ao screen:

  • Ir para a próxima tela: ctrl + a + espaço
  • Ir para a tela anterior: ctrl + a + backspace
  • Ir para a n-ésima tela: ctrl + a + [n]
  • Listar as telas abertas: ctrl + a + "
  • Dividir a tela na vertical: ctrl + a + |
  • Dividir a tela na horizontal: ctrl + a + S
  • Trocar entre as telas: ctrl + a + tab
  • Encerrar a divisão de telas: ctrl + a + Q
  • Criar um terminal em uma tela: ctrl + a + c

Vamos imaginar que você está conectado remotamente a um servidor e deseja criar várias telas. Já dentro da tela 0, se novamente digitar screen. Com isso, uma nova tela será criada

[screen 1:usuario@localhost:~]
E cada vez que você executar screen, uma nova tela será criada. Como alternar entre elas? Você pode utilizar ctrl + a + espaço ou ctrl + a + [n] para navegar entre as telas criadas. Digitando ctrl + a + " uma lista organizada de telas é exibida, permitindo você utilizar as telas direcionais para escolher qual deseja visualizar. Lembrando que você pode a qualquer momento desanexar as telas (ctrl + a + d) e retornar depois ( screen -r).

Agora vamos para a funcionalidade que considero a mais legal. Abra a tela 0 executando apenas o screen. Em seguida, divida a tela com ctrl + a + |. Irá surgir uma tela vazia no lado direito. Ao contrário da criação de telas com o screen apenas, a tela criada não tem um bash em execução. Para criar um, você precisa selecionar a tela vazia com ctrl + a + tab e em seguida abrir um terminal nela com ctrl + a + c. Pronto, agora você tem duas telas em exibição simultânea, basta utilizar ctrl + a + tab para alternar entre elas. Você também pode repartir na horizontal (ctrl + a + S) e também eliminar a divisão com ctrl + a + Q.

Para finalizar apenas um detalhe: se você desanexar as telas enquanto estão divididas, a configuração das telas é perdida, mas elas continuam existindo. Para retornar a configuração anterior, você precisa realizar a divisão manualmente e atribuir cada tela através do comando ctrl + a + [n]. Com essas dicas, espero que você leitor consiga aumentar sua produtividade ao exibir mais informação no seu terminal. No meu caso, o grande diferencial do screen foi permitir criar várias telas em uma máquina virtual criada na nuvem OpenStack e acessada através do VNC. Espero que o leitor encontre mais usos interessantes!


Post a Comment

Nenhum comentário: