1G
tmux 入門
知見

はじめに

端末 (ターミナル) の管理方法って人によって差がありますよね.

単一の作業しか行わない場合はあまり意識することはありませんが,

並行して行う作業が増えるたびに, 端末はどんどん増えていきます.

気づけば画面いっぱいに端末が溢れかえり,

どこで何の作業をしていたかわからないなんてことにも...

そこで, 本記事では端末管理に有用な tmux について紹介し,

自身が実践している端末管理方法について解説します.

なお, 以降の内容は OS がローカル, サーバーともに Ubuntu であることを想定しています.


tmux とは

tmux はターミナルマルチプレクサ ( Terminal Multiplexer ) の略であり,

1 つの端末上で複数の仮想端末を起動し, 同時並行で作業が行える端末多重化ソフトウェアです.

tmux には, 以下のような特徴があります.

  • 端末の分割を行い, 各仮想端末ごとに作業内容の切り分けができる
  • SSH セッションが保存されるため, セッションが途切れても後から作業を再開できる
  • vim ライクなキーバインドを設定できる

また, tmux では以下の 3 つのレイヤーで端末の多重化が行われます.

セッション > ウインドウ > ペイン

自己流端末管理法

1. 一つのタブに一つのサーバー, 一つのセッション

1 つの端末のタブは, 1 つのサーバに対応させます.

まずはじめに端末を開いたら, 接続するサーバの数だけ追加で端末をタブで開きます.

その後, サーバに接続するタブについては SSH 接続を行い,

全てのタブで 1 つずつ tmux セッションを作成します.

各タブ間の移動は, 以下のキーバインドで行います.

Alt + [タブ番号]

これは, tmux ではなく Ubuntu 側のキーバインドです.

また, サーバー接続には ssh ではなく kyrat というコマンドを使用しています.

これによって, ローカルの vim や tmux の設定ファイルをサーバーに持ち込むことができます.

1 年前に自分が書いた記事があるので, そちらも参考にしてください.

kyrat で接続したサーバで dein.vim を使いたいお話

2. 一つのウインドウは一つのプロジェクトに対応

サーバごとの tmux セッション内の各ウインドウは, 1 つのプロジェクト (実験) に対応させます.

研究を複数同時並行することは稀なので基本 1 つのウインドウで事足りるのですが,

ネット上のサンプルコードを試す時などは, 新しくウインドウを立てて作業領域を作っています.

~ ~ ~

(注意) prefix について

tmux ではまず prefix を入力してコマンド受け付け状態にしてからコマンドを入力します.

自分の場合は prefix を Ctrl + q に設定しています.

この設定にしている理由は, CapsLock の位置に Ctrl を設定しているため,

左の小指と薬指で簡単に押せるからです.

~ ~ ~

各ウインドウ間の移動は, 以下のキーバインドで行います.

prefix + [ウインドウ番号]

ただ, 自分の場合実際に上のキーバインドを使用することはあまり無く,

大抵は prefix + w でウインドウ一覧を表示し, 内容を見ながら移動先を選択しています.

3. 一つのウインドウ内のペインの例

1 つのウインドウは, 言うなれば IDE の一画面のようなものです.

実験内容にもよりますが, 自分は以下の 5 つのペインを常時開いています.

  • Pane-0 : エディタ領域 ( Vim でファイル編集する )
  • Pane-1 : ホストコマンド領域 ( ファイル開いた状態で Linux コマンド実行したい時に使う )
  • Pane-2 : プロセス監視領域 ( htop で リソースの使用状況や実行プロセスを常に表示する )
  • Pane-3 : メインコンテナコマンド領域 (機械学習の実験ファイルを実行する)
  • Pane-4 : サブコンテナコマンド領域 (通常時は prefix + t で時計を表示している)

なお, 特定のペインでの作業に集中したいときには,

prefix + z で全画面化の切り替えしてから作業しています.

各ペイン間の移動は, 以下のキーバインドで行います.

prefix + q + [ペイン番号] (Ctrl + q を 2 回 + [ペイン番号])

また, 現在の操作端末から上下左右に移動することも可能です.

自分の場合は, 設定ファイルを編集して vim ライクなキーバインドにしています.

  • prefix + j : 下のペインに移動
  • prefix + k : 上のペインに移動
  • prefix + h : 左のペインに移動
  • prefix + l : 右のペインに移動

おわりに

今回は, tmux による端末管理テクニックを紹介しました.

ちなみに, 本記事の内容は非 vimmer の方にはあまり意味がないと思っています.

PyCharm や VSCode などの高機能なエディタには ssh 端末を開く機能がありますからね.

ただ, 自分の作業に適した独自の IDE を作りたい人は, 参考にしてみてはいかがでしょうか?