Introdução
Para quem já está familiarizado com os terminais virtuais do Linux, vai achar muito similar essa ferramenta porreta chamada
Screen, que é um gerenciador de janelas que trás muitos recursos, desenvolvido pelo projeto
GNU.
Podemos até dizer que quem utiliza o Screen, utiliza-o para diversas finalidades, eu por exemplo uso para poder abrir outras sessões para gestão de servidores, em janelas separadas em uma mesma sessão SSH e ainda poder compartilhar essas mesmas sessões para poder ensinar ou até mesmo apenas pelo prazer de compartilhar.
Para se ter idéia, enquanto em uma sessão estou compilando o Zope, na outra sessão estou fazendo download de aplicações que necessitarei, e ainda posso abrir mais uma sessão enquanto aguardo o download e a compilação, sendo que a qualquer momento posso voltar novamente ver o andamento das coisas.
Mas o Screen não se limita somente a isso, olhado o man page (
man screen) dele você encontrará muitas informações úteis, e claro, aprenderá ainda mais sobre este comando.
Agora deixemos de lenga lenga e vamos ao que interessa...
Requisitos
Uma distribuição Linux, ou qualquer Unix, também pode ser da família BSD, claro, eu estou usando Slackware no qual já veio com o screen instalado. Caso seu sistema não tenha recomendo a você o
Google, nele você vai achar o pacote a ser instalado, e como a idéia aqui não é ensinar como instalar o Screen e sim explorar os recursos oferecidos por ele, terá que consultar o oráculo Google ou acessar o
site oficial do Screen e seguir a documentação, mas acredito ser difícil uma distro Linux não ter o screen.
Utilizando o Screen
Digamos que você deseja acessar remotamente uma máquina via SSH e efetuar duas operações de uma só vez, enquanto ensina o seu amigo que está do outro lado do mundo a configurar o Apache, ainda está compilando um Zope.
Após ter logado na máquina remota execute o Screen:
screen
Você vai dizer, "Uai, mas não aconteceu nada?". Eu poderia ter dado um clear para limpar a tela ué, seria este um outro jeito de limpar a tela? Não!.. Execute "ps -aux" e veja o processo do screen rolando, o que significa que neste momento já está em uma janela do Screen.
Certo, e daí? Relaxa, agora vamos ao primeiro comando básico:
screen -ls
There is a screen on:
4270.pts-1.sinapse (Attached)
1 Socket in /home/cleber/.screen.
Com este comando acabamos de listar as sessões abertas do screen onde a sessão marcada com (Attached) é a sessão que você está agora. Além de múltiplas janelas você pode abrir múltiplas sessões, observe que este comando lista as sessões e não as janelas. Então vamos criar a segunda janela virtual porque a primeira já abre por padrão quando iniciamos o Screen.
Para isso pressione "
Ctrl+a" simultaneamente, solte e em seguida pressione "
c", a tela será limpa novamente, agora temos uma segunda janela virtual do screen. Para se navegar entre as janelas utilize o atalho "
C-a n" (n de next, isto é, próxima janela). Ah, para facilitar vamos usar alguns atalhos, dessa forma teremos algo contraído, por exemplo, o comando acima: "C-a n" quer dizer "Ctrl+a n", sacou?
Então maravilha, se familiarize com estes atalhos pois é exatamente assim que você também verá no man page do screen, da mesma forma que temos o comando para seguir, temos ainda o "
C-a p" (p de previous o mesmo que anterior), se desejar ainda poderá usar "
C-a a", que também servirá para navegar entre as janelas. Pronto!
Agora você já pode abrir quantas janelas quiser e/ou precisar e deixar qualquer processo rolando nelas.
Agora imagine que na hora que você se logou em um servidor e estava lá a mais de 20 minutos em uma compilação, do nada por algum motivo sua conexão é cortada, ou sua janela do terminal é fechada, ou ainda pior, um técnico de energia elétrica mexeu em um fio que desligou seu computador, cortando assim sua conexão com o servidor...
Ai é a grande sacada, ao invés de sair batendo no vizinho ou quebrando o técnico de telefonia ou de energia elétrica, você poderá respirar fundo e se perguntar, deve ter alguma forma de recuperar isso não? Ou, e se eu precisar fechar minha conexão ssh para mais tarde recuperá-la? Ou seja, como fechar a sessão ssh sem finalizar a(s) sessão(ões) do Screen? Simples, execute "
C-a d" que irá retornar [detached], que quer dizer descolar.
E se agora você executar "
screen -ls", verá a sessão que você acabou de sair marcada como (Detached), as vidas de seus vizinhos e dos técnicos acabam de ser salvas.
E melhor que isso, digamos que você teve que sair correndo de casa para o trabalho, então você poderá fechar a sessão ssh e desligar tranquilamente seu computador, pois chegando no trabalho você poderá ver o andamento dos processos deixados nas janelas ou acessar seus clientes, como?
Acesse a máquina via ssh novamente e digite "
screen -r". Tá-dháaaa! Legal isso né!
Que tal agora compartilhar essa sessão com um amigo seu? Uáu! Dá para fazer isso?
Sim! Peça para seu amigo acessar a sua máquina via ssh com o mesmo usuário que você esta logado, assim que ele logar peça para executar "
screen -x", com este comando ele se conectará à mesma sessão que você esta e desta forma tudo o que você e ele fizerem serão vistos pelos dois.
O mais bacana é que você pode conectar quantas pessoas quiser a uma sessão do Screen. CARACAS... Fala sério, isso é muito massa, agora você poderá mostrar para seu amigo como se compila o Apache ou qualquer outra aplicação.
Para fechar uma janela basta digitar "
exit" na última janela, o Screen será finalizado. Com estes comandos básicos já é possível fazer muita coisa, agora se você der uma olhada na man page (man screen) verá que você não aprendeu nada sobre o screen, pois ainda existe muita coisa que pode ser feita com ele, sua imaginação será o limite para a quantidade de possibilidades que o screen te fornece.
Dicas importantes
Dúvidas, críticas e sugestões, doações hehehehe, podem contar comigo, até a próxima.
(Este artigo foi publicado originalmente em
http://www.cleberjsantos.com.br)