- 技術 💻
tmuxの使い方|セッション・ペイン操作とSSH切断でも残る実物
結論
tmux は、1つの端末の中に複数の画面(セッション・ウィンドウ・ペイン)を持ち、端末を閉じても SSH が切れても中の処理を残しておけるツールです。覚えるキーは Ctrl+b のあとに1文字で、まずは c(新しいウィンドウ)・%・"(分割)・d(切り離す)と tmux attach(戻る)の5つで回ります。
この記事でわかること
- キーバインド早見表(セッション・ウィンドウ・ペイン・コピーモードの4表)と、起動→分割→切り離し→復帰の実際の画面(capture-pane の出力)
- SSH を強制的に切っても tmux の中の処理が60秒走り切り、切らなかった側は4秒で止まった実物
- コピペ用 .tmux.conf の全行と各行の意味(-f で読み込んで検証)、スクリプトからの操作、screen・nohup との違い、エラー原文つきのつまずき表
tmux は「サーバー」が裏で動き、その中にセッション、セッションの中にウィンドウ、ウィンドウの中にペインがあります。端末(クライアント)はサーバーにつないで画面を見ているだけなので、端末が消えても中身は残ります。
flowchart TD
C[端末 = クライアント<br>閉じても消えるのはここだけ] -->|attach / detach| S[tmux サーバー<br>裏で動き続ける]
S --> SE[セッション work]
SE --> W1[ウィンドウ 1: shell]
SE --> W2[ウィンドウ 2: logs]
W2 --> P1[ペイン 1]
W2 --> P2[ペイン 2]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| tmux とは | 1つの端末で複数の画面を持ち、切っても処理が残る端末多重化ツール | tmuxとは |
| tmux の使い方(最初の一歩) | tmux で起動、Ctrl+b d で切り離し、tmux attach で戻る |
最初の10分 |
| 画面を分割するキー | Ctrl+b %(左右)・Ctrl+b "(上下)、移動は Ctrl+b 矢印 |
ペインの操作 |
| tmux コマンド一覧(セッション) | tmux new -s 名前・tmux ls・tmux attach -t 名前・tmux kill-session -t 名前 |
セッションの操作 |
| SSH が切れても作業は残る? | 残ります。60秒のループが切断後も走り切った実物あり | SSH切断でも作業が残る実物 |
| スクロール・コピーの仕方 | Ctrl+b [ でコピーモード、q で抜ける、Ctrl+b ] で貼り付け |
コピーモード |
| .tmux.conf の書き方 | 雛形16行と、読み込み・エラーの出方 | .tmux.confの雛形 |
| screen・nohup とどう違う | 役割は近い。選び方は判断表で | screen・nohupとの違い |
| 「sessions should be nested with care」と出た | tmux の中で tmux を起動した。attach か switch-client を使う |
よくあるつまずき |
確認環境:Ubuntu 24.04.5 LTS の tmux 3.4(apt の 3.4-1ubuntu0.2)を、専用のサーバー名 tmux -L t20 と、作業場所に置いた設定ファイル -f /srv/s4/r17/t20/t20.tmux.conf で起動し、ホームの .tmux.conf は作っていません。画面の様子は、別のセッションから attach した端末を tmux capture-pane -p で取り出した文字列で、ステータス行まで含めて載せています(空行は除いています)。SSH の切断は、127.0.0.1:2222 に自分の設定で起動した OpenSSH 9.6p1 のサーバーに鍵でログインし、ssh クライアントを kill -9 で強制終了して起こしました。screen はこの環境に入れていないため、GNU screen の公式マニュアルで確かめた範囲だけを書いています。最新版の番号は GitHub のリリース一覧(3.7c、2026年8月17日)で、キーと設定の意味は tmux の公式マニュアルと公式 wiki(Getting Started)で確かめました。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「tmuxの使い方|セッション・ペイン操作とSSH切断でも残る実物」
tmuxとは(サーバー・セッション・ウィンドウ・ペイン)
この節では、tmux が何をするもので、4つの言葉がどう関係しているのかが分かります。
tmux は「端末多重化(terminal multiplexer)」のソフトです。 1つの端末の中にいくつもの画面を作り、切り替え、分割し、端末を閉じたあとも中の処理を動かし続けます。公式 wiki は、tmux サーバーが裏で動いてすべてのセッションとその中のプログラムを管理し、クライアント(端末)はソケットを通してサーバーにつなぐ、と説明しています。
| 言葉 | 意味 | 手元での例 |
|---|---|---|
| サーバー | 裏で動く本体。ソケットファイル1つにつき1つ | /tmp/tmux-0/t20(-L t20 で指定) |
| セッション | 作業のまとまり。attach / detach の単位 | work・dev・job |
| ウィンドウ | セッションの中のタブ。画面いっぱいに1つ | 1:shell・2:logs |
| ペイン | ウィンドウを分割した1区画。シェルが1つ動く | work:2.1(セッション:ウィンドウ.ペイン) |
| クライアント | サーバーにつないで画面を出している端末 | /dev/pts/1: work [80x24 tmux-256color] |
ソケットの場所は、公式マニュアルによると TMUX_TMPDIR(未設定なら /tmp)の下の tmux-UID ディレクトリで、既定のソケット名は default です。-L 名前 でソケット名を変えると、別のサーバーとして完全に分かれます。手元では -L t20 を付けて、ほかの tmux と混ざらないようにしました。
$ tmux -L t20 -f /srv/s4/r17/t20/t20.tmux.conf new-session -d -s work -n shell
$ ls -la /tmp/tmux-0/
srw-rw---- 1 root root 0 Oct 29 18:45 t20
$ tmux -L t20 ls
work: 1 windows (created Thu Oct 29 18:45:20 2026)
$ tmux -L t20 list-panes -t work
1: [80x24] [history 0/10000, 960 bytes] %0 (active)
1消えるのはクライアントだけ
端末を閉じる・SSH が切れる・Ctrl+b d を押す。どれもクライアントが離れるだけで、サーバーとセッションは残る。
2消すのは kill
exit で最後のペインを閉じるとウィンドウが消え、最後のウィンドウが消えるとセッションが消える。tmux kill-server は全部まとめて消す。
3指定の形は「セッション:ウィンドウ.ペイン」
work:2.1 はセッション work のウィンドウ 2 のペイン 1。番号の代わりに名前(work:logs)も使える。
tmuxのインストールと起動(Ubuntu・Mac・版の確かめ方)
この節では、tmux を入れて版を確かめ、最初に起動するところまでが分かります。
Ubuntu・Debian は apt install tmux、macOS は Homebrew の brew install tmux です。 入ったら tmux -V で版を確かめます。
$ sudo apt install tmux # Ubuntu / Debian
$ brew install tmux # macOS(Homebrew)
$ tmux -V
tmux 3.4
Ubuntu 24.04 に入るのは 3.4 で、公式のリリース一覧では 2026年10月29日時点の最新は 3.7c(2026年8月17日)です。公式 wiki は「最新のリリースだけをサポートし、おおむね半年ごとにリリースする」としています。この記事のキーと設定は 3.4 で確かめたもので、3.x なら同じように動きます。
起動の形は3つあります。
| コマンド | 動き |
|---|---|
tmux |
番号 0 のセッションを作って画面に出す |
tmux new -s work |
work という名前のセッションを作って画面に出す |
tmux new -A -s work |
work があれば attach、無ければ作る(公式マニュアル:-A は既存なら attach-session として振る舞う) |
tmux new -d -s work |
画面に出さずに作る(スクリプト向け) |
tmux -L 名前 …・tmux -S パス … |
別のソケット(別のサーバー)で動かす。-S を付けると -L は無視される(公式マニュアル) |
tmux -f ファイル … |
設定ファイルを指定して起動。サーバー起動時に1回だけ読まれる |
起動した中では、環境変数 TMUX にソケットの場所が入ります。中で tmux コマンドを打つと、この値を見て自分のサーバーにつながるので、-L を毎回付ける必要がありません。
$ echo $TMUX
/tmp/tmux-0/t20,2173,0
$ tmux display -p "#S:#I.#P #{socket_path}"
work:1.1 /tmp/tmux-0/t20
tmuxの基本的な使い方:最初の10分(起動→分割→切り離し→復帰)
この節では、初めて tmux を使う人が最初の10分でやる操作と、そのときの画面が分かります。
流れは「起動 → 分割 → Ctrl+b d で切り離す → tmux attach で戻る」です。 tmux へのキー操作はすべて「プレフィックス(既定は Ctrl+b)を押して離してから、次の1文字」です。
起動する
tmux new -s work。画面の下に緑のステータス行が出て、[work] 1:shell* のようにセッション名とウィンドウ名が並ぶ。
ウィンドウを増やす
Ctrl+b c。ステータス行に 2:bash* が増える。Ctrl+b , で名前を付ける。Ctrl+b 1・Ctrl+b 2 で行き来する。
画面を分割する
Ctrl+b % で左右、Ctrl+b " で上下。Ctrl+b 矢印 で移動、Ctrl+b z で1つを最大化(もう1度で戻る)。
切り離す
Ctrl+b d。元の端末に [detached (from session work)] と出る。中の処理は動き続ける。
戻る
tmux ls で一覧、tmux attach -t work で戻る(tmux a と略せる)。
手元で起動してウィンドウを足し、名前を logs に変えたときの画面です。最後の行がステータス行で、* が今見ているウィンドウ、- が直前のウィンドウです。
(Ctrl+b c のあと)
2つ目のウィンドウ
$
[work] 1:shell- 2:bash* 2026-10-29 18:46
(Ctrl+b , で logs と入力して Enter)
2つ目のウィンドウ
$
[work] 1:shell- 2:logs* 2026-10-29 18:46
Ctrl+b d で切り離すと、tmux の外の端末に次のように出ます。もう1度 attach すると、さっきの画面がそのまま戻りました。
$ tmux -L t20 attach -t work
[detached (from session work)]
$ tmux -L t20 ls
work: 2 windows (created Thu Oct 29 18:46:02 2026)
$ tmux -L t20 attach -t work # 2つのウィンドウと分割がそのまま戻る
tmuxのキーバインド早見表(セッション・ウィンドウ・ペイン・コピーモード)
この節では、tmux のキーと、それに対応するコマンドが4つの表で分かります。
キーは「Ctrl+b を押して離してから1文字」、同じことは Ctrl+b : の命令行や外からの tmux コマンド でもできます。 「キー」欄が「外から」の行は、シェルで打つコマンドです。全部のキーは Ctrl+b ?、全部のコマンドは tmux list-commands で見られます。
セッション
| キー(Ctrl+b のあと) | コマンド | 意味 |
|---|---|---|
| 外から | tmux new -s 名前 |
名前を付けてセッションを作る |
| 外から | tmux ls |
セッションの一覧 |
| 外から | tmux attach -t 名前(tmux a) |
つなぐ。-d で他のクライアントを切り離す |
| 外から | tmux new -A -s 名前 |
あれば attach、無ければ作る |
d |
detach-client |
切り離す(中の処理は動き続ける) |
s |
choose-tree -s |
一覧からセッションを選ぶ |
(・) |
switch-client -p・-n |
前・次のセッションへ |
$ |
rename-session 名前 |
セッション名を変える |
| 外から | tmux kill-session -t 名前 |
セッションを1つ消す |
| 外から | tmux kill-server |
サーバーごと全部消す |
ウィンドウ
| キー(Ctrl+b のあと) | コマンド | 意味 |
|---|---|---|
c |
new-window -n 名前 |
新しいウィンドウ |
n・p |
next-window・previous-window |
次・前のウィンドウへ |
0〜9 |
select-window -t :番号 |
番号のウィンドウへ |
l |
last-window |
直前に見ていたウィンドウへ |
w |
choose-tree -w |
一覧から選ぶ(縮小表示つき) |
, |
rename-window 名前 |
名前を変える |
. |
move-window -t 番号 |
番号を変える |
f |
find-window 文字列 |
名前や内容で探す |
| (命令行) | swap-window -t -1・+1 |
隣のウィンドウと入れ替える |
& |
kill-window |
閉じる(確認あり) |
ペイン
| キー(Ctrl+b のあと) | コマンド | 意味 |
|---|---|---|
% |
split-window -h |
左右に分割 |
" |
split-window -v |
上下に分割 |
| 矢印 | select-pane -U/-D/-L/-R |
その方向のペインへ |
o・; |
select-pane -t :.+・last-pane |
次のペイン・直前のペインへ |
q → 番号 |
display-panes |
番号を表示して選ぶ |
Ctrl+矢印・Alt+矢印 |
resize-pane -U/-D/-L/-R 数 |
サイズを1ずつ・5ずつ変える |
z |
resize-pane -Z |
最大化・戻す(ステータス行に Z) |
{・} |
swap-pane -U・-D |
上・下のペインと入れ替える |
Space |
next-layout |
レイアウトを順に切り替える |
Alt+1〜Alt+5 |
select-layout even-horizontal など |
決まったレイアウトにする |
! |
break-pane |
ペインを別ウィンドウに切り出す |
| (命令行) | join-pane -s 元 -t 先 |
別ウィンドウのペインをこのウィンドウに入れる |
| (命令行) | setw synchronize-panes on |
入力を全ペインに同時に送る |
x |
kill-pane |
閉じる(確認あり) |
コピーモードとその他
| キー(Ctrl+b のあと) | コマンド | 意味 |
|---|---|---|
[ |
copy-mode |
コピーモードに入る(スクロール・検索・選択) |
PageUp |
copy-mode -u |
1ページ上に遡った状態でコピーモードに入る |
] |
paste-buffer |
最新のバッファーを貼り付ける |
= |
choose-buffer |
バッファーの一覧から選んで貼り付ける |
| (命令行) | show-buffer・save-buffer ファイル |
最新のバッファーを表示・ファイルに保存 |
? |
list-keys -N |
キーの一覧(説明つき) |
: |
command-prompt |
命令行を開く |
Ctrl+b Ctrl+b |
send-prefix |
Ctrl+b そのものを中のプログラムに送る |
t |
clock-mode |
時計を表示(q で戻る) |
~ |
show-messages |
メッセージの履歴 |
| (命令行) | source-file ~/.tmux.conf |
設定ファイルを読み直す |
| (命令行) | show-options -g・-s・-gw |
今のオプションの値を見る(グローバル・サーバー・ウィンドウ) |
手元の 3.4 で Ctrl+b ? を押すと、この表と同じ内容が説明つきで出ます(抜粋)。
C-b C-b Send the prefix key
C-b C-o Rotate through the panes
C-b Space Select next layout
C-b ! Break pane to a new window
C-b " Split window vertically
C-b # List all paste buffers
C-b $ Rename current session
C-b % Split window horizontally
C-b & Kill current window
セッションの操作(new・ls・attach・kill-session)
この節では、セッションを作る・一覧する・つなぐ・消すコマンドと、その出力が分かります。
セッションは「作業のまとまり」で、プロジェクトごと・用途ごとに1つ作ると迷いません。 外から打つコマンドと、中で押すキーの両方があります。
| したいこと | 外から打つコマンド | 中で押すキー |
|---|---|---|
| 作る | tmux new -s 名前 |
Ctrl+b :new -s 名前 |
| 一覧 | tmux ls |
Ctrl+b s(一覧から選ぶ) |
| つなぐ | tmux attach -t 名前(tmux a -t 名前) |
Ctrl+b s → Enter、または Ctrl+b (・) |
| 切り離す | tmux detach-client -s 名前 |
Ctrl+b d |
| 名前を変える | tmux rename-session -t 旧 新 |
Ctrl+b $ |
| 消す | tmux kill-session -t 名前 |
最後のウィンドウで exit |
| 全部消す | tmux kill-server |
— |
tmux ls の出力です。(attached) が付いているセッションに、今どこかの端末がつながっています。
$ tmux -L t20 ls
dev: 2 windows (created Thu Oct 29 18:49:01 2026)
job: 1 windows (created Thu Oct 29 18:48:30 2026) (attached)
outer: 1 windows (created Thu Oct 29 18:46:02 2026)
work: 2 windows (created Thu Oct 29 18:46:02 2026)
$ tmux -L t20 list-clients
/dev/pts/1: work [80x24 tmux-256color] (attached,focused)
$ tmux -L t20 kill-session -t job
$ tmux -L t20 ls
dev: 2 windows (created Thu Oct 29 18:49:01 2026)
outer: 1 windows (created Thu Oct 29 18:46:02 2026)
work: 2 windows (created Thu Oct 29 18:46:02 2026)
Ctrl+b s を押すと、セッションとウィンドウの木が出て、矢印で選んで Enter で移れます。下にはそのウィンドウの縮小表示が出ます。
(0) + work: 2 windows (attached)
(1) + outer: 1 windows
(2) + job: 1 windows
(3) + dev: 2 windows
┌ work (sort: index) ─────────────────────────────────────────┐
│ tmux-256color │2つ目のウィンドウ │
│ 256 │$ │
同じ名前で作ろうとすると duplicate session: work になります。「あれば attach、無ければ作る」は tmux new -A -s work です。SSH で入るたびに同じセッションへ戻る用途に向いています。
ウィンドウの操作(作る・切り替える・名前・閉じる)
この節では、ウィンドウ(タブにあたるもの)の作り方・移り方・閉じ方のキーが分かります。
ウィンドウはブラウザーのタブと同じ感覚で、c で作り、n・p・数字で移り、& で閉じます。
| キー(Ctrl+b のあと) | 動き | 対応するコマンド |
|---|---|---|
c |
新しいウィンドウを作る | new-window |
n・p |
次・前のウィンドウへ | next-window・previous-window |
0〜9 |
番号のウィンドウへ | select-window -t 番号 |
l |
直前に見ていたウィンドウへ | last-window |
w |
一覧から選ぶ(縮小表示つき) | choose-tree -w |
, |
名前を変える | rename-window 名前 |
. |
番号を変える(移動) | move-window -t 番号 |
& |
閉じる(確認あり) | kill-window |
f |
文字列でウィンドウを探す | find-window |
Ctrl+b w の画面です。セッションをまたいで全部のウィンドウが見え、ペインの番号も縮小表示に出ます。
(0) - work: 2 windows (attached)
(1) ├─> 1: shell-
(2) └─> + 2: logs*
(3) - outer: 1 windows
(4) └─> 1: tmux*
┌ 2 (sort: index) ────────────────────────────────────────────┐
│ 2つ目のウィンドウ │right │bottom │
│ $ │$ │$ │
│ ┌───┐ │ ┌───┐ │ ┌───┐ │
│ │ 1 │ │ │ 2 │ │ │ 3 │ │
│ └───┘ │ └───┘ │ └───┘ │
ウィンドウの番号は既定では 0 から始まります。キーボードの並びに合わせて 1 から始めたいときは、設定ファイルに set -g base-index 1 を書きます(この記事の画面が 1 から始まっているのはこの設定です)。
ペインの操作(分割・移動・サイズ・最大化・レイアウト)
この節では、1つのウィンドウを分割して使うときのキーと、分割した画面の実物が分かります。
分割は %(左右)と "(上下)、移動は矢印、最大化は z です。 エディター・サーバーのログ・コマンドを1画面に並べる使い方が中心です。
| キー(Ctrl+b のあと) | 動き | 対応するコマンド |
|---|---|---|
% |
左右に分割 | split-window -h |
" |
上下に分割 | split-window -v |
矢印 |
その方向のペインへ | select-pane -L/-R/-U/-D |
o・; |
次のペイン・直前のペインへ | select-pane -t :.+・last-pane |
q |
ペイン番号を一瞬表示(続けて番号で移動) | display-panes |
z |
最大化・戻す(ステータス行に Z が付く) | resize-pane -Z |
Ctrl+矢印・Alt+矢印 |
サイズを1・5ずつ変える | resize-pane -L 10 など |
Space |
レイアウトを順に切り替える | select-layout tiled など |
x |
閉じる(確認あり) | kill-pane |
! |
ペインを別ウィンドウに切り出す | break-pane |
{・} |
ペインの位置を入れ替える | swap-pane -U/-D |
左右に分けてから右側を上下に分けた画面と、Ctrl+b q で番号と大きさが出た画面です。
(Ctrl+b % → 右で Ctrl+b " のあと、Ctrl+b q を押した瞬間)
2つ目のウィンドウ 40x23│right 39x11
$ │$
│
├───────────────────────────────────────
│bottom 39x11
│$
[work] 1:shell- 2:logs* 2026-10-29 18:46
(Ctrl+b z で bottom を最大化。ステータス行に Z)
bottom
$
[work] 1:shell- 2:logs*Z 2026-10-29 18:46
(Ctrl+b x。y で閉じる・n でやめる)
kill-pane 3? (y/n)
サイズはコマンドでも変えられます。list-panes で各ペインの大きさを見ると、左のペインを 10 列狭めた分だけ右が広がっています。
$ tmux -L t20 list-panes -t work:2 -F '#{pane_index}:#{pane_width}x#{pane_height}'
1:78x23 2:1x11 3:1x11
$ tmux -L t20 resize-pane -t work:2.1 -L 10
1:68x23 2:11x11 3:11x11
Ctrl+b Space を押すたびに、even-horizontal(横に均等)・even-vertical・main-horizontal・main-vertical・tiled の順でレイアウトが変わります。3つを横に均等に並べた画面です。
2つ目のウィンドウ │right │bottom
$ │$ │$
分割の向きの覚え方
split-window -h の h を「horizontal=上下に線」と読んで逆にする% が縦線で左右、" が横線2本で上下公式マニュアルの表現は -h が「horizontal split」で、画面が左右に分かれます
detach・attachとSSH切断でも作業が残る実物(nohupとの比較)
この節では、SSH が切れたときに tmux の中の処理がどうなるかを、実際に切断して確かめた結果で分かります。
SSH の接続が切れても、tmux の中で動いていた処理はそのまま走り切りました。 同じ処理を tmux 無しで動かすと、切断と同時に止まっています。
手元の 127.0.0.1:2222 に自分の設定で OpenSSH サーバーを起動し、鍵でログインして、1秒ごとに時刻をファイルに書くループを60回回しました。途中で ssh クライアントを kill -9 で強制終了し(サーバーから見ると接続が突然閉じた状態)、ファイルの行数を数えています。
tmux 無し:切断と同時に止まる
$ ssh -p 2222 root@127.0.0.1
root@vm:~# for i in $(seq 1 60); do date +%T >> /srv/s4/r17/t20/plain.log; sleep 1; done
Killed ← ここで ssh クライアントを強制終了
$ cat /srv/s4/r17/t20/plain.log
18:48:09
18:48:10
18:48:11
18:48:12
$ sleep 6; wc -l /srv/s4/r17/t20/plain.log
4 ← 増えない
SSH のセッションが閉じると、ログインシェルに SIGHUP(ハングアップ)が送られ、シェルから起動した処理も終わります。nohup はこの SIGHUP を無視させる道具で、後から画面に戻ることはできません。nohup の使い方は、関連記事「nohupコマンドの使い方|バックグラウンド実行・jobs・fg・bg」で扱っています。
tmux の中:切断後も走り切り、戻ると続きが見える
$ ssh -p 2222 root@127.0.0.1
root@vm:~# tmux -L t20 -f /srv/s4/r17/t20/t20.tmux.conf new -s job
root@vm:~# for i in $(seq 1 60); do date +%T | tee -a /srv/s4/r17/t20/job.log; sleep 1; done
18:48:31
18:48:32
18:48:33
18:48:34
[job] 1:bash* 2026-10-29 18:48
Killed ← ssh クライアントを強制終了
$ tmux -L t20 ls # サーバー側で見ると残っている
job: 1 windows (created Thu Oct 29 18:48:30 2026)
$ wc -l /srv/s4/r17/t20/job.log
9 ← 切断のあとも増え続けている
もう1度 ssh でログインして attach すると、切断中に出力された行も含めて画面が戻りました。
$ ssh -p 2222 root@127.0.0.1
root@vm:~# tmux -L t20 attach -t job
18:48:31
18:48:32
...
18:48:42
18:48:43
[job] 1:bash* 2026-10-29 18:48
最終的に job.log は 60 行(18:48:31〜18:49:30)で、1秒も欠けていません。ssh でサーバーに入って長い処理を動かすときは、最初に tmux new -A -s 名前 を打ってから始めると、回線が切れてもやり直しになりません。ssh の接続そのものの作り方は、関連記事「ssh コマンドの使い方まとめ|鍵・ポート指定・config・接続エラー対処」で扱っています。
- 切断後に attach したとき、画面のサイズが前の端末に引きずられて小さく見えることがあります。 前のクライアントがまだ「つながっている」と見なされているためで、
tmux attach -d -t 名前(ほかのクライアントを切り離してからつなぐ)で直ります。 - 再起動(サーバーマシンの電源断)には残りません。tmux のサーバーはプロセスなので、OS が落ちればセッションも消えます。復元が要るなら tmux-resurrect などのプラグインか、systemd のサービス化を考えます。
コピーモード(スクロール・検索・コピー・貼り付け)
この節では、tmux の中で過去の出力を見る・探す・コピーする操作が分かります。
tmux の中ではマウスホイールや端末のスクロールバーで過去の出力に戻れないため、Ctrl+b [ で「コピーモード」に入って見ます。 q で抜けます。
| したいこと | emacs 風(既定) | vi 風(mode-keys vi) |
|---|---|---|
| コピーモードに入る | Ctrl+b [(Ctrl+b PageUp でも) |
同じ |
| 移動 | 矢印・PageUp/Down・Ctrl+a/Ctrl+e |
h j k l・Ctrl+b/Ctrl+f・0/$・g/G |
| 検索 | Ctrl+s(下へ)・Ctrl+r(上へ) |
/(下へ)・?(上へ)・n/N |
| 選択を始める | Ctrl+Space |
Space(雛形では v も) |
| コピーして抜ける | Alt+w |
Enter(雛形では y も) |
| 抜ける | q・Esc |
q |
| 貼り付け | Ctrl+b ](paste-buffer)。バッファー一覧は Ctrl+b = |
|
公式 wiki によると、既定は emacs 風で、サーバー起動時に VISUAL か EDITOR に「vi」が含まれていれば vi 風になります。明示するには setw -g mode-keys vi です。手元では vi 風にして、3行上の行をまるごとコピーし、貼り付けました。右上の [0/0] は「履歴の何行目にいるか/履歴の行数」です。
(Ctrl+b [ の直後)
line 1: value=10 [0/0]
line 2: value=20
line 3: value=30
line 4: value=40
line 5: value=50
$
(k k k 0 v $ y と押す)
$ tmux -L t20 show-buffer
line 3: value=30
$ tmux -L t20 list-buffers
buffer1: 17 bytes: "line 3: value=30\n"
(Ctrl+b ] で貼り付け)
$ echo "貼り付け: "line 3: value=30
100行出したあとに Ctrl+b PageUp で遡り、/42 で探したときの右上の表示です。検索に当たると (1 results) と出ます。
58 18:47:08 [21/78]
24 (1 results) 18:47:08 [55/78]
tmux の中だけで足りるとき
コピーは tmux のバッファーに入る
Ctrl+b ] で別のペインにも貼れる
tmux save-buffer ファイル でファイルに出せる
OS のクリップボードに入れたいとき
Linux は xclip・wl-copy、macOS は pbcopy に渡す
bind -T copy-mode-vi y send -X copy-pipe-and-cancel "xclip -sel clip"
SSH 先なら、端末側の OSC 52 対応と set -g set-clipboard on で手元に届く
履歴の行数は history-limit で決まり、既定は 2000 行です(手元の設定無しのサーバーで show -g history-limit が 2000)。ログを長く遡るなら 10000 程度にします。
コピペ用 .tmux.conf(各行の意味つき・-fで検証)
この節では、設定ファイルに何を書くか、各行が何をするか、どう読み込むか、間違えたときに何が出るかが分かります。
設定ファイルは ~/.tmux.conf(または $XDG_CONFIG_HOME/tmux/tmux.conf)で、サーバーが起動するときに1回だけ読まれます。 公式マニュアルは、先に /etc/tmux.conf、次にユーザーの設定ファイルの順で読む、としています。次の内容をそのまま ~/.tmux.conf に置けば動きます(手元では、ホームには置かず作業場所のファイルを -f で読み込み、エラー無しで全行が反映されることを確かめました。tmux 3.4 で確認、3.2 以降で使える書き方です)。
# ~/.tmux.conf コピペ用(tmux 3.4 で動作確認。3.2 以降で使える書き方)
# ---- 1. prefix を C-b から C-a へ(既定のままでよければこの3行を消す)----
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# ---- 2. 設定の再読み込み(prefix r)----
bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"
# ---- 3. マウス(クリックでペイン選択、ドラッグで境界移動、ホイールでスクロール)----
set -g mouse on
# ---- 4. 色:256色 + true color ----
set -g default-terminal "tmux-256color"
set -as terminal-features ",xterm-256color:RGB"
# ---- 5. 履歴行数(既定 2000)とEscの遅延(既定 500ms)----
set -g history-limit 50000
set -sg escape-time 10
# ---- 6. 番号を1始まりにし、閉じたら詰める ----
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
# ---- 7. 分割と新規ウィンドウは今のディレクトリを引き継ぐ ----
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
# ---- 8. ペイン移動は h/j/k/l、サイズ変更は H/J/K/L(-r で連打できる)----
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# ---- 9. vi 風コピーモード(v で選択開始、y でコピー)----
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
# OSなどのクリップボードへも渡すときは、下のどれか1行を有効にして上の y 行を置き換える
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i" # Linux(X11)
# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy" # Linux(Wayland)
# 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 "clip.exe" # WSL
set -s set-clipboard on
# ---- 10. ステータス行 ----
set -g status-position top
set -g status-interval 5
set -g status-style "bg=colour236,fg=colour250"
set -g status-left " #S | "
set -g status-left-length 20
set -g status-right " #h | %Y-%m-%d %H:%M "
setw -g window-status-format " #I:#W "
setw -g window-status-current-format " #I:#W "
setw -g window-status-current-style "bg=colour33,fg=colour255,bold"
# ---- 11. その他 ----
set -g display-time 2000
set -g focus-events on
この記事の画面は、prefix を Ctrl+b のままにし、3・5・6・7・9・10 の行だけを抜き出した短い版で撮っています。1 の3行を入れると、以降のキーはすべて Ctrl+a のあとになります。
各行の意味
| 行 | 意味 | 既定値 | 補足 |
|---|---|---|---|
unbind C-b・set -g prefix C-a・bind C-a send-prefix |
プレフィックスを Ctrl+a にする | C-b | 2回押すと Ctrl+a そのものを中のプログラムに送る。シェルの「行頭へ」は Ctrl+a Ctrl+a になる |
bind r source-file … \; display-message … |
prefix r で設定を読み直し、メッセージを出す | なし | \; で複数のコマンドをつなぐ |
set -g mouse on |
クリックでペイン選択、境界のドラッグ、ホイールでスクロール | off | 端末側の文字選択は Shift を押しながらドラッグ |
set -g default-terminal "tmux-256color" |
ペインの中の $TERM |
screen か tmux-256color(版による) | 手元の 3.4 は既定で tmux-256color だった |
set -as terminal-features ",xterm-256color:RGB" |
外側の端末が true color に対応していると伝える | なし | -a は追記。3.2 より前は terminal-overrides の :Tc |
set -g history-limit 50000 |
遡れる行数 | 2000 | 設定後に作ったペインから効く |
set -sg escape-time 10 |
Esc 単独と Alt+キーを見分ける待ち時間(ms) | 500 | vim で Esc が遅いときの定番の直し方 |
base-index 1・pane-base-index 1・renumber-windows on |
番号を 1 から始め、閉じたら詰める | 0・0・off | .0 を決め打ちしたスクリプトは can't find pane になる |
bind | split-window -h -c …・bind - split-window -v -c …・bind c new-window -c … |
分割と新規ウィンドウを今のディレクトリで開く | %・"・c(そのまま使える) |
-c が無いとセッションを作った場所で開く |
bind h/j/k/l select-pane・bind -r H/J/K/L resize-pane 5 |
vim 風にペインを移動し、Shift で 5 ずつサイズを変える | 矢印・Ctrl+矢印 | -r は prefix 無しで連打できる。l は last-window を上書きする |
setw -g mode-keys vi・v・y の bind |
コピーモードを vi 風にし、v で選択、y でコピーして抜ける | emacs・Space・Enter | 既定の v は矩形選択の切り替え |
set -s set-clipboard on |
コピーした文字を端末のクリップボードにも渡す(OSC 52) | external | 端末が対応していなければ何も起きない |
status-position・status-left・status-right |
ステータス行を上に置き、左にセッション名、右にホスト名と時刻 | bottom・[#S]・ペインのタイトルと日時 |
#S・#h・#I・#W の書式と strftime |
window-status-current-style |
今のウィンドウのタブの色 | なし | 色番号か #RRGGBB |
display-time 2000・focus-events on |
メッセージの表示時間と、フォーカスの出入りを中のアプリに伝える | 750・off | vim の autoread などが反応できる |
読み込んだ値は show -g で確かめられます。設定無しで起動した別のサーバーと、短い版を読んだサーバーを比べた値です(全行版を -f で読んだサーバーでは prefix C-a・history-limit 50000・escape-time 10・display-time 2000・set-clipboard on になりました)。
| オプション | 既定(設定無し) | 雛形を読んだあと |
|---|---|---|
| history-limit | 2000 | 10000 |
| escape-time | 500 | 10 |
| mode-keys | emacs | vi |
| base-index | 0 | 1 |
| default-terminal | tmux-256color(Ubuntu の 3.4) | 同じ |
| status-right | "#{=21:pane_title}" %H:%M %d-%b-%y | %Y-%m-%d %H:%M |
| と - で分割した画面が、前の節のものです(-c "#{pane_current_path}" で、新しいペインが今のディレクトリーで開きます)。
書き換えたあとの反映と、間違えたときの表示
ファイルを直しても、動いているサーバーには反映されません。tmux source-file ~/.tmux.conf(中なら Ctrl+b :source ~/.tmux.conf、雛形なら Ctrl+b r)で読み直します。間違いがあると、行番号つきで出ます。
$ cat bad.conf
set -g mouse on
set -g nosuchoption 1
bind x foo-bar
$ tmux -L t20 source-file /srv/s4/r17/t20/bad.conf
invalid option: nosuchoption
unknown command: foo-bar
起動時の設定ファイルに間違いがあると、attach したときに次の画面が先に出ます(q で閉じると、間違いの行を除いた設定で動いています)。
/srv/s4/r17/t20/bad.conf:2: invalid option: nosuchoption [1/1]
/srv/s4/r17/t20/bad.conf:3: unknown command: foo-bar
[x] 0:bash* "vm" 18:49 29-Oct-26
- 1変えたら source-file か kill-server設定はサーバー起動時に1回だけ読まれる。新しいセッションを作っても読み直されない
- 2プレフィックスを変えるなら3行セット
set -g prefix C-a・unbind C-b・bind C-a send-prefix(公式 wiki の手順) - 3set -g と setw -g の違いを意識するmode-keys・pane-base-index はウィンドウのオプション。3.x では set -g でも通るが、意味で分けておくと読みやすい
- 4試すときは -L と -f で別のサーバーに
tmux -L test -f 試す.confなら、普段のサーバーに影響しない。終わったらtmux -L test kill-server
セッションの復元(tmux-resurrect)やクリップボード連携のプラグインは、TPM(Tmux Plugin Manager)で足せます。まずはこの設定だけで動かし、困ったことが出てから足す順が迷いません。
スクリプトからtmuxを操作する(send-keys・capture-pane・wait-for)
この節では、キーを押す代わりにコマンドで tmux を動かし、開発環境を1コマンドで立ち上げる方法が分かります。
tmux のキー操作はすべてコマンドに対応しているので、シェルスクリプトから同じことができます。 「エディター・サーバー・ログ」を並べたセッションを作るスクリプトを動かしました。
#!/bin/sh
S=dev
TMUX_CMD="tmux -L t20 -f /srv/s4/r17/t20/t20.tmux.conf"
if $TMUX_CMD has-session -t $S 2>/dev/null; then
echo "session $S already exists"; exec $TMUX_CMD attach -t $S
fi
$TMUX_CMD new-session -d -s $S -n editor -c /srv/s4/r17/t20 # 1枚目:editor
$TMUX_CMD send-keys -t $S:editor 'echo "ここでエディターを開く"' Enter
$TMUX_CMD new-window -t $S -n server -c /srv/s4/r17/t20 # 2枚目:server
$TMUX_CMD send-keys -t $S:server 'python3 -m http.server 8020 --bind 127.0.0.1' Enter
$TMUX_CMD split-window -t $S:server -v -c /srv/s4/r17/t20 # 下に確認用ペイン
$TMUX_CMD send-keys -t $S:server.2 'sleep 1; curl -s -o /dev/null -w "status=%{http_code}\n" http://127.0.0.1:8020/' Enter
$TMUX_CMD select-window -t $S:editor
exec $TMUX_CMD attach -t $S
実行したあとの各ペインを capture-pane -p で取り出した結果です。サーバーのペインには起動ログとアクセスログ、下のペインには status=200 が出ています。
$ tmux -L t20 list-windows -t dev
1: editor* (1 panes) [80x23] [layout ae63,80x23,0,0,6] @4 (active)
2: server- (2 panes) [80x23] [layout 11b1,80x23,0,0[80x11,0,0,7,80x11,0,12,8]] @5
$ tmux -L t20 list-panes -t dev:server -F '#{window_name}.#{pane_index} #{pane_current_command} #{pane_pid}'
server.1 python3 16669
server.2 bash 16679
$ tmux -L t20 capture-pane -t dev:server.1 -p
root@vm:/srv/s4/r17/t20# python3 -m http.server 8020 --bind 127.0.0.1
Serving HTTP on 127.0.0.1 port 8020 (http://127.0.0.1:8020/) ...
127.0.0.1 - - [29/Oct/2026 18:49:02] "GET / HTTP/1.1" 200 -
$ tmux -L t20 capture-pane -t dev:server.2 -p
status=200
スクリプトから使うコマンドの早見表です。
| コマンド | すること | 手元の結果 |
|---|---|---|
send-keys -t 対象 'コマンド' Enter |
キー入力を送る(Enter を忘れると実行されない) | 上のスクリプト |
capture-pane -t 対象 -p |
画面の文字列を標準出力に出す。-S - で履歴の先頭から |
この記事の画面すべて |
pipe-pane -o 'cat >> log' |
そのペインの出力をファイルに流し続ける(もう1度で止まる) | エスケープ列込みで記録された |
wait-for 名前/wait-for -S 名前 |
別のペインの処理が終わるまで待つ/合図を送る | 2秒の処理を 2.009 秒で待てた |
new-session -d 'コマンド' |
シェル無しでコマンドだけ動かす。終わるとペインが閉じる | remain-on-exit on で Pane is dead (status 3, …) が残った |
has-session -t 名前 |
あるかどうかを終了コードで返す | 上のスクリプトの if |
display -p '#{書式}' |
セッション名・ペイン ID などを文字列で取り出す | work:1.1 /tmp/tmux-0/t20 |
$ tmux -L t20 new-window -d -t work -n batch 'sleep 2; echo done > batch.txt; tmux wait-for -S batch-done'
$ time tmux -L t20 wait-for batch-done
real 0m2.009s
$ cat batch.txt
done
pipe-pane で記録したファイルには、色やカーソル移動のエスケープ列(^[[?2004l など)もそのまま入ります。人が読むログには script コマンドや、処理側で tee する方が向いています。シェルスクリプトの書き方そのものは、関連記事「シェルスクリプトの書き方|基本構文の早見表と安全なテンプレート」で扱っています。
screen・nohupとの違いと、どれを使うかの判断表
この節では、同じ目的で名前が挙がる GNU screen・nohup・systemd と tmux の違いと、選び方が分かります。
screen と tmux は役割が同じで、キーがほぼ1対1で対応します。 違いは、プレフィックス(screen は Ctrl+a、tmux は Ctrl+b)、分割の扱い、コマンドからの操作のしやすさです。screen はこの環境に入れていないため、GNU screen の公式マニュアルで確かめた範囲の表です。
| したいこと | tmux | GNU screen |
|---|---|---|
| プレフィックス | Ctrl+b |
Ctrl+a |
| 名前を付けて起動 | tmux new -s 名前 |
screen -S 名前 |
| 一覧 | tmux ls |
screen -ls |
| 切り離す | Ctrl+b d |
Ctrl+a d |
| 戻る | tmux attach -t 名前(他を切り離すなら -d) |
screen -r 名前(他を切り離すなら -d -r) |
| 新しいウィンドウ・次・前 | Ctrl+b c・n・p |
Ctrl+a c・n・p |
| 分割 | Ctrl+b %・"(ペインはウィンドウの一部) |
Ctrl+a S(上下)・Ctrl+a |(左右)。領域の移動は Ctrl+a Tab |
| 設定ファイル | ~/.tmux.conf |
~/.screenrc |
| ステータス行 | 既定で表示 | 設定で表示(hardstatus) |
すでに screen に慣れていて困っていないなら、移る理由はありません。新しく覚えるなら、分割がウィンドウの中に収まっていてスクリプトから扱いやすい tmux が、公式の情報も多く迷いにくいです。
- 1画面に戻って続きを操作したい → tmux(または screen)対話的な処理、途中で入力が要る処理、ログを目で追う処理
- 2投げっぱなしで結果はファイルでよい → nohup コマンド &(または setsid)1本のバッチ。出力は nohup.out かリダイレクト先
- 3再起動しても動いていてほしい → systemd のサービス常駐サーバー。tmux のセッションは OS の再起動で消える
- 4決まった時刻に動かす → cron / systemd timertmux は不要。ログはファイルへ
- 5複数の画面を並べて作業したい → tmuxエディター・サーバー・ログ・DB を1画面に。スクリプトで一発起動
動いている処理の確かめ方と止め方は、関連記事「Linuxプロセス確認と停止|ps・top・kill逆引きコマンド一覧」で扱っています。tmux の中で動いた処理は、tmux list-panes -F '#{pane_pid}' でシェルの PID が取れます。
よくあるつまずきとエラー原文(tmuxが動かない・表示が崩れる)
この節では、tmux で出る代表的なメッセージの原文と、その意味・直し方が分かります。
メッセージは短く、どれも原因がはっきりしています。 手元で出したものを原文のまま並べました。
| 原文 | 何が起きたか | 直し方 |
|---|---|---|
no server running on /tmp/tmux-0/default |
サーバーが無いのに tmux ls などをした |
tmux new -s 名前 で作る。再起動後は全部消えている |
no sessions |
サーバーが無い(またはセッションが無い)のに tmux attach をした |
同上。tmux new -A -s 名前 なら一発 |
can't find session: nosuch |
-t の名前が違う |
tmux ls で名前を確かめる。名前は前方一致でも通る |
duplicate session: work |
同じ名前で new -s をした |
attach -t work か new -A -s work |
sessions should be nested with care, unset $TMUX to force |
tmux の中で tmux・tmux new を打った |
中からは tmux new -d -s 名前 で作って switch-client -t 名前。SSH 先で別の tmux を使うなら入れ子になるのは正常 |
open terminal failed: not a terminal |
端末が無いところ(cron・CI・パイプの中)で attach や new をした |
new -d で作って send-keys で操作する |
error connecting to /tmp/tmux-0/t20 (No such file or directory) |
ソケットファイルが無い(-L の名前違い・/tmp の掃除) |
-L の名前を確かめる。サーバーが生きていてソケットだけ消えたなら、サーバーのプロセスに kill -USR1 で作り直せる(公式マニュアル) |
can't find window: 9 |
-t work:9 のウィンドウが無い |
list-windows で番号を確かめる |
unknown command: foo/invalid option: nosuchoption |
設定ファイルやコマンドの綴り違い | attach 時の画面に行番号が出る。tmux list-commands・show -g で正しい名前を見る |
日本語が 2________ のように化ける |
UTF-8 のロケールが無いままサーバーを起動した | LANG=C.UTF-8 などを設定してからサーバーを起動する。クライアント側は tmux -u で UTF-8 を強制できる(公式マニュアル) |
罫線が x・q に見える |
同じくロケールの問題で、罫線が ASCII の代替文字になった | 同上。手元ではロケール設定後に │・─ になった |
| vim で Esc の反応が遅い | escape-time の既定 500ms が効いている |
set -g escape-time 10 |
色が少ない・$TERM が screen |
default-terminal の設定 |
手元の 3.4 は既定で tmux-256color・tput colors が 256。前の版なら set -g default-terminal "tmux-256color" |
attach したら画面が小さく、周りが . で埋まる |
前のクライアントがまだつながっている | tmux attach -d -t 名前(他のクライアントを切り離す) |
入れ子にしたときの画面です。tmux の中で tmux new を打つと、何も作らずに1行出て戻ります。
$ tmux -L t20 new -s inner
sessions should be nested with care, unset $TMUX to force
$
SSH 先の tmux の中で、手元の tmux とキーが重なるときは、片方のプレフィックスを変える(手元を Ctrl+a にするなど)か、Ctrl+b Ctrl+b と2回押して内側に Ctrl+b を送ります(公式 wiki)。
よくある質問
Q. tmux とは何ですか? A. 1つの端末の中に複数の画面(セッション・ウィンドウ・ペイン)を作り、端末を閉じても SSH が切れても中の処理を残しておける端末多重化ツールです。手元では、SSH を強制的に切っても60秒のループが走り切りました。
Q. 最初に覚えるキーは何ですか?
A. Ctrl+b c(新しいウィンドウ)、Ctrl+b %・"(分割)、Ctrl+b 矢印(ペイン移動)、Ctrl+b d(切り離す)、外から tmux attach(戻る)の5つです。迷ったら Ctrl+b ? で全部のキーが見られます。
Q. SSH が切れたらどうなりますか?
A. クライアントだけが離れ、サーバー側のセッションと中の処理は残ります。もう1度ログインして tmux attach -t 名前 で戻ります。OS の再起動では残りません。
Q. nohup とどちらを使えばよいですか? A. 画面に戻って続きを操作したいなら tmux、投げっぱなしで出力はファイルでよいなら nohup です。tmux の中で動かした処理は、後から画面ごと見返せます。
Q. screen との違いは何ですか?
A. 役割は同じで、キーもほぼ1対1です(プレフィックスは screen が Ctrl+a、tmux が Ctrl+b)。tmux は分割がウィンドウの中に収まり、コマンドからの操作がしやすいです。慣れている方を使うので差し支えありません。
Q. マウスは使えますか?
A. 設定ファイルに set -g mouse on を書くと、クリックでペイン・ウィンドウを選び、境界をドラッグでサイズを変え、ホイールでスクロール(コピーモードに入る)できます(公式 wiki)。
Q. 過去の出力を見るには?
A. Ctrl+b [ でコピーモードに入り、PageUp や矢印で遡ります。q で抜けます。遡れる行数は history-limit(既定 2000 行)で決まります。
Q. 設定を変えたのに効きません。
A. 設定ファイルはサーバー起動時に1回だけ読まれます。tmux source-file ~/.tmux.conf で読み直すか、tmux kill-server してから起動し直します。綴りの間違いは attach 時に行番号つきで表示されます。
Q. プレフィックスを Ctrl+a に変えたいです。
A. set -g prefix C-a・unbind C-b・bind C-a send-prefix の3行を設定ファイルに書きます。シェルの Ctrl+a(行頭へ)が使えなくなるので、Ctrl+a Ctrl+a で送る形になります。
Q. ウィンドウとペインはどう使い分けますか? A. 同時に見たいものはペイン(同じウィンドウを分割)、切り替えて使うものはウィンドウです。例:エディターとテストの出力はペインで並べ、DB のクライアントは別ウィンドウに置く、という形です。
Q. 中でもう1つ tmux を起動したら警告が出ました。
A. sessions should be nested with care は入れ子の警告です。中からセッションを増やすなら tmux new -d -s 名前 で作って Ctrl+b s で移ります。SSH 先の tmux に手元の tmux から入るのは入れ子になりますが、正常な使い方です。
Q. 終わったセッションを全部消すには?
A. tmux kill-session -t 名前 で1つずつ、tmux kill-server で全部です。中で exit を打って最後のウィンドウを閉じても消えます。
まとめ
- tmux はサーバー・セッション・ウィンドウ・ペインの4層。端末を閉じても SSH が切れても、消えるのはクライアントだけで、セッションと中の処理は残る。手元では切断後も60秒のループが走り切り、tmux 無しでは4秒で止まった。
- 最初に覚えるのは
Ctrl+b c・%・"・矢印・dとtmux attach。全部のキーはCtrl+b ?、全部のコマンドはtmux list-commandsで見られる。 - 過去の出力は
Ctrl+b [のコピーモードで遡る・探す・コピーし、Ctrl+b ]で貼る。既定は emacs 風、mode-keys viで vi 風になる。 - 設定ファイルはサーバー起動時に1回だけ読まれる。変えたら
source-file。試すときは-L・-fで別のサーバーにすると普段の環境に影響しない。 - キー操作はすべてコマンドに対応し、
new-session -d・send-keys・capture-pane・wait-forで開発環境の立ち上げや自動化ができる。投げっぱなしなら nohup、再起動後も動かすなら systemd が向く。
次に読むとよい記事です。tmux の中で使うエディターの操作は関連記事「vimコマンド一覧|モード別早見表と置換・マクロの実行結果つき」で扱っています。
参考・出典
確認日はいずれも 2026年10月29日です。
- tmux 公式マニュアル(OpenBSD manual pages「tmux(1)」):https://man.openbsd.org/tmux
- tmux 公式 wiki「Getting Started」:https://github.com/tmux/tmux/wiki/Getting-Started
- tmux のリリース一覧(3.7c、2026年8月17日):https://github.com/tmux/tmux/releases
- tmux のマニュアルのソース「tmux.1」(設定ファイルの読み込み順・XDG のパス):https://raw.githubusercontent.com/tmux/tmux/master/tmux.1
- GNU screen 公式マニュアル「Screen User's Manual」:https://www.gnu.org/software/screen/manual/screen.html
- Ubuntu パッケージ「tmux 3.4-1ubuntu0.2」(手元で
dpkg -lで確認)
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「tmuxの使い方|セッション・ペイン操作とSSH切断でも残る実物」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。