Client Area
Connecting via SSHIntermediate

tmux The Ultimate Terminal Multiplexer (Complete, Skimmable Guide)

8 min readPublished 4 Mar 2026Updated 17 Apr 2026584 views

In this article

  • 1TL;DR Summary
  • 2What is tmux
  • 3Core Concepts (Most Important)
  • 4Installation
  • 5Daily Driver: Essential Key Bindings

TL;DR Summary

  • What it is: tmux lets you split your terminal into panes, manage multiple windows, and keep sessions running even if SSH drops.

  • Why it matters: Perfect for long-running jobs, remote admin, and organized workflows (logs, editors, shells) -- all in one screen.

  • Core ideas: Sessions contain Windows, which contain Panes. Default prefix is Ctrl+b.

  • Fast start: tmux new -s work, then split (Ctrl+b % or "), switch panes (Ctrl+b arrows), detach (Ctrl+b d), reattach (tmux a).

  • Power-ups: Enable mouse, persistent history, copy to system clipboard, and plugins with TPM.

  • Ops tip: Use tmux new -As main in SSH profile so you always drop into your main session automatically.


What is tmux

tmux is a terminal multiplexer that lets you:

  • Run multiple terminals inside one window

  • Split your screen into panes (vertical/horizontal)

  • Detach/reattach to long-running sessions

  • Share a terminal session with teammates

  • Persist your environment across SSH disconnects

Think of tmux as a window manager for your terminal.


Core Concepts (Most Important)

  • Session Top-level workspace (e.g., dev, logs, prod).

  • Window A tab inside a session (e.g., api, db).

  • Pane A split inside a window (e.g., editor left, logs right).

Default prefix: Ctrl+b (you press this before most tmux commands).


Installation

  • Debian/Ubuntu: sudo apt-get install tmux

  • RHEL/CentOS/Rocky/Alma: sudo dnf install tmux (or yum install tmux)

  • Arch: sudo pacman -S tmux

  • macOS (Homebrew): brew install tmux

  • Windows: Use WSL (install in Linux), or Git Bash/MSYS2 (limited), or Windows Terminal with WSL.

Check: tmux -V


Daily Driver: Essential Key Bindings

(All start with Ctrl+b unless noted)

Action Keys
Help (list keys)
Create new session tmux new -s NAME (shell cmd)
List sessions tmux ls (shell cmd)
Attach last session tmux a (shell cmd)
Detach d
New window c
Next/Prev window n / p
Rename window ,
Split pane vertical %
Split pane horizontal "
Switch pane Arrow keys
Resize pane Ctrl+b then Ctrl + arrows (or Alt + arrows)
Close pane exit (inside pane) or x (kill-pane)
Move pane to new window !
Zoom pane z (toggle)
Copy mode (scroll/search) [ (exit with q)

Super-habit: tmux new -As main -- reattach if exists, else create. Put this in ~/.bashrc/~/.zshrc for auto-persisted SSH.


  • Scrollback: Ctrl+b [ then use arrows/PageUp/PageDown.

  • Search: In copy mode, press / to search forward, backward; n/N to repeat.

  • Copy to tmux buffer (vim-like): In copy mode, space (start), move, enter (copy).

  • Paste: Ctrl+b ].

Copy to System Clipboard (optional)

  • Linux (X11): xclip or xsel

  • Wayland: wl-copy

  • macOS: pbcopy

  • WSL: clip.exe

Example mapping (puts selection into system clipboard automatically -- see config below):

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy" # macOS
# or: "xclip -selection clipboard -i" / "wl-copy" / "clip.exe"

Mouse, Status Bar & Quality of Life

Enable selection, clicking panes, and resizing with mouse:

set -g mouse on

Nice status bar (24h clock, host, session, battery if available):

set -g status-interval 5
set -g status-left "#[bold]#S"
set -g status-right "#(date '+%Y-%m-%d %H:%M') | #H"

Persistent scrollback (bigger history):

set -g history-limit 100000

Faster escape + better responsiveness:

set -sg escape-time 0
set -g focus-events on

A Clean, Modern ~/.tmux.conf (Drop-in)

Safe defaults for Linux/macOS/WSL -- copy/paste as-is, then restart tmux: tmux kill-server (ends all tmux) or apply with Ctrl+b : source-file ~/.tmux.conf

##### Prefix & Behavior
set -g prefix C-b
unbind C-b
set -g prefix C-b
bind C-b send-prefix

set -g history-limit 100000
set -sg escape-time 0
set -g mouse on
set -g focus-events on
set -g renumber-windows on

##### Windows & Panes
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
bind -r H resize-pane -L 5
bind -r J resize-pane -D 3
bind -r K resize-pane -U 3
bind -r L resize-pane -R 5
bind z resize-pane -Z

##### Statusline
set -g status-interval 5
set -g status-left-length 20
set -g status-right-length 80
set -g status-left "#[bold]#S "
set -g status-right "#(date '+%a %d %b %H:%M') | #H"

##### Copy-mode (vi-like)
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-and-cancel

# Uncomment ONE based on your system clipboard:
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy" # macOS
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -sel clip -i" # Linux X11
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy" # Wayland
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "clip.exe" # WSL

##### Quality-of-life
setw -g automatic-rename on
set -g allow-rename off
set -g base-index 1
setw -g pane-base-index 1

##### Quick session attach-or-create
# usage (shell): tmux new -As main

Prefer Ctrl+a Add:

unbind C-b
set -g prefix C-a
bind C-a send-prefix

Real-World Workflows (Hosting/DevOps)

1) Logs + Editor + Shell in one window

  • Ctrl+b " (horizontal split): top = editor (nvim), bottom = logs

  • In bottom, Ctrl+b % (vertical split): right pane = tail -f /var/log/nginx/access.log, left = sudo journalctl -fu php-fpm

  • Zoom any pane with z.

2) Docker/Compose Monitoring

  • Left pane: docker compose logs -f api

  • Right-top: htop or glances

  • Right-bottom: docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

3) Deploy & Watch

  • Pane 1: git pull && docker compose up -d --build api

  • Pane 2: docker compose logs -f api

  • Pane 3: curl -I https://yourapp/health (repeat)

  • Pane 4: tmux capture-pane -S -2000 -p > deploy.log (save scrollback)

4) SSH Resilience

Put this in your shell rc:

# Always land in a persistent session on SSH
[ -z "$TMUX" ] && tmux new -As main

Pairing & Session Sharing (Securely)

  1. SSH into the same server as two users.

  2. One user: tmux new -s pair

  3. Grant access (same UNIX group, or chmod tmux socket if needed).

  4. Second user: tmux a -t pair

Security tip: Restrict who can access the tmux socket (usually in /tmp/tmux-UID/); avoid sharing root's session; consider read-only with tmux attach -r for demos.


Plugins with TPM (tmux plugin manager)

Install TPM:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Add to ~/.tmux.conf:

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# Examples:
# set -g @plugin 'tmux-plugins/tmux-resurrect'
# set -g @plugin 'tmux-plugins/tmux-continuum'
run '~/.tmux/plugins/tpm/tpm'

Reload & install: Ctrl+b I (capital i)

Resurrection/Continuum: auto-save/restore sessions on reboot -- great for servers.


Troubleshooting & Gotchas

  • Mouse scroll doesn't work: Ensure set -g mouse on. In some terminals, hold Shift while scrolling or use copy-mode (Ctrl+b [).

  • Clipboard not syncing: Use the correct pbcopy/xclip/wl-copy/clip.exe pipe.

  • Weird key delays: Add set -sg escape-time 0.

  • SSH drops kill work: Always use tmux (and tmux new -As main).

  • Locale issues/box-drawing glitches: Set a UTF-8 locale in your shell (export LC_ALL=en_US.UTF-8 or equivalent) and use a font that supports line chars.


Useful Commands (Shell-Level)

tmux ls # list sessions
tmux new -s dev # create session 'dev'
tmux a -t dev # attach to 'dev'
tmux kill-session -t dev # kill a session
tmux switch -t dev # switch sessions while attached
tmux list-keys # show key bindings
tmux show -g # show global options
tmux capture-pane -S -10000 -p > out.txt # dump scrollback

Power Moves (Once You're Comfortable)

  • Choose-tree (visual switcher): Ctrl+b w

  • Move pane to its own window: Ctrl+b !

  • Join panes between windows: join-pane -s :1.2 -t :2

  • Sync panes (broadcast typing): Ctrl+b : then setw synchronize-panes on

  • Named windows on creation: new-window -n logs 'journalctl -fu nginx'


tmux vs. screen (Quick Take)

  • tmux: modern, plugins, richer statusline, better scripting & layouts.

  • screen: older, still available everywhere.

New setups should prefer tmux.


Backup/Restore Your Setup

  • Keep ~/.tmux.conf in Git.

  • If using TPM + Resurrect/Continuum, sessions persist across reboots.

  • Export key tmux options: tmux show -g > tmux.snapshot.conf


FAQ

Q: How do I change prefix to Ctrl+a (like screen)
A: See the Prefix snippet above -- unbind C-b, set prefix to C-a.

Q: How do I keep processes running after SSH disconnect
A: Start them inside tmux. Detach with Ctrl+b d. Reattach with tmux a.

Q: Can I scroll without mouse
A: Ctrl+b [ then PageUp/PageDown; exit with q.

Q: How do I copy text into my OS clipboard
A: Use copy-pipe-and-cancel with pbcopy/xclip/wl-copy/clip.exe as shown.

Q: Best way to always land in tmux on servers
A: Add [ -z "$TMUX" ] && tmux new -As main to your shell rc.


Quick Start Checklist

  • Install tmux and check tmux -V

  • Create ~/.tmux.conf from the template above

  • Enable mouse, large history, and vi-copy mode

  • Map clipboard for your OS (pbcopy/xclip/wl-copy/clip.exe)

  • Add tmux new -As main to your shell rc for resilience

  • (Optional) Install TPM + tmux-sensible + tmux-resurrect


Handy Callouts

Tip: Zoom any pane with Ctrl+b z -- great for quick focus.

Ops Safety: Always do risky commands in a separate pane or window; keep a monitoring pane (logs/metrics) visible.

Repeatable Layouts: Consider tmuxp or tmuxinator to define YAML layouts (projects spin up the same way every time).

CI/Build Machines: Use tmux for ephemeral runners or during long compiles to avoid losing state on SSH drop.

Was this article helpful?

Your feedback helps us improve our documentation

Still need help? Submit a support ticket

tmux The Ultimate Terminal Multiplexer (Complete, Skimmable Guide) - Knowledge Base