はじめてのtmux

Posted on 2017/05/13

ToC

「複数のサーバーに同じコマンドを実行するときにtmux(ティーマックス)が便利だよ」と教えてもらったので、導入してみました。仕事上のオペレーションでも複数のターミナルをたちあげて、設定ファイルの同じ箇所を修正したりするときに地味に役立つ機能です。

インストール

インストールは非常に簡単です。 homebrewを利用して、いくつかの依存関係のパッケージを含めてインストールされます。

$ homebrew install tmux

$ tmux -V
tmux 2.4    #Version2.4

$ tmux      #tmuxの起動

画面の階層の概念

まだまだ、tmuxを使いこなせているわけではないのですが、いろいろなサイトで紹介されている内容を理解するために「セッション」「ウィンドウ」「ペイン」という概念を知っておくほうが良いと思いました。

簡単に言うと[セッション]– 1:N –[ウインドウ]– 1:N –[ペイン]の関係です。

セッション(Session)

tmuxに管理される仮想端末群の管理単位で、複数のWindowを管理する。 実行セッションは、tmux lsで確認可能。

ウインドウ(Window)

tmuxセッション内に開かれている1つの仮想端末。複数のPaneを管理する。 画面下部に表示されて、複数のWindow間をタブ切り替えのようなイメージで切り替え可能。

ペイン(Pane)

Windowに含まれる複数の疑似ターミナル。画面の階層の最小単位。 選択中のPaneは、Paneの枠が強調表示される。選択中のPaneの切り替えも可能。

/posts/2020/02/img/13e4748b-d836-d25e-ea5b-6f1cb0be8b81_hueb47a1dbba47d6e0482531d9ac3e7170_73232_600x0_resize_lanczos_3.png

設定ファイル

ユーザーのhomeディレクトリ(~/)か/etcディレクトリに設定ファイルを配置するとカスタマイズが可能です。 個人的には、複数Pane間の移動や全てのPaneで同じコマンドを実行するオペレーションをよく使うのでわかりやすいショートカットを設定しています。 なお、現在設定されているショートカットは、tmuxを起動後に[Prefix-key] - ?のコマンドで一覧表示されます。

# synchronize
bind e setw synchronize-panes on
bind E setw synchronize-panes off

# settings reload
bind r source-file ~/.tmux.conf \; display "Config reloaded."

# 256 color terminal
set-option -g default-terminal "screen-256color"
# vi keybind
set-window-option -g mode-keys vi

# status bar
set -g status-fg black
set -g status-bg colour244
set -g status-left "#[fg=colour231,bg=colour137] [#S] "
set -g window-status-format "#[fg=black,bg=colour244] #I : #[fg=black,bg=colour244]#W "
set -g window-status-current-format "#[fg=colour231,bg=colour137,bold] #I : #W  "
set -g status-right "#[fg=colour231,bg=colour137] %Y/%m/%d %H:%M "

# message text
set-option -g message-bg colour231
set-option -g message-fg brightred

# pane border
set-option -g pane-border-fg black
set-option -g pane-active-border-fg colour137

# pane
bind = split-window -v
bind | split-window -h

# pane move
bind -n S-left select-pane -L
bind -n S-down select-pane -D
bind -n S-up select-pane -U
bind -n S-right select-pane -R

設定ファイルで指定する色指定

設定ファイル内でcolour231とか何気なく指定していますが、どんな色なのか設定を始めた段階では検討がつかずカラーシートを探していました。 下記のサイトで紹介されていたのでご参考までに。

How does the tmux color palette work?

for i in {0..255}; do
    printf "\x1b[38;5;${i}mcolour${i}\x1b[0m\n"
done

複数のサーバーを複数Paneに一括起動

一通りの設定ができたので、本題の複数のサーバーにSSHログインしてコマンドの実行をしてみたいと思います。 IPの異なるサーバーに配置されている同じ設定ファイル操作するときなどに絶大な威力を発揮します。

起動用のbashを作って、呼び出すと便利ですね。 下記のサイトを参考にしました。

tmuxで複数サーバの同時オペレーション

$ ./multi-tmux.sh "centos@127.0.0.1 -p 2222" "ec2-user@10.0.2.5"
#!/bin/bash

session=tmux-`date +%s`
window=tmux

tmux new-session -d -n $window -s $session

init_flag=0
for i in "$@";do
  if [ $init_flag == 1 ]; then
    tmux split-window
    tmux select-layout tiled
    echo hello
  fi

  tmux send-keys "ssh $i" C-m
  init_flag=1
done

tmux select-pane -t 0
tmux set-window-option synchronize-panes on
tmux attach-session -t $session

参照