ターミナルマルチプレクサの話

2013年 新卒研修死霊

2013年7月12日 前田 章

自己紹介

ターミナルマルチプレクサ

  • screen
  • tmux

※ screenは2年くらい使ってないので、ターミナルマルチプレクサ研修と言いつつ今日はtmuxの話しかしません

社内IRCのtmuxチャンネル

/join #tmux

@banyan氏がいなくなって過疎ってます…

tmuxの無い生活

  • sshするたびにterminalのタブ開きまくり。
  • 作業がサーバが多くなるとタブも使用メモリも増えてターミナルごと死亡
  • 無線LAN(ネット回線)切れて終わり
  • w実行したときに大量のptsが…

過去に私が見たtmux(screen)使って無くてやらかした事例

  • メンテでALTER TABLEを流してる途中にターミナルが落ちて死亡
  • 十数時間かかるrsync(SCP)実行中に、回線が切れて死亡

そもそもバックグラウンドで実行とかnohupとかしてない時点でアウトだけど、 tmux(screen)を使ってれば回避出来た事例

tmuxのインストール

for Mac

brew install tmux

for RHEL

yum install tmux

tmuxを利用するメリット

  • 端末をデタッチ・アタッチすることができる
  • 端末上でコピー&ペーストができる
  • 別の端末から接続しても同じ作業が出来る
  • 複数の端末を起動でき、タブのように切り替えができる
  • 端末の画面分割ができる

tmux操作の基本

  • prefixはデフォルトだとCtrl + b (Ctrl+tに変更している人が多い気が)
  • prefix + 他のキー で各種操作
  • prefix + : でコマンド入力モードに入る
  • 各種キーや設定は~/.tmux.confでカスタム可能
  • ショートカットキーの表示 prefix + ?

windowとpane

screenにはpaneという概念がないので、screenからの移行してくると戸惑う。

デタッチ、アタッチ

  • 作業を中断する場合はデタッチ。デタッチした時点の状態が保存されている
  • 作業を再開する場合はアタッチ。デタッチ時の状態が復元される

コピーモード

  • window間でのコピペが可能
  • コピーモード開始 prefix + [
  • コピー始点選択 space
  • コピー終点 Enter
  • 貼り付け prefix + ]
  • 矩形選択ならspaceの後にv

tmuxの使いどころ1

                      +--------------+
                      |   server2    |
                      +--------------+
                        ^
                        |
                        |
+---------------+     +--------------+     +---------+
| Local Machine | --> | manage(tmux) | --> | server3 |
+---------------+     +--------------+     +---------+
                        |
                        |
                        v
                      +--------------+
                      |   server1    |
                      +--------------+
  • ssh先のmanageサーバでtmuxを起動して、server{1,2,3}にssh接続する。Local Machinemanage間の通信が切れても大丈夫
  • manageserver{1,2,3}は同じデータセンター内で基本的に通信が切れないことが前提

※ graph-easyを使うと上のような図は簡単に作れるので覚えておきましょう

tmuxの使いどころ2

tmux上でpuppetファイルの編集作業を実際にやってみる

下記のwindowで作業

  • zsh
  • vim
  • puppet-server(manage)
  • puppet-client(server1)
  • puppet-client(server2)

window操作

  • windowのリネーム prefix + ,
  • 新しいwindowの作成 prefix + c
  • window一覧の表示 :list-window
  • windowの移動 :move-window -t 6
  • windowを入れ替える :swap-window -t 1

pane操作

  • pane入れ替え prefix + { or prefix + }
  • pane番号の表示 prefix + q
  • レイアウトの変更 prefix + space
  • サイズ変更 + - < >
  • pane一覧の表示 :list-pane
  • paneを:1ウィンドウから移動してくる :join-pane -s :1
  • paneを:1ウィンドウに移す :join-pane -dt :1
  • activeなpaneがwindowの番号のwindowに移動 :join-pane -t :動かしたい先のwindowの番号
  • windowの番号のpaneがactiveなpaneに移動 :join-pane -s :もって来たいpaneがあるwindowの番号
  • 特定windowの特定paneに移動する :join-pane -s :持ってきたいpaneがあるwindowの番号.pane番号
  • paneの破棄 prefix + x

応用編

.tmux.confのカスタム1

# reload .tmux.conf
unbind r
bind   r source-file ~/.tmux.conf \; display-message 'source-file ~/.tmux.conf'

を設定しておくとprefix + r で設定再読込。

.tmux.confのカスタム2

下記のように短縮して記載出来るので、活用しましょう。

set-option        => set
set-window-option => setw
bind-key          => bind
unbind-key        => unbind

man tmuxaliasが書いてあります

display messageを使って通知

sleep 5 ;tmux display-message "hogemoge is done."
  • ~/.tmux.confset-option -g display-time 10000を設定
  • 何かキーを押すと消えるので使い勝手はイマイチ
  • リモートサーバだと使えない

ssh(mosh)するごとにwindowを自動生成する

他のwindowのpaneを持ってくる

pipe-paneで作業ログを取る

tmuxのコピーモードとMacのクリップボードを連携

tmuxあるある

まとめ

tmuxの心得

  1. リモートサーバに接続したら、すぐに起動
  2. tmux使ってても事故ることあるので、window名の自動設定とか利用する
  3. tmuxを使いこなして凡ミスを防ごう
  4. 賢人のdotfiles(.tmux.conf)を参考にしよう

上記に書いた以外の参考死霊