Tmux: multiplexador de terminal essencial

1. Introdução ao Tmux

Tmux é um multiplexador de terminal que permite gerenciar múltiplas sessões de terminal em uma única janela. Sua principal utilidade reside na persistência de sessões — você pode desanexar uma sessão, fechar o terminal e reanexá-la posteriormente exatamente onde parou. Além disso, oferece divisão de tela em painéis, gerenciamento de janelas e automação via scripts shell.

A instalação é simples. No Linux (Debian/Ubuntu):

sudo apt install tmux

No CentOS/RHEL:

sudo yum install tmux

No macOS via Homebrew:

brew install tmux

A terminologia fundamental do Tmux envolve três níveis hierárquicos:

  • Sessão: contêiner principal que agrupa janelas
  • Janela: equivalente a uma aba dentro da sessão
  • Painel: divisões dentro de uma janela

O prefixo padrão para comandos é Ctrl+b. Após pressioná-lo, você digita um comando específico.

2. Gerenciamento de Sessões

Criar uma sessão nomeada é essencial para organização:

tmux new -s meuservidor

Para desanexar a sessão atual sem encerrá-la, pressione Ctrl+b d. Para reanexar posteriormente:

tmux attach -t meuservidor

Listar todas as sessões ativas:

tmux ls

Para encerrar uma sessão específica:

tmux kill-session -t meuservidor

É possível criar sessões sem anexar imediatamente:

tmux new -s backup -d

Isso é útil em scripts que preparam ambientes para uso futuro.

3. Navegação entre Janelas e Painéis

Dentro de uma sessão, janelas funcionam como abas. Para criar uma nova janela:

Ctrl+b c

Navegar entre janelas:

Ctrl+b n   # próxima janela
Ctrl+b p   # janela anterior

Listar janelas numericamente:

Ctrl+b w

Para dividir o terminal em painéis:

Ctrl+b %   # divisão vertical
Ctrl+b "   # divisão horizontal

Navegar entre painéis:

Ctrl+b ←  # mover para painel à esquerda
Ctrl+b →  # mover para painel à direita
Ctrl+b ↑  # mover para painel acima
Ctrl+b ↓  # mover para painel abaixo

Redimensionar painéis:

Ctrl+b Ctrl+←   # redimensionar para esquerda
Ctrl+b Ctrl+→   # redimensionar para direita

4. Comandos Essenciais no Modo de Comando

O modo de comando é acessado com Ctrl+b :. Nele, você digita comandos diretamente.

Redimensionar painel específico (pane 2 para 20 linhas):

resize-pane -t 2 -y 20

Trocar posições entre painéis:

swap-pane -U   # trocar com painel acima
swap-pane -D   # trocar com painel abaixo

Quebrar um painel em nova janela:

break-pane

Enviar o mesmo comando para todos os painéis da janela:

send-keys -t 1 "ls -la" Enter

Para enviar a todos os painéis simultaneamente:

send-keys -t 0 "uptime" Enter
send-keys -t 1 "uptime" Enter
send-keys -t 2 "uptime" Enter

5. Personalização com Arquivo de Configuração

O arquivo ~/.tmux.conf é carregado automaticamente ao iniciar o Tmux. Exemplo básico:

# Altera o prefixo para Ctrl+a
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# Aumenta o histórico de scroll para 5000 linhas
set -g history-limit 5000

# Habilita mouse
set -g mouse on

# Ajusta cores da barra de status
set -g status-bg blue
set -g status-fg white

# Exibe data e hora na barra
set -g status-right "#[fg=white]%H:%M #[fg=yellow]%d/%m/%Y"

Para recarregar o arquivo de configuração sem reiniciar:

tmux source-file ~/.tmux.conf

Ou dentro do Tmux: Ctrl+b :source-file ~/.tmux.conf.

6. Automação com Scripts Shell

Criar sessões pré-configuradas via shell script é um dos maiores ganhos de produtividade. Exemplo prático: script que abre um projeto Node.js com três painéis.

#!/bin/bash

SESSION="meuprojeto"

# Verifica se a sessão já existe
tmux has-session -t $SESSION 2>/dev/null

if [ $? != 0 ]; then
    # Cria sessão com primeira janela
    tmux new-session -d -s $SESSION -n "editor"

    # Painel 0: editor (Vim)
    tmux send-keys -t $SESSION:editor "cd ~/projeto && vim" Enter

    # Divide horizontalmente (painel 1)
    tmux split-window -h -t $SESSION:editor
    tmux send-keys -t $SESSION:editor.1 "cd ~/projeto && npm run dev" Enter

    # Divide verticalmente no painel 1 (painel 2)
    tmux split-window -v -t $SESSION:editor.1
    tmux send-keys -t $SESSION:editor.2 "cd ~/projeto && git status" Enter

    # Cria segunda janela para logs
    tmux new-window -t $SESSION -n "logs"
    tmux send-keys -t $SESSION:logs "tail -f ~/projeto/logs/app.log" Enter
fi

# Anexa à sessão
tmux attach-session -t $SESSION

Com variáveis e loops, é possível gerenciar múltiplas sessões:

#!/bin/bash

PROJETOS=("api" "frontend" "worker")

for PROJETO in "${PROJETOS[@]}"; do
    tmux new-session -d -s $PROJETO -n "main"
    tmux send-keys -t $PROJETO:main "cd ~/$PROJETO && ls" Enter
    echo "Sessão $PROJETO criada."
done

echo "Sessões criadas:"
tmux ls

7. Dicas Avançadas e Integração

Habilitar o mouse permite selecionar texto e redimensionar painéis com cliques:

set -g mouse on

Para copiar texto com mouse, segure Shift enquanto seleciona.

O plugin tmux-resurrect salva e restaura sessões completas. Instalação via TPM (Tmux Plugin Manager):

# No ~/.tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Para salvar: Ctrl+b Ctrl+s
# Para restaurar: Ctrl+b Ctrl+r

Integração com SSH é direta. Crie uma sessão para servidores remotos:

tmux new -s servidores
Ctrl+b %   # divide painel
# Em cada painel, faça SSH para servidores diferentes
ssh usuario@servidor1
ssh usuario@servidor2

Scripts de deploy podem usar Tmux para monitorar múltiplos estágios:

#!/bin/bash
tmux new-session -d -s deploy
tmux send-keys -t deploy "cd /app && git pull" Enter
tmux split-window -h -t deploy
tmux send-keys -t deploy.1 "cd /app && npm run build" Enter
tmux split-window -v -t deploy.1
tmux send-keys -t deploy.2 "cd /app && pm2 restart all" Enter
tmux attach -t deploy

O Tmux se torna uma ferramenta indispensável para quem trabalha com terminal intensivamente, oferecendo organização, persistência e automação que elevam a produtividade no desenvolvimento e administração de sistemas.

Referências