Já tem um tempão que
gostaria de postar algo sobre o comando screen, acho que chegou a
hora. Essa ferramneta é indispensável para qualquer administrador
de servidores *UNIX like*. Para ajudar a entender a importancia desse
comando segue uma rápida história que acontece muito na vida de
quem administra um servidor unix ou linux.
Um belo dia você é
acionado pelo sobreaviso da empresa onde trabalha ou presta serviço
e precisa acessar o servidor WEB de forma remota, claro você usa o
SSH para isso, até ai tudo bem. No decorrer da sua análise para
descobrir o que esta acontecendo com o serviço WEB você executa
algum tipo de ferramente de análise e precisa de outra aba do
terminal para executar o tcpdump, o que você faz? Inicia outra
sessão SSH para isso, agora você tem duas sessões SSH uma em cada
aba do terminal.
Depois de algum tempo sua
conexão com a internet cai, você perde todas as suas conexões
antes estabelecidas, inclusive a do SSH. É isso mesmo você perdeu
todo seu trabalho realizado até aquele momento. Infelizmente você
precisa acessar o servidor novamente e começar tudo de novo.
É ai que entra o comando
screen, pense nele como se fosse aquelas abas do firefox com isso
basta apenas uma conexão SSH com o servidor, e mesmo que sua
internet caia não tem problema, com o screen você pode recuperar a
conexão que estava usando antes de perder o acesso a internet, não perdendo nada do que estava fazendo. Vamos
ao que interessa.
Instale o screen:
apt-get install screen
Um pouco do básico, para
usar basta digitar screen e apertar enter:
Apartir desse momento
você já esta no prompt do screen, onde você pode usar "Ctrl+A"
para enviar comandos para o screen, como exercicio aperte "Ctrl+A"
e depois ? para ver uma tela de ajuda mostrando os comandos que podem
ser usados juntos com o "Ctrl+A":
O comando "Ctrl+A"
"c" serve para abrir outra janela dentro do screen, assim
você pode rodar dois comandos ao mesmo tempo em uma conexão SSH e
sem precisar colocar um dos comandos em background. Para os nossos
testes não será necessário acessar nenhuma máquina de forma
remota, basta abrir um terminal local. Vamos fazer um exercício para
entendermos como o "Ctrl+A" "c" funciona, para
esse exercicio precisamos saber que o comando "Ctrl+A" "n"
serve para acessar as janelas que foram criadas. Abra um terminal,
digite screen e crie mais duas janelas apertando duas vezes "Ctrl+A"
"c". Agora execute o comando "top" e depois vá
para a outra janela do screen com o comando "Ctrl+A" "n"
e execute o comando "watch ls", execute novamente "Ctrl+A"
"n" e execute o comando "netstat". Agora para
você ver os comandos digitados basta ir para as suas respectivas
janelas com o comando "Ctrl+A" "n". Perceba que
em apenas um terminal você pode executar três comandos diferentes
sem precisar colocar em background.
Você pode fechar uma das
janelas criadas executando "exit" ou "Ctrl+A"
"k", se você quiser apenas fechar a janela mas deixar o
processo rodando execute "Ctrl+A" "d" (d=detach).
Faça esse teste em uma das janelas criadas, execute "Ctrl+A"
"d", agora liste as sessões do screen com o comando
"screen -ls", depois de achar a sessão que você tinha
feito o detach é só reestabelecer com o comando "screen -r
nome-da-sessão":
Você também pode dar
nomes a sua sessão e executar o comando junto com o comando screen,
neste exemplo vamos criar uma sessão dando um nome e executando o
comando:
$screen -S NomeSessao-LS
ls /tmp
Agora posso executar o
comando "Ctrl+A" "n" e depois listar "screen
-ls" e se precisar recuperar a sessão que executei meu comando
ou script "screen -r nome-da-sesao".
Dica tirada do viva o
linux:
Que tal agora
compartilhar essa sessão com um amigo seu? 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.