Goalist Developers Blog

インフラエンジニアならtmuxを使いこなしているか!?

こんにちは。インフラぼっちです。 開発メンバーと色々お話していると、
あらゆるコマンドや便利なものをまったく知らない状況なので、
現在メンバーに技術のシェアなどをしています。

■tmux(ティーマックス)とはなんなのか

f:id:r-adachi:20170308150844j:plain

サーバに入ると突然ssh切れたりセッションし直すのは
めんどくさいと思う人多いと思います。(特にインフラやってる人)
iTerms2でペインを分割(⌘ + d)でできますが、
また踏み台からsshログインするのもめんどくさい。
これを解決するのがtmuxです。
もともとscreenで同じようなことができるのですが、
比べるとtmuxのほうがサーバのメモリー等負荷がなく、サーバに優しいのです。
以下が概要となります。

端末多重化ソフトウェアで、1つのターミナルで操作しているシェルから実行したtmux上で複数の仮想端末を操作できるため、
ターミナルを複数開くことなく複数のサーバへログインしたり、それぞれの仮想端末で別々のプログラムを実行できるようになるため、
より効率的に作業が行える。

→つまりターミナルを新規タブとか開く必要がない

■tmuxの流れ

今回はローカルでtmuxを使った様子を貼ります。
f:id:r-adachi:20170308122120g:plain

・本番環境であれば
1.踏み台に入る(ssh)
2.tmux lsで確認(自分のtmux)
3.セッションを作る/アタッチする(新規でtmuxを立ち上げる場合)
4.セッションに入る
5.デタッチ

gifでイメージが分かったかと思います。

■インストール方法

・Mac

$ brew install tmux

・CentOS(Amazon Linux)

$ sudo yum install tmux

・Ubuntu

$ sudo aptitude install tmux

■.tmux.confの設置

$ vim ~/.tmux.conf

https://github.com/RVIRUS0817/ansible_Mac/blob/master/roles/homedirectory/files/.tmux.conf
私独特の設定ファイルですが、いろいろ見てやってください。

■tmuxコマンド

tmux独特のコマンドがあって、
毎回キーバインドを押して作業に入ります。
(ちなみにCtl-bがデフォルトですが自分の場合はCtl-tにしてます。)

・tmux ls
セッションの確認(他の人も使うので確認大事)

・tmux a -t name
セッションアタッチ(デタッチして保存してるものから復帰します)

・tmux new-session -s name
nameというセッション作成

・Ctrl-b + c
新規ウインドウ作成(Ctrl-bはキーバインドと言います)

・Ctrl-b + ,
ウインドウの名前変更(わかりやすく変えましょう)

・Ctrl-b + p
ウインドウの切り替え

・Ctrl-b + “
水平分割

・Ctrl-b + %
垂直分割

・Ctrl-b + o
ペイン移動(複数の端末)

・Ctrl-b + x
ペイン分割削除(イマイチなら消す)

・Ctrl-b + o
ペイン場所替え(同時押しにすると!?)

・Ctrl-b + カーソルキー上下
ペインサイズ変更(サイズ変更)

・Ctrl-b + [
コピーモード (vimと同じhjklで動かし、スペースで選択、エンターで戻る)

・Ctrl-b + ]
貼り付け(オプションキー長押しでコピーもできる。iTermの場合)

・コマンドキー + Altキー
選択してコピー

・Ctrl-b + d
セッションのデタッチ(保存して抜ける。ssh切れてもまたセッションを繋げばOK)

・Ctrl-b + r
tmux.conf再起動(conf変えたら再起動しましょう)

■アタッチとセッションを簡単にする

毎回アタッチとセッションをコマンドで叩くのはめんどくさいので
tm nameみたいな感じでできたらいいなと思い作ってみました。

・.bashrc/.zshrcに追記する

#tmux
function tm() { 
       if [ -n "${1}" ]; then
           tmux attach-session -t ${1} || \
           tmux new-session -s ${1}
    else
           tmux attach-session || \
           tmux new-session
       fi
}

・反映

$ source ~/.bashrc
$ source ~/.zshrc

■まとめ

いかがだったでしょうか。
tmuxを使えば何か障害があってもすぐにサーバにログインできますし、
仮想ターミナルってすばらしい。。
小さいインフラ規模でもtmuxを使っていれば管理も楽そうです。
ちなみに弊社の開発部鈴木くんは馴染めないそうです。(残念)
あと踏み台にセッション貼るよりも多段sshでローカルにセッション貼った方がもっといいです。