Asial Blog

Recruit! Asialで一緒に働きませんか?

screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips

カテゴリ :
バックエンド(インフラ)
タグ :
Tech
社長BLOG
※ コメントをいただきましたので、一部本文を修正させて頂きました。
1.サーバー・クライアントモデルというのはネットワーク接続なイメージになってしまいますので、取り外しました
2.mouse-utf8に関してコメントを頂いたので補足しました
3.タイトルを「screenの時代は終わり。tmuxでリモートコンソールを便利に使うTips」から「screenだけの時代は終わり。tmuxでリモートコンソールを便利に使うTips」に変更しました(変な誤解を受けられた方がいらっしゃったため)

お久しぶりの田中です。最近、ずっと大型案件に携わっていた関係で、あまりブログ等でのアウトプットができていませんでした。これからはドンドン書いていきますので、どうぞよろしくお願いします。本日はGNU screenと同様の機能を持つtmuxを紹介します。

GNU screenやtmuxは、1つのターミナル画面上に複数のコンソールウィンドウを表示するためのソフトです。デファクトスタンダードであるGNU screenと比べて、tmuxは比較的最近、注目を浴びています。私も1年ほどtmuxを常用し、便利に使わせていただいています。ここでは、tmuxを便利に使うために僕が行なっている設定を紹介します。



○ tmuxの特徴

screenとは異なり、tmuxはクライアント・サーバーモデルとなります。tmuxサーバーが常時起動し、tmuxクライアントのattachを待ちます。そのため、複数のPCで同じ画面を表示することができます。

・また、tmuxでは1つの画面(window)を複数のコンソールに分割する(複数pane)ことができます。その分、tmuxでは、client、window、paneという概念があり、screenよりは複雑になっています。

・コマンドラインも充実しています。ウィンドウ分割やバッファ操作などの命令は、キーバインドだけでなく、tmuxコマンドを用いても指示を出せます。これを使って各サーバーの自作管理ツールを作っていますが、その話はまたどこかで言及したいと思います。

○ tmuxを起動する

Debianの場合、

  1. apt-get install tmux

でサクっとインストールできます。tmuxコマンドをタイプすると、コンソールが表示されると思います。

○ よく使うtmuxコマンド

私は下記のコマンドをよく使います:

  1. tmux attach - すでに開いたセッションにアタッチする
  2. tmux list-windows (C-b w) - ウィンドウの一覧を取得する
  3. tmux new-window (C-b n) - 新しいウィンドウを作る
  4. tmux detach-client (C-b d) - クライアントをデタッチする
  5. tmux list-keys (C-b ?) - キーバインドの一覧を表示する
  6. tmux next-window (C-b n) - 次のウィンドウを表示する
  7. tmux previous-window (C-b p) - 前のウィンドウを表示する
  8. tmux kill-window (C-b k) - ウィンドウを強制的に閉じる

tmux attach以外は、すべてキーバインドにアサインされています。デフォルトはCtrl-bですが、.tmux.confを編集することで変更可能です。

○ tmux.confでカスタマイズ

ホームディレクトリの.tmux.confを作成して編集することで、キーバインドの変更や、オプションの設定を行えます。ここでは、私が設定している設定について説明します。

1.バックスクロール行数を増やす

  1. set-option -g history-limit 10000

この例では、tmuxのヒストリサイズを1万行に設定しています(デフォルトは2000行)。tmuxではウィンドウごとにバッファを管理しており、さかのぼって検索するだけでなく、コピー&ペーストを行うことも可能です。

2.ステータスラインの見た目変更

  1. set-option -g status-utf8 on
  2. set-option -g status-interval 5
  3. set-option -g status-bg black
  4. set-option -g status-bg white
  5. set-window-option -g window-status-current-bg blue
  6. set-window-option -g window-status-current-fg white

この辺の設定はお好みで。マニュアルを見ながらカスタマイズすると良いでしょう。

3.マウス操作に対応する

  1. set-option -g mouse-select-pane on
  2. set-option -g mouse-select-window on
  3. set-option -g mouse-resize-pane on
  4. set-option -g mode-mouse on
  5. # PuTTYを使う場合は、下記の設定はoffを推奨(コメントを参照してください)
  6. set-option -g mouse-utf8 on

上記設定により、私が普段使っているPuTTYにて、マウスが使えるようになります。マウスの範囲選択でバッファへのコピー&ペーストを行ったり、ステータスラインでマウスクリックによるウィンドウ選択などが可能になります。PuTTYの場合、デフォルトのマウス動作(Windows標準クリップボード)を使いたい場合は、Shiftキーを押しながら操作します。

4.キー割り当てのカスタマイズ

  1. bind -n C-Space next-window
  2. bind -n M-Space previous-window

私はフルスクリーン作業を中心にするため、頻繁にウィンドウ切り替えを行います。そのため、Ctrl-スペース、およびAlt-スペースをウィンドウ操作に割り当てています。

5.画面に表示されている内容を自分宛にメールで送る

  1. bind S run "tmux capture-pane -S -10000; tmux show-buffer | /usr/sbin/sendmail masahiro@example.com"

よく、今見えている画面を残しておきたい(ログがわりに取得しておきたい)ことがあります。そういう時には、上記設定が便利です。Ctrl-Sをタイプすると、バッファの1万行分の画面表示が、自分のメールアドレスに送信されます。

上の例のように、tmuxではバインドキーに対してシェルスクリプトを実行できます。使い方次第では、他にも応用例が考えられるでしょう。

○ tmuxの注意点

ウィンドウを多数開いている場合、スクロールバッファを増やしすぎると、tmuxサーバープロセスのメモリ使用量が非常に大きくなり、固まってしまうことがあります。tmuxの安定性に対して疑問に思うことはありませんが、あまりスクロールバッファを大きくすることは控えたほうが賢明です。

コメント

  • いわもと こういち

    細かい点ですが、PuTTYを使っているのならばmouse-utf8はoffの方が安全です。

    xtermのマウスプロトコルは224桁目以降が扱えません。そこでxterm(やrxvt-unicode)ではこの制限を越える為のプロトコルの拡張をいくつか提案しています。
    mouse-utf8はそれらの拡張形式の内のUTF-8という方式を使うようにする設定ですが、PuTTYはこの拡張形式(というか拡張形式全般)に対応していません。
    UTF-8拡張形式は95桁目までは従来の方式と互換性があるのですが96桁目以降は扱いが異なります。
    実際にはtmuxが頑張って159桁目までは対処しているのですが、160桁目以降は正しく認識出来ません。
    # 位置がずれ、さらにゴミが入力されたようになる

    端末横幅を160桁以上で使う事はあまりないとは思いますが(自分はよく有るのですが)、223桁目まで扱えていたのを159桁まで縮めるような設定は行わない方がいいと思います。

  • 田中

    >いわもとさん
    ありがとうございます。確かにフォントサイズを超小さくして試してみたところ、位置がずれてしまいました。PuTTYではmouse-utf8の使用は控えたほうが良いわけですね。勉強になりました。

  • knok

    screenも-xオプションで複数のPCから同じセッションを共有できますよ。
    screen内部コマンドの発行もscreen -Xでコマンドから実行できます。
    まあtmuxの方が高性能だとは思いますけどね。

  • 通りすがり

    screen の時代は終わりと書いてあるが、
    比較が何も書いてないし、しかも screen で出来ることばかりのように思えます。
    正直釣りタイトルにしか見えません。
    信頼が下がりました。

  • 田中

    >knokさん、通りすがりさん
    ありがとうございます。screenとの優劣を伝えるつもりではなく、単にtmuxを紹介したかっただけなのですが、誤解されてしまいますね。釣りに見えないよう、タイトルを変更しました。

  • 参考になりました。

    tmux new-window (C-b n) - 新しいウィンドウを作る

    C-b c ?

    私もtmux 使ってみます。

  • yflab

    先日はアシアルPHPスクールでお世話になりました。
    最近、御社ブログでtmux関連のブログ記事が増えてますね。
    勉強させていただきます。

  • 黒川

    new-windowはC-b cではないでしょうか。
    記事参考になりました。ありがとうございます。
    tmux使ってみます。

コメントフォーム



captcha_key

アシアルの会社情報

アシアル株式会社はPHP、HTML5、JavaScriptに特化したWebエンジニアリング企業です。ユーザーエクスペリエンス設計から大規模システム構築まで、アシアルメンバーが各々の専門性を通じてインターネットの進化に貢献します。

会社情報詳細

最近の記事