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+n」ないしは「PREFIX+^n」です。
「前のウィンドウ」に切り替えたいときは「PREFIX+p」ないしは「PREFIX+^p」です。
「指定したウィンドウ番号」に切り替えたいときは「PREFIX+0」~「PREFIX+9」です。
バックログを見る
「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+PREFIX と PREFIX の二度押しで直前のウィンドウに戻れる機能があります。 これを tmux で再現したい場合に設定します。
ウィンドウの縦分割