2013年 新卒研修死霊
2013年7月12日 前田 章
- screen
- tmux
※ screenは2年くらい使ってないので、ターミナルマルチプレクサ研修と言いつつ今日はtmuxの話しかしません
/join #tmux
@banyan氏がいなくなって過疎ってます…
- sshするたびにterminalのタブ開きまくり。
- 作業がサーバが多くなるとタブも使用メモリも増えてターミナルごと死亡
- 無線LAN(ネット回線)切れて終わり
w
実行したときに大量のptsが…
- メンテでALTER TABLEを流してる途中にターミナルが落ちて死亡
- 十数時間かかるrsync(SCP)実行中に、回線が切れて死亡
そもそもバックグラウンドで実行とかnohup
とかしてない時点でアウトだけど、
tmux(screen)を使ってれば回避出来た事例
for Mac
brew install tmux
for RHEL
yum install tmux
- 端末をデタッチ・アタッチすることができる
- 端末上でコピー&ペーストができる
- 別の端末から接続しても同じ作業が出来る
- 複数の端末を起動でき、タブのように切り替えができる
- 端末の画面分割ができる
- prefixはデフォルトだと
Ctrl + b
(Ctrl+t
に変更している人が多い気が) prefix + 他のキー
で各種操作prefix + :
でコマンド入力モードに入る- 各種キーや設定は
~/.tmux.conf
でカスタム可能 - ショートカットキーの表示
prefix + ?
screenにはpaneという概念がないので、screenからの移行してくると戸惑う。
- 作業を中断する場合はデタッチ。デタッチした時点の状態が保存されている
- 作業を再開する場合はアタッチ。デタッチ時の状態が復元される
- window間でのコピペが可能
- コピーモード開始
prefix + [
- コピー始点選択
space
- コピー終点
Enter
- 貼り付け
prefix + ]
- 矩形選択なら
space
の後にv
+--------------+
| server2 |
+--------------+
^
|
|
+---------------+ +--------------+ +---------+
| Local Machine | --> | manage(tmux) | --> | server3 |
+---------------+ +--------------+ +---------+
|
|
v
+--------------+
| server1 |
+--------------+
- ssh先の
manage
サーバでtmuxを起動して、server{1,2,3}
にssh接続する。Local Machine
とmanage
間の通信が切れても大丈夫 manage
とserver{1,2,3}
は同じデータセンター内で基本的に通信が切れないことが前提
※ graph-easyを使うと上のような図は簡単に作れるので覚えておきましょう
tmux上でpuppetファイルの編集作業を実際にやってみる
下記のwindowで作業
- zsh
- vim
- puppet-server(manage)
- puppet-client(server1)
- puppet-client(server2)
- windowのリネーム
prefix + ,
- 新しいwindowの作成
prefix + c
- window一覧の表示
:list-window
- windowの移動
:move-window -t 6
- windowを入れ替える
:swap-window -t 1
- pane入れ替え
prefix + {
orprefix + }
- 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
# reload .tmux.conf
unbind r
bind r source-file ~/.tmux.conf \; display-message 'source-file ~/.tmux.conf'
を設定しておくとprefix + r
で設定再読込。
下記のように短縮して記載出来るので、活用しましょう。
set-option => set
set-window-option => setw
bind-key => bind
unbind-key => unbind
man tmux
にalias
が書いてあります
sleep 5 ;tmux display-message "hogemoge is done."
~/.tmux.conf
にset-option -g display-time 10000
を設定- 何かキーを押すと消えるので使い勝手はイマイチ
- リモートサーバだと使えない
- X環境のクリップボードやOS Xのペーストボードとtmuxのバッファを連携する方法 - Dマイナー志向
- iTerm2にそれ系の機能があるぽい(私は使ってないです)
- 他の端末からアタッチ
tmux a
したときに画面がおかしくなる =>tmux a -d
を使いましょう - ウィンドウサイズの異なる端末から接続しても残念な感じにならない!!
- tmux で画面の外に |----------------- ってでまくるときの対策 - tokuhirom's blog.
- リモートサーバに接続したら、すぐに起動
- tmux使ってても事故ることあるので、window名の自動設定とか利用する
- tmuxを使いこなして凡ミスを防ごう
- 賢人のdotfiles(
.tmux.conf
)を参考にしよう
- 時代はGNU screenからtmuxへ - Dマイナー志向
- ターミナルマルチプレクサ Advent Calendar 2011 : ATND (@banyan氏と私も書いてます)