tmux 入門:ターミナルマルチプレクサで作業環境を快適にする

よるほろぐ編集部

· 約 15 分

tmux はターミナルマルチプレクサ(terminal multiplexer)です。一言でいえば「端末を分割・多重化するツール」で、次のような使い方ができます。

  • SSH 切断後もセッションが残る — ネットワーク障害や接続タイムアウトが発生しても、tmux のセッションはサーバー側で生き続けます。再接続してアタッチすれば、切断前の状態がそのまま戻ってきます。
  • 1 つの端末を複数ペインに分割 — 1 つのターミナルウィンドウを上下・左右に分割して、複数のコマンドを並べて実行できます。
  • 作業状態を保存して後で再開 — セッションを名前付きで管理できるので、「今日の作業」を保存して翌日そのまま続けられます。

screen との違い

tmux と似たツールに screen(GNU Screen)があります。どちらも「セッション管理+端末分割」を提供しますが、tmux のほうが後発で設計が洗練されています。

項目tmuxscreen
設定ファイル~/.tmux.conf(構文が明快)~/.screenrc
ペイン分割縦横どちらでも柔軟に対応サポートあり
コピーバッファ複数保持1 つ
アクティブ開発継続中更新が少ない
スクリプタビリティ高い(フォーマット変数など)限定的

今から始めるなら tmux を選ぶほうが情報量も多く、プラグインエコシステムも充実しているためおすすめです。

インストール

主要な環境でのインストールコマンドは以下のとおりです。

# Ubuntu / Debian 系
sudo apt install tmux

# Fedora / RHEL 系
sudo dnf install tmux

# macOS (Homebrew)
brew install tmux

# FreeBSD
pkg install tmux

インストール後、バージョンを確認します。

tmux -V
# tmux 3.x のように表示されれば OK

基本概念: セッション・ウィンドウ・ペイン

tmux には セッション(Session)ウィンドウ(Window)ペイン(Pane) という 3 層の概念があります。

graph TD
  S["セッション: work"] --> W1["ウィンドウ 0: bash"]
  S --> W2["ウィンドウ 1: vim"]
  W1 --> P1["ペイン 0(左)"]
  W1 --> P2["ペイン 1(右)"]
  W2 --> P3["ペイン 0"]
  • セッション: tmux サーバー上の作業単位。デタッチしてもサーバー側に残り続けます。名前で管理できます。
  • ウィンドウ: セッション内のタブのようなもの。画面全体を占有します。
  • ペイン: ウィンドウを分割した個々の端末領域。それぞれ独立した擬似端末(pty)です。

この階層を把握しておくと、後の操作の意味が直感的に分かるようになります。

プレフィックスキー

tmux のキーバインドはすべて プレフィックスキー(デフォルトは Ctrl-b)を先に押してから別のキーを入力する形式です。

プレフィックスキーの操作順序

Ctrl-b押して離してから、次のキーを押します。同時押しではありません。たとえばウィンドウを新規作成する Ctrl-b c は「Ctrl を押しながら b を押し、両方を離してから c を押す」という操作になります。

プレフィックスキーを押した後に : を入力すると、tmux のコマンドプロンプトが開きます。コマンドを直接入力して実行でき、Tab 補完も効きます。また Ctrl-b ? で現在有効なキーバインドの一覧を確認できます。

ペイン操作

ペインの分割

キー操作動作
Ctrl-b "現在のペインを上下に分割
Ctrl-b %現在のペインを左右に分割

コマンドで指定するときは以下のとおりです。

# 上下に分割(-v はデフォルトなので省略可)
tmux split-window -v

# 左右に分割
tmux split-window -h

ペイン間の移動・操作

キー操作動作
Ctrl-b ↑/↓/←/→矢印方向のペインへ移動
Ctrl-b o次のペインへ移動(ローテーション)
Ctrl-b ;直前のアクティブペインへ戻る
Ctrl-b qペイン番号を一時表示(番号キーでそのまま移動)
Ctrl-b z現在のペインを全画面にズーム(もう一度で解除)
Ctrl-b x現在のペインを閉じる(確認あり)

ペインのリサイズ

キー操作動作
Ctrl-b Ctrl-↑/↓/←/→1 セル単位でリサイズ
Ctrl-b Alt-↑/↓/←/→5 セル単位でリサイズ

ウィンドウ操作

キー操作動作
Ctrl-b c新しいウィンドウを作成
Ctrl-b n次のウィンドウへ切り替え
Ctrl-b p前のウィンドウへ切り替え
Ctrl-b 0〜9番号でウィンドウを直接選択
Ctrl-b l直前のウィンドウへ戻る
Ctrl-b ,現在のウィンドウをリネーム
Ctrl-b &現在のウィンドウを閉じる(確認あり)
Ctrl-b wウィンドウ一覧をインタラクティブ表示

セッション操作

セッションの作成

# 名前付きセッションを作成して接続
tmux new-session -s work

# 短縮形
tmux new -s work

# バックグラウンドで作成(接続しない)
tmux new-session -d -s monitoring

デタッチ・アタッチ

実行中のセッションから抜けるには Ctrl-b d(デタッチ)を押します。セッションはサーバー側に残り続けます。

# セッション一覧を確認
tmux list-sessions
# 短縮形
tmux ls

# 特定のセッションにアタッチ
tmux attach-session -t work
# 短縮形
tmux attach -t work

# セッションが 1 つだけなら引数不要
tmux attach
SSH 切断後の復帰

SSH 接続が切れても、サーバー側の tmux セッションは生き続けています。再接続後に tmux attach するだけで、切断前の作業状態にそのまま戻れます。これが tmux を日常的に使う最大の動機の一つです。

セッション間の切り替え・削除

キー操作動作
Ctrl-b sセッション一覧をインタラクティブ表示・切り替え
Ctrl-b $現在のセッションをリネーム
Ctrl-b (前のセッションへ切り替え
Ctrl-b )次のセッションへ切り替え
# 特定のセッションを終了
tmux kill-session -t work

# tmux サーバーごと終了(全セッション削除)
tmux kill-server

コピーモード

コピーモードはペイン内のスクロールバック履歴を閲覧したり、テキストをコピーしたりするためのモードです。Ctrl-b [ で入ると、画面の右上に現在位置と履歴の行数が表示されます。

tmux のコピーモードには emacs スタイル(デフォルト)と vi スタイルの 2 種類のキーバインドがあります。mode-keys オプションで切り替えられます。

emacs モード(デフォルト)

キー操作動作
↑/↓ または C-p/C-nスクロール
Page Up/Downページ単位でスクロール
C-Space選択開始
M-w選択をコピーしてモード終了
Escapeコピーモードを終了

vi モード(set -g mode-keys vi 設定時)

キー操作動作
j/k上下スクロール
C-d/C-u半ページスクロール
Space選択開始
Enter選択をコピーしてモード終了
qコピーモードを終了

コピーした内容は Ctrl-b ] でペーストできます。

.tmux.conf によるカスタマイズ

tmux は起動時に ~/.tmux.conf(または $XDG_CONFIG_HOME/tmux/tmux.conf)を読み込みます。以下はすぐ使える実用的な設定をまとめたサンプルです。

# ──────────────────────────────────────────
# プレフィックスキーを Ctrl-a に変更
# (GNU screen からの移行や、Ctrl-b が遠い場合に便利)
# ──────────────────────────────────────────
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# ──────────────────────────────────────────
# マウス操作を有効化
# スクロール、ペイン選択、リサイズがマウスで行えるようになる
# ──────────────────────────────────────────
set -g mouse on

# ──────────────────────────────────────────
# vi スタイルのコピーモード
# ──────────────────────────────────────────
set -g mode-keys vi

# ──────────────────────────────────────────
# ペイン分割キーを直感的なキーに変更
# | で左右分割、- で上下分割
# -c オプションで現在のディレクトリを引き継ぐ
# ──────────────────────────────────────────
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 新規ウィンドウも現在のディレクトリで開く
bind c new-window -c "#{pane_current_path}"

# ──────────────────────────────────────────
# ステータスバー
# ──────────────────────────────────────────
set -g status-right "%Y-%m-%d %H:%M"     # 右端に日時を表示

# ──────────────────────────────────────────
# 設定ファイルのリロード
# Prefix + R で ~/.tmux.conf を再読み込み
# ──────────────────────────────────────────
bind R source-file ~/.tmux.conf \; display-message "Reloaded ~/.tmux.conf"

# ──────────────────────────────────────────
# ウィンドウ番号を 1 から始める(0 はキーボードで遠い)
# ──────────────────────────────────────────
set -g base-index 1
setw -g pane-base-index 1

設定を変更した後は、tmux の中でプレフィックス + : を押してコマンドプロンプトを開き、source-file コマンドで再読み込みできます。

# tmux コマンドプロンプト(Ctrl-b :)から実行
source-file ~/.tmux.conf

# またはシェルから実行
tmux source-file ~/.tmux.conf
設定の反映タイミング

.tmux.conf の変更は、すでに起動中のセッションには自動では反映されません。source-file コマンドで明示的に再読み込みするか、tmux サーバーを再起動する必要があります。プレフィックスキーを変更したときは特に注意が必要です。

キーバインド早見表

ペイン

キー操作動作
Ctrl-b "上下に分割
Ctrl-b %左右に分割
Ctrl-b ↑/↓/←/→ペイン間を移動
Ctrl-b o次のペインへ
Ctrl-b ;直前のペインへ
Ctrl-b qペイン番号を表示
Ctrl-b zズームトグル(全画面表示の切り替え)
Ctrl-b xペインを閉じる
Ctrl-b Ctrl-↑↓←→1 セル単位でリサイズ
Ctrl-b Alt-↑↓←→5 セル単位でリサイズ

ウィンドウ

キー操作動作
Ctrl-b c新規ウィンドウ作成
Ctrl-b n次のウィンドウ
Ctrl-b p前のウィンドウ
Ctrl-b l直前のウィンドウへ戻る
Ctrl-b 0〜9番号でウィンドウ選択
Ctrl-b ,ウィンドウをリネーム
Ctrl-b &ウィンドウを閉じる
Ctrl-b wウィンドウ一覧

セッション

キー操作動作
Ctrl-b dデタッチ(セッションは維持)
Ctrl-b sセッション一覧・切り替え
Ctrl-b $セッションをリネーム
Ctrl-b (前のセッション
Ctrl-b )次のセッション

コピーモード・その他

キー操作動作
Ctrl-b [コピーモードへ
Ctrl-b ]ペースト
Ctrl-b ?キーバインド一覧を表示
Ctrl-b :tmux コマンドプロンプト

出典

共有: X でシェア はてブ

編集・検証

よるほろぐ編集部

Linux・コンテナ・CLI・開発環境の実践ガイドを編集・検証します。

編集方針を読む