tmux(ティーマックス)とは、仮想端末ソフトです。 要するに1つのターミナル端末で複数の画面を独立で操作できるようになるソフトです。 tmuxを使う前は、「何が便利なの?よく分からん」「別に今のままでも操作できるし」「設定やキーバインドを覚えるのが面倒そう」という意見もあるかと思います(これは全部自分ですw)。
しかし、実際に使ってみるとこれがとても便利な代物でした。 使ってみて感じたtmuxのメリットを列挙してみました。
tmuxのメリット
画面を分割したり、タブによる画面切り替えができる
1つのターミナル端末(teratermなど)で複数の画面を見ることができます。 例えば、あるファイルを編集しているが、別ファイルの中身を確認したいなど、一つ一つターミナル端末を起動してサーバーにSSH接続しなくても、tmuxで画面分割するだけで済むので楽チンです。 また、タブによる画面切り替えもできるので、ターミナルが使いやすい環境(Macなど)で、コマンドベース(CLI)でファイル操作などをしている人は重宝するかと思います。 自分の場合は、VirtualBox(Linux, 共有フォルダ) + tmux でWindowsPCでもLinuxコマンドで操作することができるようにしています(別途記事をアップする予定です)。
下の図は、tmuxを使った操作例です。
[caption id="attachment_520" align="alignnone" width="360"] tmuxを使うことで画面分割やタブの切り替えが簡単に行えます[/caption]
SSH接続が切れても操作を再開できる
(SSH接続先のサーバーにtmuxがインストールされている限定の話です) 通常であれば、SSH接続している最中に操作しているPCのネットワークが落ちると作業中の内容は消えてしまいますが、 tmuxを使っている場合、再度SSH接続した後に「アタッチ」というのを行うと、ネットワークが落ちる前の操作を引き続き行うことができます。 ネットワークが落ちやすい(wifiなど)環境で操作する場合にはとても便利です。 また、「デタッチ」というのを行うことで、作業中の処理を残したまま、SSH接続を切ることができます。
と、メリットをつらつらと並べたところで、実際に使ってみた方が良いかと思いますので実際にインストールして使ってみましょう。
tmuxのインストール
下記の環境下でインストールしてみました。
- CentOS6.4
- tmux 1.7
必要なパッケージのインストール
$ sudo yum install libevent-devel ncurses-devel
libeventは、2系が必要なのでソースからインストールします。
$ wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
$ tar zxvf libevent-2.0.21-stable.tar.gz
$ cd libevent-2.0.21-stable
$ ./configure
$ make
$ sudo make install
最新版は http://libevent.org/ から探してください。
インストールしたlibevent を共有ライブラリに認識させるようにします。
$ sudo vim /etc/ld.so.conf.d/userlocal.conf
以下を追記します。
/usr/local/lib
再読み込みします
$ sudo ldconfig
$ ldconfig -p | grep libevent
で表示されれば完了です。
インストール
$ wget http://sourceforge.net/projects/tmux/files/tmux/tmux-1.7/tmux-1.7.tar.gz/download
$ tar zxvf tmux-1.7.tar.gz
$ cd tmux-1.7
$ ./configure LDFLAGS=-L/usr/local/lib/
$ make
$ sudo make install
最新のバージョンは、http://sourceforge.net/projects/tmux/files/tmux/ から探してください。 configureの LDFLAGS=-L/usr/local/lib/ 先ほどインストールしたldconfigのパスです。
起動確認
$ tmux -V
tmux 1.7
以下のコマンドでtmux が起動する。
$ tmux
tmuxの設定
tmuxはそのままでも使うことができるが、色や表示など自由に設定することができる。 ここでは、基本的な設定のみ記述する。より凝った設定したい場合は調べてみてください。
$ vim ~/.tmux.conf
# 日本語環境
set-window-option -g utf8 on
# スクロール設定
set-window-option -g mode-mouse on
# コピー
set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
# ヒストリサイズを設定
set-option -g history-limit 10000
.tmux.conf の設定ができたら、一旦tmuxをログアウト(exitコマンド)し、再度tmuxコマンドを叩いてください。 tmuxを起動すると、デフォルトではマウスによる画面のスクロールができなくなるのでできるように設定してみました。 また、ターミナル端末(teraterm)へのコピー&ペーストができるように設定しています。 teraterm上の文字をコピーするときはShiftキーを押しながらドラッグして範囲を選択してコピーしてください。
簡単なキーバインド
以下のキーバインドを抑えておけば大体の操作が可能です。 もちろん、キーバインドの割り当てを変えることも可能です。
tmux起動
$ tmux
tmux終了
タブ画面や画面分割を終わらせたいときにも使います。
$ exit
プレフィックス
tmuxの操作(画面分割)する前に押すキーバインド。 他のキーバインドと重ならないようにするため、デフォルトでは「Ctrl-b」となっています。 ※上記はCtrlキーとbキーを同時に押すという意味です。 自分は「Ctrl-f」にしています。
タブ作成
Ctrl-b c
※上記はCtrlキーとbキーを同時に押した後、cキーを押すという意味です。
タブの切り替え
Ctrl-b <タブ番号>
タブ番号はターミナル端末の左下に表示されている番号(下図)のことです。
右のタブに切り替え
Ctrl-b n
左のタブに切り替え
Ctrl-b p
分割
横に分割
Ctrl-b s
縦に分割
Ctrl-b %
ちなみに、分割した画面をペインと呼びます。
ペインの移動
上記の.tmux.conf の設定でマウスのクリックでもペインの移動が可能です。
Ctrl-b <矢印キー>
タブ名の変更
下記入力後、名前を入力してエンターキーを押すとタブ名が変更できる。
Ctrl-b ,
デタッチ
作業を中断したい場合に使用します。
Ctrl-b d
アタッチ
中断などでデタッチした後に再開したい場合に使用します。
Ctrl-b attach
強制終了
やむを得ずタブやペインを強制終了させる場合に使用します。
タブの強制終了
$ tmux kill-window -t <タブ番号>
ペインの強制終了
$ tmux kill-pane -t <ペイン番号>
ペイン番号の表示
Ctrl-b q
最後に
今日はtmuxのインストール、設定、そして簡単なキーバインドを紹介しました。 キーバインドはプレフィックスが面倒だったり、覚えるのが大変だったりしますが、使っていくうちに覚えていくので大丈夫です。むしろ覚えた後の便利さを考えると何とか覚えた方が後々楽になるかと思います。 また、.tmux.confの設定は多岐に渡るので、色々調べて自分だけのtmuxを作っていってください。