ランサーズのエンジニアのtomohiroです。
自分が普段使っているツールのひとつ、tmuxを紹介します。特に新しくはないですが、他の人の使い方も気になるんじゃないかなと思ったので、書いてみます。
tmux(terminal multiplexer)とは
1つのターミナルで複数の仮想端末を扱えるようになります。
この「1つのターミナル」をtmuxではsessionと呼んでいます。理由は後ほど。
ご存知の通りtmuxのプロセスが立ち上がるので、セッションの永続化ができ、突然ネットワークが切断されたり、窓を間違えて閉じたりしても、その状態から復帰が可能になります。
ちなみにtmuxは terminal multiplexer(ターミナルマルチプレクサ)の略です。名前の通り、1つのターミナルをマルチプレックスします。
なぜscreenではなくtmuxなのか?
似たソフトに GNU screen 等もありますが、個人的には tmux を使用しています。いくつか違いをピックアップすると以下の通りです。
画面分割
tmuxはデフォルトで画面の横分割、縦分割が出来ます。
(今はわかりませんが、tmuxに似た screen だとデフォルトで縦分割出来ない)
tmuxサーバー構成
tmux は仕組み上、tmuxはサーバーのように動きます。1つのセッションが立ち上がると、tmuxサーバーのインスタンスが立ち上がります。
tmuxサーバーは複数のセッションを管理出来るようになっていて、セッション間の行き来が楽になります。
導入手順(tmux.conf)
# epel が入ってないとダメだったと思います $ sudo yum install tmux # tmux用の設定ファイルを作成 $ vim ~/.tmux.conf # .tmux.conf # これは自分の使ってるconfです。(前の上司にもらった物、ほぼそのまま使ってます)参考までに # ちなみに、基本的にキーバインドをスクリーン準拠にしてます。 # 後、自分は Ctrl + t 派の人間です。 # # # # # # # # # # # # # # # # # # # # # # # # # ---------------------------------------------------------------------- # Window / Session Options # ---------------------------------------------------------------------- set-window-option -g utf8 on #set-option -g mouse-select-pane on set-option -g base-index 0 # CopyMode vi set-window-option -g mode-keys vi # ---------------------------------------------------------------------- # Keybind # ---------------------------------------------------------------------- # Prefix to C-t set-option -g prefix C-t unbind-key C-b bind C-t send-prefix # ---------------------------------------------------------------------- # Window / Pane # ---------------------------------------------------------------------- # Open current pane to new window bind ! break-pane -d # Hirozontally / Vertically split pane unbind - bind - split-window -v unbind | bind | split-window -h # move to upper / right / down / left pane unbind k bind k select-pane -U unbind l bind l select-pane -R unbind j bind j select-pane -D unbind h bind h select-pane -L # resize pane unbind K bind K resize-pane -U 8 unbind L bind L resize-pane -R 8 unbind J bind J resize-pane -D 8 unbind H bind H resize-pane -L 8 # ---------------------------------------------------------------------- # screen compatibile settings # ---------------------------------------------------------------------- # go to prev window unbind C-t bind C-t last-window # copy mode bind Escape copy-mode # rename window bind A command-prompt "rename-window '%%'" # list(choose) window unbind '"' bind '"' choose-window # ---------------------------------------------------------------------- # etc # ---------------------------------------------------------------------- # show clock :p bind z clock-mode
利用手順
セッション開始
tmux new -t <session_name>
セッション再開
tmux a -s <session_name>
(↓ここから下はすべてtmux画面内のキーバインド)
新画面作成
Ctrl + t -> c
画面移動
次:Ctrl + t -> n
前:Ctrl + t -> p
画面分割
横:Ctrl + t -> –
縦:Ctrl + t -> |
プリセットのレイアウト: Ctrl + t -> space
パネル(分割)移動
左:Ctrl + t -> h
右:Ctrl + t -> l
上:Ctrl + t -> k
下:Ctrl + t -> j
こぼれ話
Macでiterm2をお使いの方は、iterm2のメニューに 「Shell」 > 「tmux」という項目があるみたいですね。最初まったく使い方がわからなかったのですが、ちょっと調べた結果ここまでわかりました。
下記のように、 -CC オプションをiterm2で、tmuxを使えるみたいです。
$ tmux -CC $ tmux -CC attach
コマンドを打つと、iterm2のウィンドウが別途開きます。tmuxの操作をmacネイティブのiterm2で出来る事が売りみたいですね。
tmux慣れているとあんまり恩恵を感じないですが・・・
tmuxの使い方の話、いかがでしたか?
tmux.confいじりまくりで、全然デフォルトと違うじゃないかって突っ込まれそうですが、もしscreenと共存する必要があるならばかなりスムーズに移行出来るのではないでしょうか。