Stoa :: Ewout ter Haar :: Blog :: Dica de desenvolvimento: screen

fevereiro 07, 2010

default user icon
Postado por Ewout ter Haar

Cada desenvolvedor que interage com a linha de comando deve conhecer screen. Este programa, que vem com qualquer distribuição linux, permite rodar várias shells dentro de um único terminal. Mas o maior vantagem é que screen permite o desenvolvedor / administrador se desconectar do servidor sem parar os seus processos. 

Se não estiver usando screen ainda, pare tudo que está fazendo e procure um tutorial. Aqui dou somente as dicas mínimas necessários para começar. 

O uso típico é assim: entre no seu servidor via ssh e roda screen. Abre N "abas" ou shells com Ctlr-a-c. Mude entre eles com Ctlr-a-p / Ctrl-a-n ou Ctrl-a-0, Ctrl-a-1, etc. O seu ambiente de trabalho ficará mais ou menos assim:

sessão de screen

Note a visualização dos shells abertos na parte de baixo da tela. Coloque o seguinte no arquivo .screenrc no seu diretório home para obter este efeito:

caption     always        "%{+b rk}%H%{gk} |%c %{yk}%d.%m.%Y | %72=Load: %l %{wk}"
hardstatus alwayslastline "%?%{yk}%-Lw%?%{wb}%n*%f %t%?(%u)%?%?%{yk}%+Lw%?"

Se precisar se deslogar mas não quer perder o seu trabalho, "tire" (detach) a sessão com Ctrl-a-d. A próxima vez que entre, use screen -r para voltar. Use screen -list para uma lista de sessões abertas.

Levei um tempo para sacar a utilidade do screen. Achei que podia muito bem simplesmente entrar no servidor vários vezes, usando vários xterms. Mas a vantagem de screen não é o multiplexador do terminal. A grande vantagem é que pode retomar a sua sessão após ser deslogado (voluntariamente ou não) do seu servidor. Quantas vezes já não perdi a conexão de rede enquanto estava fazendo algo num servidor. Usando screen, é só uma questão de entrar de novo e recuperar toda sessão com screen -r

 

Palavras-chave: desenvolvimento, screen

Esta mensagem está sob a licença CreativeCommons Atribuição.

Postado por Ewout ter Haar | 2 usuários votaram. 2 votos

Comentários

  1. Renato Callado Borges escreveu:

    Olá Ewout!

    Existe uma outra função do screen que eu uso muito, muito mesmo: dividir a tela em vários "pedaços", cada um rodando uma coisa.

    Para criar uma divisão horizontal da tela, o atalho é ctrl+a, shift+s (split). Para remover a divisão, ctrl+a, shift+x.

    Para "navegar" de uma divisão para a outra, usa-se ctrl+a, tab.

    A grande vantagem é ter vários sshs numa mesma tela, e assim quando se está fazendo "mil coisas ao mesmo tempo", basta uma olhada rápida para saber se deu algum problema ou se alguma tarefa terminou.

    É possível dividir a tela verticalmente, desde que se aplique um patch e recompile o screen. Fica muito bom, exceto que o copiar-e-colar não respeita as divisões verticais.

    Por falar em copiar-e-colar, experimentem usar ctrl+a, [ para iniciar o "selecionar", movam o cursor com as setas até onde quer começar a copiar e aperte espaço, mova o cursor até onde quer terminar de copiar, aperte espaço, aí navegue até a tela em que quer colar e use ctrl+a, ].

    Abraço!

    Renato.

    Renato Callado BorgesRenato Callado Borges ‒ segunda, 08 fevereiro 2010, 05:30 -02 # Link |

  2. Ewout ter Haar escreveu:

    Obrigado pela dica, Renato, não conhecia. Você pelo jeito está acostumado com monitores grandes, hein? Tentei num servidor rodando debian, e não funcionou direito: a segunda tela aparentemente fica sem shell (ou "window", não sei direito). Vou ter que investigar mais.

    Ewout ter HaarEwout ter Haar ‒ segunda, 08 fevereiro 2010, 13:37 -02 # Link |

  3. Renato Callado Borges escreveu:

    Olá Ewout!

    Pelo contrário - eu uso screen pois em geral trabalho num laptop, com tela de 12 polegadas. Então cada pixel conta!

    Você tem razão quanto a não aparecer um terminal ao criar um split (em "screenês" um terminal ou window é chamado um 'screen'). Você precisa navegar até esse split e criar um terminal lá, com ctrl+a, ctrl+c.

    Outra dica: se quiser abrir automaticamente um programa (e.g., um mutt) ao iniciar o screen, adicione no final do .screenrc:

    stuff "mutt^M"

    E se quiser que tenha um outro terminal a linha seria:

    screen

    Finalmente, para usar a "minha" configuração preferida: um split com um mutt embaixo, e um terminal em cima, assim posso ir trabalhando, e quando surge um email novo eu logo vejo.

    screen -t "Work"

    stuff "fetchmail -d 55^M"

    split

    focus down

    screen -t "Mutt"

    stuff "mutt^M"

    focus down

    Abraço!

    Renato.

    Renato Callado BorgesRenato Callado Borges ‒ segunda, 08 fevereiro 2010, 13:51 -02 # Link |

  4. Leonardo Boiko escreveu:

    Eu faço isto no meu .bashrc:

    # if this is an xterm set the title to user@host:dir
    # if it's screen(1), set the screen-window title to the hostname
    case "$TERM" in
    xterm*|rxvt*|urxvt*)
        PROMPT_COMMAND+='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
        ;;
    screen*)
        PROMPT_COMMAND+='echo -n -e "\033k${HOSTNAME}\033\\"'
        ;;
    *)
        ;;
    esac
    

    Leonardo Ferreira da Silva BoikoLeonardo Boiko ‒ quinta, 11 fevereiro 2010, 18:32 -02 # Link |

  5. Leonardo Boiko escreveu:

    Aviso: é um PROMPT_COMMAND+= (e não =) porque seto outras coisas no PROMPT_COMMAND antes.

    Leonardo Ferreira da Silva BoikoLeonardo Boiko ‒ quinta, 11 fevereiro 2010, 18:33 -02 # Link |

  6. Vitor Eiji Justus Sakaguti escreveu:

    Uma outra utilidade é poder reiniciar o X sem perder processos como downloads e simulações demoradas. Já fez a diferença para mim várias vezes.

    Vitor Eiji Justus SakagutiVitor Eiji Justus Sakaguti ‒ sexta, 12 fevereiro 2010, 00:53 -02 # Link |

Você deve entrar no sistema para escrever um comentário.

Termo de Responsabilidade

Todo o conteúdo desta página é de inteira responsabilidade do usuário. O Stoa, assim como a Universidade de São Paulo, não necessariamente corroboram as opiniões aqui contidas.