Guides
Fundamentos ▾
Versionamento ▾
Deploy ▾

Terminal Multiplexers

tmux (principal) + GNU Screen (emergencial). Sessões persistem após desconexão SSH.

Por que usar multiplexer?

Sem multiplexer
❌ Fechar terminal → processos morrem
❌ Queda de conexão → trabalho perdido
❌ Um programa por vez visível
❌ Deploy longas travadas no terminal
Com tmux/Screen
✅ Sessões persistem no servidor
✅ Reconectar exatamente onde parou
✅ Múltiplos panes numa janela
✅ Processos rodam sem monitorar

tmux — Instalar

sudo apt install tmux -y
tmux -V

Hierarquia

Server (processo background)
└── Session "frontend" (contexto de trabalho)
├── Window 1: editor (aba)
│ ├── Pane A: nvim .
│ └── Pane B: terminal
└── Window 2: servidor
└── Pane A: npm run dev

Server é o daemon. Sessions são contextos (projetos). Windows são abas. Panes são divisões dentro de uma janela.

~/.tmux.conf

# prefix: Ctrl+a (em vez de Ctrl+b padrão)
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# mouse — scroll e clique nos panes
set -g mouse on

# splits intuitivos (mesmo diretório)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# navegação entre panes estilo Vim
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# recarregar config
bind r source-file ~/.tmux.conf \; display "Reloaded!"

# histórico
set -g history-limit 10000
set -g base-index 1
setw -g pane-base-index 1

# status bar com 2 fusos: BR + DE
set -g status-right "#[fg=cyan]BR: #(TZ='America/Sao_Paulo' date '+%%H:%%M') #[fg=yellow]DE: #(TZ='Europe/Berlin' date '+%%H:%%M') #[fg=white]%d/%m/%Y"
set -g status-right-length 60
%% escapa o % dentro de #(...) — necessário quando o comando shell contém formatação de data dentro do tmux.
tmux source-file ~/.tmux.conf   # recarregar sem reiniciar

Comandos de Sessão

ComandoAção
tmuxNova sessão sem nome
tmux new -s nomeNova sessão com nome
tmux lsListar sessões ativas
tmux attach -t nomeEntrar em sessão existente
tmux kill-session -t nomeEncerrar sessão
tmux kill-serverEncerrar todas as sessões
tmux rename-session -t atual novoRenomear sessão

Atalhos — Sessão (Prefix = Ctrl+a)

Prefix $
Renomear sessão atual
Prefix s
Listar e trocar de sessão
Prefix d
Detach — sessão continua rodando

Atalhos — Windows (abas)

Prefix c
Nova janela
Prefix ,
Renomear janela atual
Prefix n
Próxima janela
Prefix p
Janela anterior
Prefix 1–9
Ir para janela N
Prefix &
Fechar janela (confirmar)

Atalhos — Panes (divisões)

Prefix |
Dividir vertical (config acima)
Prefix -
Dividir horizontal
Prefix h/j/k/l
Navegar panes (Vim-style, config)
Prefix x
Fechar pane atual
Prefix z
Zoom no pane (toggle fullscreen)
Prefix { / }
Trocar pane de posição
Prefix q
Mostrar números dos panes
Prefix Espaço
Ciclar entre layouts padrão

Layouts padrão

TeclasLayout
Prefix M-1even-horizontal — panes lado a lado iguais
Prefix M-2even-vertical — panes em cima/baixo iguais
Prefix M-3main-horizontal — um grande embaixo
Prefix M-4main-vertical — um grande à esquerda
Prefix M-5tiled — grade igual

Copy Mode (scroll + copiar)

# Ativar Vim keys no copy mode (~/.tmux.conf)
setw -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection
TeclaAção
Prefix [Entrar em copy mode
Ctrl+u / Ctrl+dSubir / descer meia página
/Buscar texto
vIniciar seleção (com vi keys)
yCopiar seleção
q / EscSair do copy mode

Status Bar

Visualização da barra com dois fusos horários:

[frontend]
1: editor 2: server* 3: git
BR: 14:30 DE: 19:30 27/06/2026
# ~/.tmux.conf
set -g status-left "[#S] "
set -g status-right "#[fg=cyan]BR: #(TZ='America/Sao_Paulo' date '+%%H:%%M') #[fg=yellow]DE: #(TZ='Europe/Berlin' date '+%%H:%%M') #[fg=white]%d/%m/%Y"
set -g status-right-length 60
set -g status-bg colour235
set -g status-fg white
setw -g window-status-current-style fg=yellow,bold

GNU Screen

Alternativa clássica. Pré-instalada em muitos servidores. Útil quando tmux não está disponível.

sudo apt install screen -y
screen --version
ComandoAção
screenNova sessão
screen -S nomeNova sessão com nome
screen -lsListar sessões
screen -r nomeReconectar
screen -Dr nomeForçar reconexão (liberar de outro cliente)
screen -X -S nome quitEncerrar sessão por fora

~/.screenrc

# rolagem com PageUp/Down
termcapinfo xterm* ti@:te@

# buffer de scroll
defscrollback 10000

# barra de status
hardstatus alwayslastline "%{= kB}%-Lw%{= kY}%50>%n%f* %t%{= kB}%+Lw%<"

Atalhos Screen (Prefix = Ctrl+a)

Ctrl+a d
Detach
Ctrl+a c
Nova janela
Ctrl+a "
Listar janelas
Ctrl+a n/p
Próxima / anterior
Ctrl+a A
Renomear janela
Ctrl+a k
Fechar janela
Ctrl+a S
Dividir horizontal
Ctrl+a |
Dividir vertical (≥ 4.1)
Ctrl+a Tab
Trocar entre regiões
Ctrl+a [
Entrar em copy mode

tmux vs Screen

tmux recomendado
Desenvolvimento ativo, rico em recursos
Desenvolvimento ativo
Mouse habilitável
Copy mode com Vim keys
Config rica (tmux.conf)
Multi-pane avançado
Status bar personalizada
Precisa instalar
screen emergencial
Pré-instalado, manutenção minimal
Manutenção minimal
Sem mouse
Copy mode limitado
Config limitada
Split básico
Status bar básica
Pré-instalado em muitos servidores

Regra: use tmux para trabalho diário. Screen apenas quando tmux não estiver disponível no servidor.