15 Apr 2016, 00:20

今度こそ入門するtmux

tmuxの入門は何度目だろうか…
SoftwareDesignの2015年7月号を見ながら、何度目かの入門をしたのでメモする。
ブログに書いたので、これで運用にのりそうだ。

tmuxってなに?

公式ページ(http://tmux.github.io/)から引用すると。

tmux is a terminal multiplexer. What is a terminal multiplexer? It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal. And do a lot more.
(訳)tmuxはターミナルマルチプレクサです。ターミナルマルチプレクサは複数のプログラムを容易に1つのターミナル上で切り替えられるようにします。またそれらのプログラムをバックグラウンドで動かしながらデタッチしたり、別のターミナルにアタッチすることができます。さらにいろいろなことができます。

tmuxを使ってみる

インストール

今回Macの環境で行っています。
今日時点ではバージョン2.2まででていますが、brewでは2.1がインストールされました。

$ brew install tmux
$ tmux -V
tmux 2.1 

起動

$ tmuxと入力すると、tmuxが起動し$ exitで抜けることができます。
これから説明していきますが、tmuxの機能を利用するときプレフィックスキーを入力する必要があります。
デフォルトではプレフィックスキーはCtrl-bになっています。

ウィンドウの作成、切り替え

1つのtmuxの中にウィンドウ(タブ機能と考えてください)を作って切り替えたりします。
Ctrl-b+cでウィンドウを作成できます。
ウィンドウを作成するとターミナルの下部分(ステータスバー)に表示されます。
*印があるのがいまいるウィンドウです。

f:id:mosuke5:20160414233836p:plain

ウィンドウ分割

ウィンドウの分割もできます。開発するときに便利ですよね!
分割された画面をペインと言います。
Ctrl-b+%で縦に分割、Ctrl-b+"で横に分割できます。
ペイン間の移動はCtrl-b+o

f:id:mosuke5:20160414230041p:plain

なにが嬉しいの?

まてまて、タブ機能もウィンドウ分割もiTerm2で全然できるよ?
ほら!? f:id:mosuke5:20160414230301p:plain

tmuxのいいところはデタッチとアタッチ機能やカスタマイズ性の高さだと思う。
カスタマイズ性についてはまだそんなにわかってませんが。。。

デタッチとアタッチ

tmuxはターミナルを仮想化します。その威力を発揮するのがデタッチとアタッチ機能です。
tmuxを起動した状態でCtrl-b+dを押してみよう。
そうすると下のステータスバーも消え、元のターミナルに戻ってきたと思う。
これをデタッチといい、tmuxが終了したわけではない。

プロセスを確認すると、tmuxがまだ存在してることがわかる。

$ ps -ef | grep tmux
  501 16038     1   0  9:26PM ??         0:02.26 tmux
  501 17800 13345   0 11:53PM ttys005    0:00.00 grep tmux 

tmux lsで現在のtmuxのセッションの一覧がみれます。

$ tmux ls
0: 1 windows (created Thu Apr 14 21:26:19 2016) [129x32] 

ではアタッチしてみよう。下記で元のtmuxに戻ってくるはずです。

$ tmux attach 

デタッチしている間もバックグラウンドでプログラムは動き続けています。
試しに、tmux上でvmstatなどを打ってデタッチしてアタッチすると動き続けていることがわかると思います。

pstree見るといい

tmuxの概念を理解するにはpstreeをみるといい。
tmuxを使わずにpstreeコマンドを打つと、SSHのプロセスの下でpstreeが動いているのがわかる。

$ pstree -p
systemd(1)
    ├─sshd(13589)─┬─sshd(15066)───sshd(15068)───bash(15069)───pstree(15115) 

一方、tmuxを起動し、tmux上でpstreeを実行すると、sshdのプロセスの下にはtmuxが動いており、
pstreeコマンドはtmuxプロセスの下で動いている。

$ pstree -p
systemd(1)
    ├─sshd(13589)─┬─sshd(15066)───sshd(15068)───bash(15069)───tmux(15146)
    └─tmux(15148)───bash(15149)───pstree(15168) 

なにがいいたいかというと、tmuxの上で動かすプロセスはsshdとは別プロセスで動いているということ。
sshが切れても動作し続けるとはまあそういうことです。

カスタマイズ

tmuxはカスタマイズ性に優れます(ようです)。.tmux.confを修正することでカスタマイズ可能です。
今回は入門ということで、よく使いそうな基本設定だけしたが、これだけでも相当便利でした。

  • プレフィックスキーをCtrl-tとする
  • ペインのサイズをvimキーバインドで調整できるようにする
  • ウィンドウの分割を|-でできるようにする
# プレフィックスキー
unbind C-b
set-option -g prefix C-t

# paneのサイズ変更(Vimerにはかかせない)
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

# window分割(わかりやすくていいね!)
bind | split-window -h
bind - split-window -v 

Vimキーバインドでペインのサイズ自由自在! f:id:mosuke5:20160415000811g:plain

このエントリーをはてなブックマークに追加