
Terminal Multiplexer tmux: Quản lý phiên làm việc đa nhiệm chuyên nghiệp
Nhà phát triển, sysadmin, và nhà khoa học dữ liệu đều gặp tình huống cần chạy nhiều terminal session cùng lúc — hoặc duy trì một công việc dài hạn khi SSH bị ngắt kết nối. tmux (terminal multiplexer) giải quyết chính xác vấn đề này bằng cách cho phép bạn chạy nhiều pane, window, và session trong một terminal đơn.
Khác với công cụ GNU Screen, tmux có kiến trúc client-server hiện đại, cấu hình dễ dàng qua file ~/.tmux.conf, và rất popular trong cộng đồng DevOps và 개발자. Bài viết này giúp bạn nắm vững tmux từ cơ bản đến nâng cao.

Cài đặt tmux trên các hệ điều hành phổ biến
tmux có sẵn trong hầu hết package manager:
- Ubuntu/Debian:
sudo apt install tmux - Fedora:
sudo dnf install tmux - Arch Linux:
sudo pacman -S tmux - macOS (Homebrew):
brew install tmux - Windows (WSL2): Cài đặt như Linux distribution ở trên
Kiểm tra phiên bản: tmux -V (phải >= 3.0 để hỗ trợ đầy đủ tính năng hiện đại).
Khái niệm cơ bản: Session, Window, Pane
tmux phân cấp ba cấp độ:
- Session: Toàn bộ môi trường làm việc. Bạn có thể có nhiều session độc lập (ví dụ: dev-session, prod-session).
- Window: Tương đương một tab trong terminal emulator. Mỗi session có thể chứa nhiều window.
- Pane: Chia window thành nhiều khu vực hiển thị terminal — mỗi pane chạy một shell độc lập.
Mặc định, mỗi session bắt đầu với một window và một pane.

Lệnh điều khiển prefix trong tmux
tmux sử dụng prefix key (mặc định là Ctrl+b) để phân biệt lệnh tmux và lệnh shell. Các phím thường dùng:
| Prefix + Phím | Chức năng |
|---|---|
| Ctrl+b c | Tạo window mới |
| Ctrl+b " | Chia pane ngang (horizontal split) |
| Ctrl+b % | Chia pane dọc (vertical split) |
| Ctrl+b ←↑→↓ | Chuyển focus giữa các pane |
| Ctrl+b } / { | Di chuyển pane hiện tại sang phải/trái |
| Ctrl+b x | Đóng pane hiện tại (yêu cầu xác nhận) |
| Ctrl+b d | Detach session (để session chạy nền) |
| Ctrl+b s | Liệt kê và chuyển đổi giữa các session |
| Ctrl+b w | Liệt kê và chuyển đổi giữa các window trong session |
| Ctrl+b [, / ] | Vào/thoát copy mode (chọn và sao chép text) |
Cấu hình nâng cao qua ~/.tmux.conf
Tinh chỉnh tmux bằng cách chỉnh sửa file cấu hình ~/.tmux.conf. Dưới đây là một số thiết lập phổ biến:
# Đổi prefix từ Ctrl+b sang Ctrl+a (giống screen, dễ gõ hơn)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Bật mouse support (chọn pane, resize pane bằng chuột)
set -g mouse on
# Tăng history limit (mặc định 2000 lines)
set -g history-limit 10000
# Chuyển đổi window nhanh hơn
bind -n M-h previous-window # Alt + h
bind -n M-l next-window # Alt + l
# Pane border màu sắc
set -g pane-border-style fg=brightblack
set -g pane-active-border-style fg=brightblue
# Status bar tùy chỉnh
set -g status-left '#[fg=green]#S #[fg=yellow]#I #[fg=cyan]#P'
set -g status-right '#[fg=green]%Y-%m-%d #[fg=yellow]%H:%M:%S'
# Tự động đặt tên window dựa trên command chạy
set -g automatic-rename on
set -g automatic-rename-format '#{b:pane_current_command}'
Sau khi chỉnh sửa, tải lại cấu hình mà không cần restart tmux:
Ctrl+b :source-file ~/.tmux.conf
Scripting và automation với tmux
tmux cho phép tự động tạo môi trường làm việc phức tạp qua shell script. Dưới đây là ví dụ tạo một session development với 3 pane:
#!/bin/bash
SESSION="dev"
# Tạo session mới nếu chưa tồn tại
tmux new-session -d -s $SESSION
# Window 1: Editor (nvim/vscode)
tmux rename-window -t $SESSION:0 'editor'
tmux send-keys -t $SESSION:0 'nvim' C-m
# Window 2: Split thành 2 pane (server + logs)
tmux new-window -t $SESSION:1 -name 'server'
tmux split-window -h -t $SESSION:1
tmux send-keys -t $SESSION:1.0 'npm run dev' C-m
tmux send-keys -t $SESSION:1.1 'tail -f logs/dev.log' C-m
# Window 3: Database console
tmux new-window -t $SESSION:2 -name 'db'
tmux send-keys -t $SESSION:2 'psql postgres://localhost/myapp' C-m
# Chuyển về window 1 và attach session
tmux select-window -t $SESSION:0
tmux attach-session -t $SESSION
Lưu script này làm ~/bin/tmux-dev.sh, chmod +x, và bạn có thể khởi động môi trường dev đầy đủ chỉ bằng một lệnh.
Tích hợp với các công cụ khác
tmux làm việc tốt với:
- Neovim/VS Code Remote: Sử dụng tmux để chạy terminal bên trong editor qua plugin.
- Director: Quản lý nhiều tmux session qua YAML config (tương tự docker-compose).
- tmuxinator: Ruby gem cho việc tạo session phức tạp qua DSL declarative.
- iTerm2 + tmux: Trên macOS, iTerm2 cung cấp integration sâu — hiển thị tmux window/pane trong sidebar.
- WezTerm: Terminal emulator hiện đại hỗ trợ native tmux-like features.
Best practices cho sysadmin và SRE
Trong môi trường production, tmux giúp:
- Giữ session chạy khi SSH ngapt kết nối (đừng lại chạy
nohuphoặcscreen). - Chia sẻ terminal với đồng nghiệp qua
tmux attach -t session-name(pair debugging). - Giám sát log real-time bằng pane dédié (
tail -f /var/log/app.log). - Chạy command đồng thời trên nhiều server qua broadcast pane (
:setw synchronize-panes on).
Tránh để tmux session chạy mãi mãi trong production — hãy tự động dọn dẹp qua cron job hoặc systemd timer.
Tương lai của tmux và lựa chọn thay thế
Dù có nhiều terminal emulator hiện đại tích hợp split pane (WezTerm, Alacritty, Ghostty), tmux vẫn giữ vị thế vì:
- Hoạt động trong mọi terminal — kể cả SSH session đơn giản nhất.
- Client-server architecture cho phép detach/reattach không phụ thuộc terminal emulator.
- Cộng đồng lớn, plugin phong phú (tmux-plugin-manager/tpm).
Một số lựa chọn thay thế mới:
- zellij: Từ Rust, focus vào UI hiện đại và layout declarative.
- wezterm: Có thể dùng làm terminal emulator đa pane, nhưng không detach/reattach như tmux.
- neovim + :terminal: Nhúng terminal trong editor — phù hợp cho dev, không cho sysadmin.
Tuy nhiên, cho đến nay tmux vẫn là công cụ terminal multiplexer ổn định, nhẹ, và phổ biến nhất trên Linux/Unix.
Nguồn tham khảo: tmux Wiki, tmux Cheat Sheet, Tmux Plugin Manager, Samoshkin’s tmux config
