dshimizu/blog/alpha

とりとめのないITブログ

tmuxを使い始めたので基本的な機能の使い方とかを整理してみた

はじめに

tmuxを真剣に使い始めて1ヶ月程度ですが、tmuxについて基本的な機能の使い方をまとめてみようと思います。
類似の記事は既にたくさんありますが、とりあえず最低限覚えておくと良さそうな機能について整理してみます。

tmuxとは

tmuxは端末多重化ソフトウェアです。"てぃーまっくす"と読まれます。
Unix/Linux系OSを利用されている方であれば端末を利用した作業はほぼ必須かと思いますが、そのような場合にtmuxを利用できれば、1つのターミナルで操作しているシェルから実行したtmux上で複数の仮想端末を操作できるため、ターミナルを複数開くことなく複数のサーバへログインしたり、それぞれの仮想端末で別々のプログラムを実行できるようになるため、より効率的に作業が行えます。

具体的には以下のような形です。

tmuxがない場合
  • ssh接続するたびに端末が開かれる
    • 画面のカオス化
  • 回線が切れる
    • 実行中の処理が途切れてゲームオーバー
  • sshクライアント実行中の端末が停止
    • Windowsだとブルースクリーンになって実行中の処理が (ry
tmuxを使うことによるメリット
  • 1つの端末で複数の擬似端末を起動可能
    • 複数の端末を立ち上げずに、tmux上の擬似端末を切り替えてオペレーション可能
  • 起動した仮想端末を画面分割して使用可能
    • 他のファイルを参照したりログ出力を参照しながらオペレーション可能
  • 起動した仮想端末上でコピペが可能
    • マウスを使わず、tmux内でキーボードのみでのコピペが可能
  • 起動した仮想端末のデタッチ(切り離し)/アタッチ(接続)が可能
    • tmux実行端末とのネットワークが切れても問題なく、異なる環境から同じtmuxセッションへ接続可能

こんなに散らばっていた複数のターミナル画面ですが…

こんな風に1つのターミナル画面にまとめることができます。

tmux利用のイメージ図

利用イメージ図としては以下のような感じです。
ssh先の踏み台サーバ上でtmuxを起動して各サーバ群にssh接続します。私はウィンドウ毎に接続先サーバを分ける等して使ってます。tmuxセッションが残っていれば、自端末と踏み台サーバ間の通信は切れても問題ありません。

tmuxの構成要素

ここで、tmuxの構成要素について簡単に記載します。

設定ファイル

~/.tmux.conf に設定を記述します。新規セッション作成時に読み込まれます。
最初は存在しませんので、デフォルトの設定をカスタマイズするような場合に自分で作成する必要があります。
CentOS6であればtmuxインストール後に/usr/share/doc/tmux-1.6/examples/以下に設定ファイルのサンプルが設置されますので参考にすると良いかもしれません。

tmuxのプロセス構成

tmuxはサーバ/クライアント構成となります。

  • tmuxサーバ(セッション)
    • tmux起動時に生成される、tmuxセッションを管理しているプロセス
  • tmuxクライアント(pty/仮想端末)
    • tmuxセッションへ接続(アタッチ)しているプロセス(pty)
画面構成要素
  • セッション(Session)
    • tmuxに管理される仮想端末全体を指す
    • 各セッションは1つ以上のウィンドウを持つ
  • ウィンドウ(Window)
    • tmuxセッション内に開かれている1つの仮想端末の画面全体を指す
    • ウィンドウは1つ以上のペインを持つ
  • ペイン(Pane)
    • 分割されたウィンドウの単位を指す
    • ペインそれぞれが独立した擬似端末となる

実際の画面を元に示すと、青い枠がペイン、緑の枠がウィンドウ、青と緑を合わせてセッションを指します。

tmuxを使ってみる

文章での説明だとよくわからない部分も多いかもしれませんので、実際にtmuxを使ってみます。

tmuxのインストール

tmuxをインストールしてみます。
最新バージョン1.8のソースコードをダウンロードしてインストールすることもできますが、各OSのパッケージ管理ツールを利用してインストールするのが簡単です。

RHELLinuxであればEPELリポジトリにパッケージが存在しますのでyumでパッケージをインストールできます。


# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/tmux-1.6-3.el6.x86_64.rpm

OS Xであればhomebrewからインストールできます。


# brew install tmux

以下ではMac OS X 10.7のiTermからCentOS 6.5のサーバへログインし、CentOS 6.5で起動したtmux 1.6で動作確認した内容を記載します。

tmuxの基本操作

起動中(アタッチしている)のtmuxを操作するには、多くの場合tmuxの制御を行うことを示すためのプレフィックスキーCtrl-b(デフォルト設定値)を入力し、それに続いて実行したい操作に対応するコマンドキーを入力する形でtmuxの内部コマンドを実行することになります。
どのキーがどの操作に対応しているかは Ctrl-b + ? を入力することで表示できます。

tmuxの起動

tmuxを起動してセッションを開始します。起動には以下のコマンドを実行します。


% tmux

または、


% tmux new-session

これでtmuxセッションが作成され、セッションにアタッチした状態になります。以下のような画面になります。

セッションの確認

ここで、起動しているtmuxのセッションについて確認してみます。前述の通り、tmuxにはtmux全体を管理しているセッションと、セッションに接続しているクライアントの2種類があります。

現在起動中のセッションを確認するにはtmux list-sessions または tmux lsを実行します。左側の数字がセッション番号になります。以下の例ではセッション番号が0となっていることが分かります。


% tmux list-sessions
0: 1 windows (created Tue Feb 11 21:43:00 2014) [193x36] (attached)

現在起動中のセッションに接続されているクライアントを確認するにはtmux list-client または tmux lsc を実行します。


% tmux list-client
/dev/pts/1: 0 [37x193 xterm] (utf8)
セッションのデタッチ

セッションをデタッチするにはCtrl-b + d または Ctrl-b + : detach-clientを実行します。なお、回線が切断された時には自動でデタッチされます。
仮想端末が終了し、以下の出力とともに元の端末に戻ります。


[detached]
%

デタッチによって、tmuxセッションで実行中の処理を継続させたままクライアントを終了できます。再度そのセッションへアタッチすることで作業の続きを行うことができます。

セッションのアタッチ

アタッチするにはtmuxを起動するには tmux attach を実行します。attachの文字を全て入力せずとも tmux a 等でもいけます。
複数のtmuxセッションを起動している場合は、-t [target-session] オプションで接続したいセッションを指定することができます。セッション番号は前述の tmux list-sessions で参照することができます。
なお,ひとつのセッションに複数のクライアントをアタッチすることも可能です。-d を指定すると、そのセッションにアタッチしている他のクライアントはデタッチされます。


% tmux attach -t 0
セッションの削除

tmux kill-session で現在起動中のセッションを削除できます。-t [target-session] オプションを指定することで削除したいセッションを指定することができますが、指定しない場合は直近でアタッチしていたセッションが削除されます。


% tmux kill-session

全てのセッションを削除するには tmux kill-server を実行します。


% tmux kill-server
ウィンドウの操作
新規ウィンドウ作成

セッションにアタッチした状態でCtrl-b + c または :new-window を入力することで新規ウィンドウを作成できます。

画面下に0:zsh- に続いて 1:zsh*と表示されますが、これがそれぞれウィンドウとなります。現在選択されているウィンドウには * と表示されており、それ以外のウィンドウには - と表示されます。ウィンドウ名は Ctrl-b + :rename-window [window name] で指定できます。

ウィンドウの切り替え

Ctrl-b + [ウィンドウ番号]でウィンドウを切り替えることができます。
また、Ctrl-b + n で上の番号のウィンドウへ、Ctrl-b + p で下の番号のウィンドウへ切り替えることができます。 上記の画面上でCtrl-b + 0と入力すると、ウィンドウ番号0の画面が表示されます。

ウィンドウ一覧の表示

Ctrl-b + w で現在作成されているウィンドウの一覧が表示されます。
でウィンドウを選択して Enter キーで対象ウィンドウを表示させることもできます。

ウィンドウの削除

Ctrl-b + & と入力することで作成したウィンドウを削除できます。Confirm 'kill-window'? (y/n) というメッセージが出力されますので、y と入力するとウィンドウが削除されます。

ペインの操作
水平分割

Ctrl-b + " でウィンドウを水平に分割できます。これで以下のような画面構成になり、2つのペインが作成されます。

垂直分割

Ctrl-b + $ でウィンドウを垂直に分割できます。(※2014/10/21コメント指摘事項修正) Ctrl-b + % でウィンドウを垂直に分割できます。これで以下のような画面構成になり、3つ目のペインが作成されます。

ペイン間の移動

ペイン間の移動は Ctrl-b + o で行います。
また、Ctrl-b + q または Ctrl-b + :display-panes で以下のようにペインのインジケータ(番号)を表示させることができ、Ctrl-b + q + インジケータ番号 で指定したペインへ移動することもできます。
インジケータが表示される時間はデフォルトだと少々短いですが、Ctrl-b + :display-panes-time [time] で変更できます。単位はミリ秒なので、表示時間を1秒にしたい場合は1000と指定します。

以下ではインジケータ番号2のペインが選択されている状態ですが、Ctrl-b + q でインジケータ番号が表示されている間に 0 を入力します。


インジケータ番号0のペインが選択されます。

ペイン分割解除

Ctrl-b + x でペイン分割を解除できます。

インジケータ番号0のペインが選択されている状態でCtrl-b + x を入力すると、画面下のステータスバーに kill-pane 0? (y/n) と表示されます。

画面下のステータスバーの kill-pane 0? (y/n) に対して y を入力するとインジケータ番号0のペインが削除され、以下のような画面になります。



他にも様々な機能がありますが、とりあえず上記あたりは最低限覚えておくべき項目かと思います。

おわりに

tmuxの使い方について基本的な部分をまとめてみました。
最初は使いづらい部分も多いかと思いますが、慣れると多少効率的に作業ができるようになると思います。
記載した機能以外にもコピー&ペーストやペインのリサイズなどの多くの機能があります。また、設定ファイルを利用してカスタマイズすることもできますので、賢者の設定ファイルを参考にいろいろ触ってみると良いかと思います。