tmux - Terminal multiplexer

サーバーでなんらかしら処理を実行させている時に、接続してたセッションが切れてしまい、 それまで実行していた処理が台無しになった悲劇について、枚挙にいとまがありません。 nohup ~ & によるバックグラウンド実行ネタは典型かもしれませんが、 tmux(screen でもいいけど)で端末を仮想化してしまうのも手です。 繊細なオペレーションが必要な場合は tmux を使うくせを付けておきたいところ。

基本機能

起動方法

tmux new [コマンド...]
  または
tmux new-session [コマンド...]

新しい「セッション」を立ち上げます。 指定した「コマンド」が終了すると、そのまま tmux も終了してしまうため、 「コマンド」は指定せずに、デフォルトシェル(環境変数 SHELL 参照してる)で立ち上げて、 「コマンド」を実行しましょう。

終了方法

もちろんコマンドを終了すればいいので、シェルなら exit(logout)で終了します。 「他爆装置」的な機能もありますが、どちらかというとトラブルシュート時に使うものになります。

一時的な切断

もちろんターミナルが突然切断されても tmux で保護された仮想端末はそのまま処理し続けます。

人為的に(意図的)に切断したい場合は「PREFIX」「d」と入力して切断します。 PREFIX は tmux の場合 CTRL+b(コントロールキーを押しながら b を押す)となります(設定変更可)。 この場合「コントロールキーを押しながら b を押して、コントロールキーから手放して d を押す」操作となります。

なお GNU Screen の PREFIX は CTRL+a で、この手のツールの説明ではよく、「PREFIX+d」ないしは「CTRL+b d」ないしは、 「^b d」という表現で表されています。

勘のいい人なら「PREFIX+^d」(つまり CTRL+b CTRL+d)でも一時切断できるのに気がつくと思います。 コントロールキー押しっぱなしで操作したいよね。と。

セッションの一覧

tmux ls
  または
tmux list-sessions

複数の tmux セッションを立ち上げたときに、どの tmux に接続できるのか一覧で確認できます。

一時切断したセッションに接続する

tmux attach [-t <セッション番号>]
  または
tmux attach-session [-t <セッション番号>]

PREFIX+d で抜けた、あるいは、強制切断してしまったセッションに再接続したい時に指定します。

新しいウィンドウを作成する

セッション上に複数のウィンドウを開くことができます。 PREFIX+c ないしは PREFIX+^c です。

ウィンドウを切り替える

バックログを見る

PREFIX+[」でバックログ(過去の表示履歴)を見れる状態に移行します。 この状態を「コピーモード」と言います。

カーソルキーで上下に移動可能です。 デフォルトで emacs キーバインドでスクロールすることが可能なのですが、 普段 vi キーバインドで使用している(設定変更により)のと、 emacs キーバインドを忘れてしまったので、詳細は省略します。

このモードから脱出する場合は ESC キー(ないしは q」を押します。

独断と偏見の推奨設定

いかんせん、PREFIX のデフォルトが CTRL+b など、自分にとって使いづらいことこの上ないので、カスタムしました。 カスタム内容は ~/.tmux.conf に記載することで対応します(新しいセッションで反映)。

''PREFIX'' の変更

set-option -g prefix ^t
unbind ^b

tmux にせよ GNU Screen にせよ、微妙なキーをデフォルトにしているので、普段使わなさそうなキーを PREFIX に指定します。 自分は CTRL+t に決めました。

バックログの保持行数の変更

set-option -g history-limit 10000

ステータス行の表示可否

set-option -g status off

画面下の行にステータスを表示したくない時に off に指定します。表示したい時(デフォルト)は on です。

ウィンドウの開始番号を指定する

set-option -g base-index 0

PREFIX+0 から PREFIX+9 まで10個のウィンドウを指定することができますが、 キーボードを見ると、1~9、0という並びなので、1から始めると使いやすいかもしれません。 その場合は base-index に 1 を指定します。

いずれにしてもウィンドウの開始位置と自分の感覚が合う(お気に入り)ように、何度も調整が必要です。

ウィンドウタイトルの表示変更可否・書式指定

set-option -g set-titles on
set-option -g set-titles-string "#T #S:#I"

tmux は XTerm 由来のウィンドウタイトルバーの変更機能(エスケープシーケンス)に対応しています。 この機能のオンオフ(set-titiles)や表示フォーマットの指定(set-titles-string)が可能です。

書式

表示内容

#T

ユーザー指定タイトル

#S

セッション番号

#I

ウィンドウ番号

他にもたくさんあるけど、あまり使い出が無い…。

ユーザー指定タイトルは XTerm 由来のウィンドウタイトルバー変更エスケープシーケンスに対応したアプリが設定した内容となります。

コピーモードのキーバインド

set-window-option -g mode-keys vi

直前のウィンドウに戻る

bind-key C-t last-window

GNU Screen を知っている人なら、PREFIX+PREFIXPREFIX の二度押しで直前のウィンドウに戻れる機能があります。 これを tmux で再現したい場合に設定します。

ウィンドウの縦分割

ウィンドウの横分割