tmux
という、CUI (TUI) 用仮想スクリーンアプリケーションがあり、SSH 越しに Linux を操作する際大変便利です。似たようなものに byobu
とか screen
がありますが、私は tmux が好きで、よく使います。
便利に使うスクリプト
Linux でのシェル起動時、 (.bashrc 等) 下記のスクリプトを起動しています。
#=====================================================
# colors
#-----------------------------------------------------
C_RESET=$'\e[0m'
C_RED=$'\e[31m'
C_GREEN=$'\e[32m'
C_YELLOW=$'\e[33m'
C_BLUE=$'\e[34m'
C_MAGENTA=$'\e[35m'
C_CYAN=$'\e[36m'
C_IRED=$'\e[1;37;41m'
C_IGREEN=$'\e[1;30;42m'
C_IYELLOW=$'\e[1;30;43m'
C_IBLUE=$'\e[1;37;44m'
C_IMAGENTA=$'\e[1;37;45m'
C_ICYAN=$'\e[1;30;46m'
C_IWHITE=$'\e[1;30;47m'
#=====================================================
# tmux
#-----------------------------------------------------
alias TL="tmux ls"
function T() {
if [ "$1" ]; then
tmux a -t $1 || tmux -u new -s $1
else
TMUX_COUNT=`tmux ls 2>/dev/null |wc -l`
if [ ${TMUX_COUNT} -ge 2 ]; then
tmux ls
else
tmux a || tmux -u
fi
fi
}
TMUX_PS=`pgrep tmux`
if [ "${TMUX_PS}" ]; then
if [ ! "${TMUX}" ]; then
echo "? ${C_GREEN}tmux is running. type ${C_RESET}${C_IGREEN} T ${C_RESET}${C_GREEN} to attach.${C_RESET}"
tmux ls
# else already in tmux
fi
# else
# echo "tmux is not running."
fi
説明は下に書きます。
tmux が役立つケース
SSH セッションが切れた時に処理しているプロセスを終了させない、というのが最大の魅力です。
Linuxを触りたての頃は、SSHセッションが切れてもバッチプロセスを継続させるため
$ nohup ... >/tmp/log 2>&1 &
みたいなスクリプトをよく書いてました。が、正直長ったらしいですし、何かあった時シグナル送るのも面倒ですね。
SSH ログインしたサーバ上で tumx を起動し、その中でバッチプロセスを動かせば、回線断などでセッションが切れた場合も処理は継続しますし、事務所行っていた処理を一時中断して回線を切り、PCを会議室に持ってって新たに SSH ログインして tmux に再アタッチし、処理を続ける…なんてこともできます。
ちなみに、複数のユーザー(端末) で1つの tmux セッションにログインし、同じシェルセッションを見るってこともできます。
インストール方法
当社ではサーバ Linux は Ubuntu / Debian が多いので、インストールは
$ sudo apt-get install tmux
です。
基本的な tmux の使い方
起動オプション
$ tmux -u
UTF-8 サポートをONで起動します。日本語を使う場合入れとくと無難です。
( LANG=en_US.UTF-8
などの環境下では関係無いと思いますが、入れても問題無さそうです)
$ tmux a
起動している tmux セッションにアタッチ(再接続)します。回線を接続しなおした後、続きの作業をしたい時に使います。
$ tmux ls
起動しているセッションを一覧表示します
$ tmux a -t <セッション名>
セッション名を指定してアタッチします。
tmux起動後 (tmux内)での操作
Control + B
が、tmux用のキーバインド(tmuxプレフィックス)です。これを押した後に別キーを押すことで tmux を操作します。
Control + B → D
… tmux セッションからデタッチ(退出)します。tmux は動き続けます。作業を中断したい場合に使います。tmux からデタッチした後は、Control + D で SSH セッションを終了させて問題ありません。tmux は動き続けます。再接続したい場合は、tmux a
です。
Control + B → C
… 新しいウインドウを作成します。ウインドウというか、「タブ」と呼んだほうがイメージしやすいです。
Control + B → N
… 次のウインドウ(タブ)
Control + B → P
… 前のウインドウ(タブ)
Control + B → [
… コピーモード。スクロールバッファが見えるようになります。上にスクロールすることができるようになります。
文頭のスクリプトの使い方
この記事の上部にスクリプトを書きましたが、これをログインシェルの Bash 起動時に動作するよう、.bashrcなどに書いておくと
1. SSHログイン時、tmux のセッションがあると知らせます
Last login: Tue Mar 13 11:39:53 2018 from
? tmux is running. type T to attach.
このように表示されます。
複数セッションが起動している場合は、セッションのリストを表示します。
2. tmux に簡単にアタッチできます
T ファンクションを作ってます。
$ T
とすると、
- tmux セッションが無ければ新規セッションを開始
- tmux セッションがあればアタッチ
という動作をします。
また、引数でセッション名を指定できるので
$ T hello
とすると、セッション hello が無ければ作成、あればアタッチします。
3. その他
TLコマンド
tmux ls のエイリアスなので、実行するとセッションリストを表示します。
ターミナルの色付け
シェル変数 C_なんとか
を定義してecho での色付けをしやすくしています。tmux とは直接関係無いですが、外してスクリプトを書き直すのも面倒だったのでついでに掲載しました。