Multiplexadores de terminal são ferramentas poderosas que permitem gerenciar múltiplas sessões de terminal dentro de uma única janela, além de manter processos em execução mesmo quando você se desconecta. Para quem trabalha com servidores remotos via SSH, desenvolvimento de software ou administração de sistemas, dominar um multiplexador é quase obrigatório, pois aumenta a produtividade e evita a perda de trabalho por quedas de conexão.

Nesta aula, vamos explorar os dois multiplexadores mais populares no mundo Linux: tmux e screen. Ambos oferecem funcionalidades semelhantes, mas com abordagens e sintaxes diferentes. Vamos entender suas diferenças, como criar sessões persistentes, os casos de uso mais comuns e os comandos essenciais para operar essas ferramentas.

tmux e screen

tmux (Terminal Multiplexer) é um multiplexador moderno, altamente configurável e com suporte a plugins. Ele foi criado para substituir o antigo screen, oferecendo uma interface mais amigável, melhor desempenho e recursos avançados como divisão de janelas em painéis, gerenciamento de sessões e suporte a scripts. O tmux é amplamente utilizado pela comunidade de desenvolvedores e é o padrão em muitas distribuições Linux.

screen (GNU Screen) é o multiplexador clássico, presente em praticamente todos os sistemas Unix-like. Ele existe desde os anos 80 e é extremamente estável e confiável. Embora menos moderno que o tmux, o screen ainda é muito usado em ambientes corporativos e em scripts de automação, principalmente por sua ubiquidade e simplicidade.

Ambos permitem criar sessões, dividir a tela em múltiplas regiões, desanexar e reanexar sessões, e manter processos rodando em segundo plano. A escolha entre eles geralmente se resume à preferência pessoal e ao ambiente em que você trabalha.

Sessões persistentes

Uma das principais funcionalidades dos multiplexadores é a capacidade de manter sessões persistentes. Isso significa que você pode iniciar um processo (como um servidor web, um script de longa duração ou um editor de texto) dentro de uma sessão do tmux ou screen, desanexar-se dela (fechando a janela do terminal ou perdendo a conexão SSH) e, mais tarde, reanexar-se à mesma sessão, encontrando tudo exatamente como deixou.

Isso é possível porque o multiplexador roda como um processo independente no servidor, mantendo o estado dos programas que você iniciou. Quando você se desconecta, a sessão continua viva em segundo plano. Quando você retorna, pode reanexar e continuar de onde parou. Essa funcionalidade é essencial para tarefas como:

  • Executar backups longos ou transferências de arquivos que não podem ser interrompidas.
  • Manter um servidor de aplicação rodando sem precisar de uma janela aberta.
  • Trabalhar em projetos que exigem várias abas ou painéis, sem perder o contexto.

Casos de uso

Os multiplexadores de terminal são extremamente versáteis e podem ser usados em diversos cenários. Alguns dos casos de uso mais comuns incluem:

  • Trabalho remoto via SSH: Ao conectar-se a um servidor remoto, você pode iniciar uma sessão tmux e realizar todas as suas tarefas dentro dela. Se a conexão cair, basta reconectar e reanexar a sessão, sem perder o progresso.
  • Desenvolvimento de software: Muitos desenvolvedores usam tmux para dividir a tela em painéis, exibindo código, testes e logs simultaneamente. Isso melhora o fluxo de trabalho e evita alternar entre janelas.
  • Operação de servidores: Administradores de sistemas frequentemente usam screen ou tmux para monitorar logs, rodar comandos em segundo plano e gerenciar múltiplos serviços.
  • Automação e scripts: Você pode iniciar um script dentro de uma sessão desanexada do screen e depois verificar o resultado. Isso é útil para tarefas agendadas ou para executar comandos que demoram muito.

Comandos básicos

Vamos agora explorar os comandos essenciais tanto para o tmux quanto para o screen. Primeiro, veremos como instalar cada um, depois os comandos para criar, listar, anexar e desanexar sessões, além de atalhos de teclado para gerenciar janelas e painéis.

Instalação

Para instalar o tmux no Ubuntu/Debian:

sudo apt update
sudo apt install tmux

Para instalar o screen:

sudo apt install screen

No CentOS/RHEL, use yum ou dnf no lugar de apt.

Comandos do tmux

Para criar uma nova sessão com nome:

tmux new -s minha_sessao

Para desanexar (detach) da sessão atual, pressione Ctrl+b e depois d. Isso retorna ao terminal normal, mas a sessão continua rodando.

Para listar todas as sessões ativas:

tmux ls

Para reanexar a uma sessão existente:

tmux attach -t minha_sessao

Para dividir a janela horizontalmente (painel acima/abaixo): Ctrl+b seguido de % (para divisão vertical) ou " (para horizontal).

Para navegar entre painéis, use Ctrl+b e as setas do teclado.

Para criar uma nova janela dentro da sessão: Ctrl+b e depois c.

Para alternar entre janelas: Ctrl+b e o número da janela (0, 1, 2, ...).

Comandos do screen

Para criar uma nova sessão com nome:

screen -S minha_sessao

Para desanexar (detach), pressione Ctrl+a e depois d.

Para listar as sessões:

screen -ls

Para reanexar a uma sessão:

screen -r minha_sessao

Para dividir a tela no screen, é um pouco mais complexo e requer comandos no modo de comando. Por exemplo, Ctrl+a depois S divide horizontalmente, e Ctrl+a depois | divide verticalmente. Depois é preciso usar Ctrl+a e Tab para alternar entre regiões.

Para criar uma nova janela: Ctrl+a e depois c.

Para alternar entre janelas: Ctrl+a e depois o número da janela.

Vale notar que o tmux é geralmente considerado mais intuitivo e com melhor suporte a divisão de painéis, enquanto o screen é mais simples e amplamente disponível.

Boas práticas e observações finais

Ao usar multiplexadores, algumas boas práticas podem melhorar sua experiência:

  • Nomeie suas sessões: Sempre dê nomes descritivos às sessões, pois isso facilita identificar e reanexar a sessão correta, especialmente quando você tem várias ativas.
  • Use atalhos de teclado: Aprender os atalhos básicos (como Ctrl+b para tmux e Ctrl+a para screen) economiza tempo e torna o uso mais fluido.
  • Personalize o tmux: O tmux é altamente configurável. Você pode criar um arquivo ~/.tmux.conf para definir suas preferências, como cores, atalhos personalizados e status bar.
  • Combine com SSH: Ao trabalhar em servidores remotos, inicie sempre uma sessão multiplexada para evitar perda de trabalho por desconexões.

Em resumo, os multiplexadores de terminal são ferramentas indispensáveis para quem passa muito tempo no terminal. Eles aumentam a produtividade, oferecem flexibilidade e garantem a persistência dos seus processos. Tanto o tmux quanto o screen são excelentes opções; experimente ambos e escolha o que melhor se adapta ao seu fluxo de trabalho.

Referências

Exercícios

  1. Instale o tmux no seu sistema (se ainda não estiver instalado) e crie uma nova sessão chamada "teste". Em seguida, desanexe-se dela. Liste as sessões ativas para confirmar que a sessão "teste" está rodando.

    ✓ Resposta:
    tmux new -s teste
    # Dentro da sessão, pressione Ctrl+b e depois d para desanexar
    tmux ls
    # Saída esperada: teste: 1 windows (created ...) (attached)
    
  2. Explique a diferença entre desanexar (detach) e encerrar (kill) uma sessão no tmux. Dê um exemplo de quando usar cada um.

    ✓ Resposta: Desanexar (detach) significa sair da sessão sem encerrá-la, deixando os processos rodando em segundo plano. É usado quando você precisa fechar o terminal ou perder a conexão, mas quer continuar depois. Encerrar (kill) a sessão termina todos os processos dentro dela, liberando recursos. Use kill quando você terminou o trabalho e não precisa mais da sessão, por exemplo, após concluir uma tarefa longa. Exemplo: tmux kill-session -t teste.
  3. Crie uma sessão screen chamada "backup" e execute o comando sleep 60 dentro dela. Desanexe e reanexe a sessão, verificando que o comando ainda está em execução (o tempo restante deve ser menor que 60 segundos).

    ✓ Resposta:
    screen -S backup
    # Dentro da sessão, digite:
    sleep 60
    # Pressione Ctrl+a e depois d para desanexar
    # Reanexe com:
    screen -r backup
    # O comando sleep ainda estará em execução, agora com menos de 60 segundos restantes.
    
  4. No tmux, divida a janela em dois painéis horizontais (um acima do outro) e execute um comando diferente em cada painel (por exemplo, date em um e whoami no outro). Em seguida, alterne entre os painéis usando o atalho de teclado.

    ✓ Resposta:
    tmux new -s paineis
    # Dentro da sessão, pressione Ctrl+b e depois " (aspas duplas) para dividir horizontalmente
    # No painel superior, digite: date
    # Pressione Ctrl+b e a seta para baixo para ir para o painel inferior
    # No painel inferior, digite: whoami
    # Para alternar entre painéis, use Ctrl+b e as setas.
    
  5. Pesquise e descreva duas opções de configuração do tmux que podem ser definidas no arquivo ~/.tmux.conf para melhorar a usabilidade, como alterar o prefixo ou definir o histórico de scroll. Forneça exemplos de configuração.

    ✓ Resposta: Exemplos de configuração: 1) Alterar o prefixo de Ctrl+b para Ctrl+a (comum para quem vem do screen): set -g prefix C-a e unbind C-b e bind C-a send-prefix. 2) Aumentar o histórico de scroll para 5000 linhas: set -g history-limit 5000. Essas opções melhoram a produtividade e adaptam o tmux às suas preferências.