tmux avançado no dia a dia
Sessões, panes, automação, copy mode e um fluxo que fica especialmente bom quando o cliente está no macOS.
Muita gente usa tmux só para “não perder o terminal”. Isso já ajuda. Mas o ganho real aparece quando você passa a pensar em sessões como contexto, janelas como áreas de trabalho e panes como instrumentos temporários. A partir daí, tmux deixa de ser um multiplexador e vira um sistema operacional pequeno dentro do shell.
O modelo mental certo
O erro mais comum é tratar tmux como um conjunto de atalhos. O modelo que escala melhor é este:
- Sessão: um contexto longo, como
infra,cliente-x,estudos. - Janela: uma área de trabalho dentro daquele contexto, como
logs,shell,deploy. - Pane: uma ferramenta auxiliar temporária, como um
tail -f, umhtop, um REPL ou uma segunda shell.
Os comandos-base que realmente importam
A maior parte do uso avançado nasce de meia dúzia de comandos bem escolhidos. Em vez de decorar tudo, vale decorar o núcleo:
| Objetivo | Comando | Leitura prática |
|---|---|---|
| Criar sessão | tmux new -s infra | abre um contexto nomeado |
| Entrar numa sessão | tmux attach -t infra | retoma de onde parou |
| Listar sessões | tmux ls | vê o mapa mental ativo |
| Nova janela | Ctrl-b c | cria uma nova área de trabalho |
| Dividir vertical | Ctrl-b % | cria pane lateral |
| Dividir horizontal | Ctrl-b " | cria pane abaixo |
| Renomear janela | Ctrl-b , | dá semântica ao layout |
| Escolher sessão | Ctrl-b s | troca de contexto rápido |
| Escolher janela | Ctrl-b w | salta entre áreas |
Copy mode é o superpoder escondido
A funcionalidade mais subestimada do tmux é o copy mode. Ele resolve três dores comuns ao mesmo tempo: ler saída longa, procurar texto no histórico e copiar sem depender do scroll do terminal gráfico.
Ctrl-b [ # entra em copy mode
q # sai
/erro # busca para frente
?warning # busca para trás
n / N # próximo / anterior
Space # começa seleção (modo vi)
Enter # copia seleção
Se você trabalha com logs, esse recurso sozinho já paga o custo de aprender tmux. A diferença é grande: em vez de depender do scroll do iTerm, Kitty ou Terminal.app, você opera sobre o buffer interno do servidor tmux. Isso continua funcionando mesmo quando você anexa por SSH ou reconecta depois.
Layouts inteligentes sem virar refém deles
Layout fixo ajuda. Layout rígido atrapalha. O melhor uso costuma ser começar com um esqueleto previsível e depois deformar conforme a tarefa.
tmux new-session -d -s incidente -n shell
# pane 1: shell principal
# pane 2: logs
# pane 3: monitoramento
tmux split-window -h -t incidente:shell
tmux send-keys -t incidente:shell.1 'journalctl -fu caddy' C-m
tmux split-window -v -t incidente:shell.0
tmux send-keys -t incidente:shell.2 'htop' C-m
tmux select-layout -t incidente:shell tiled
tmux attach -t incidente
Esse padrão é poderoso porque torna seu contexto reconstruível. Em vez de “abrir coisas manualmente”, você descreve o ambiente como código shell.
Automação: o tmux fica sério quando você para de clicar
O salto para modo avançado acontece quando você usa tmux como alvo de automação. A ideia não é abrir tudo à mão. A ideia é dizer: “crie a sessão, abra duas janelas, rode este comando, mantenha este painel em observação”.
SESSION=deploy-api
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
tmux new-session -d -s "$SESSION" -n app
tmux send-keys -t "$SESSION":app 'cd /opt/workloads/api && bash' C-m
tmux new-window -t "$SESSION" -n logs
tmux send-keys -t "$SESSION":logs 'docker logs -f api' C-m
tmux new-window -t "$SESSION" -n checks
tmux send-keys -t "$SESSION":checks 'watch -n 2 curl -fsS https://api.exemplo.com/health' C-m
fi
tmux attach -t "$SESSION"
Repare no padrão: has-session evita recriar contexto à toa. Isso é especialmente útil em servidores de longa vida ou em sessões compartilhadas com outra pessoa.
Observabilidade operacional dentro do tmux
Tmux funciona muito bem como painel operacional leve. Não como dashboard bonito, mas como cockpit real: logs, health checks, shell principal e testes rápidos convivendo lado a lado.
- Pane 1: shell principal para comandos decisivos.
- Pane 2:
tail -foudocker logs -f. - Pane 3:
watchcom health check HTTP. - Pane 4: editor, REPL ou notas rápidas.
Quando você organiza assim, consegue acompanhar causa e efeito com menos troca de contexto. Um deploy acontece, os logs reagem, o health check muda, e tudo fica no mesmo quadro.
Configuração que vale a pena
Em vez de caçar uma configuração “perfeita”, prefira poucos ajustes com muito retorno.
set -g mouse on
set -g history-limit 100000
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
set -g status-keys vi
setw -g mode-keys vi
set -g set-clipboard on
bind r source-file ~/.tmux.conf \; display-message 'tmux.conf recarregado'
bind | split-window -h -c '#{pane_current_path}'
bind - split-window -v -c '#{pane_current_path}'
Aqui há duas decisões especialmente boas:
-c '#{pane_current_path}'faz novos panes herdarem o diretório atual.history-limitalto melhora muito a utilidade do copy mode.
O que fica especial no macOS
O uso em conjunto com macOS costuma ficar ótimo por um motivo simples: o macOS pode ser o cliente confortável, enquanto o tmux fica como servidor persistente — local ou remoto.
1. Cliente gráfico bom, servidor estável
iTerm2, Ghostty, Kitty e até o Terminal.app servem bem como interface. O tmux, por baixo, mantém o estado. Resultado: você pode fechar a janela, trocar de rede, dormir o MacBook e continuar do ponto em que parou.
2. Clipboard do macOS como extensão do copy mode
No macOS, o binário pbcopy é um presente. Você pode copiar texto do tmux para o clipboard do sistema com muito pouca fricção.
tmux capture-pane -pS -200 | pbcopy
Isso é ótimo para mandar trechos de log, saídas de comando ou blocos de configuração para outro app do sistema, como Notes, Obsidian, Slack ou navegador.
3. Reattach quando o clipboard ou as teclas ficam estranhas
Em algumas combinações antigas de macOS + Terminal.app, a integração de clipboard e ambiente de login não fica perfeita. Nesses casos, vale conhecer o pacote reattach-to-user-namespace, que historicamente ajudou bastante em integrações de clipboard e GUI a partir de shells tmux.
reattach-to-user-namespace. Teste antes. Hoje, em muitos setups com iTerm2 ou terminais recentes, set-clipboard on e pbcopy já resolvem quase tudo.
4. O melhor dos dois mundos: Mac local, tmux remoto
Um fluxo particularmente forte é: MacBook como console pessoal, tmux rodando no servidor Linux. Você usa o conforto do macOS, mas a persistência mora perto da carga real. Para infra, deploy e observabilidade, isso costuma ser melhor do que depender de abas soltas no terminal local.
Truques que parecem pequenos, mas rendem muito
tmux display-message -ppara inspecionar variáveis internas e montar scripts mais inteligentes.tmux list-panes -apara auditar tudo que está aberto no ambiente.tmux pipe-panepara gravar saída de um pane em arquivo ou enviar para outro comando.tmux respawn-panepara reiniciar rapidamente o comando principal de um pane morto.synchronize-panesquando você realmente quer digitar em vários panes ao mesmo tempo — com muito cuidado.
tmux pipe-pane -o 'cat >> /tmp/pane.log'
Antipadrões comuns
- Panes demais. Quatro já é muito em boa parte dos casos. Mais que isso vira micro-gerenciamento visual.
- Janelas sem nome. “bash”, “bash”, “bash” não é organização.
- Layouts estáticos para tudo. Cada tipo de trabalho pede um arranjo diferente.
- Usar tmux sem scriptar o básico. Se você recria o mesmo contexto manualmente todo dia, está perdendo tempo.
- Confiar no scroll do terminal gráfico. Isso costuma ser pior do que usar o copy mode direito.
Uma receita prática para começar no modo avançado
- Escolha 3 sessões fixas do seu trabalho real, por exemplo:
infra,projetos,estudos. - Padronize nomes de janela:
shell,logs,deploy,checks. - Ative
mode-keys vie aprenda copy mode de verdade. - Crie 1 script shell que monta uma sessão inteira para uma rotina recorrente.
- Se usa macOS, adicione um atalho mental: “copiou do tmux?
pbcopyresolve”.
Isso já é suficiente para sair do uso ornamental e entrar num uso estrutural de tmux.
Esta página é um estudo gerado em conversa com o Hermes e pode ser refinada à medida que novas rotinas, plugins ou padrões operacionais se mostrarem úteis no dia a dia.