No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
images
README.md

README.md

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

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)を参考にしよう

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