いつもお世話になっているtmuxについて改めてまとめてみました。
ターミナル・マルチプレクサ 「tmux」では何ができるのか
・ターミナルの状態を維持しつつ、セッションの切断、再開ができる。
・1つのターミナル上に複数のターミナルを表示できる。
とかとか
導入するメリット
・ssh の接続が切れても tmux のセッションが裏で動いているので作業を再開できる。
・別の端末から同じ作業ができる。
・タブをいっぱい開かなくてもいい。
とかとか
インストールする
Homebrew(Mac) でインストールする
$ brew install tmux
yum でインストールする
$ sudo yum install tmux
apt-get でインストールする
$ sudo apt-get install tmux
設定ファイル
$ vim .tmux.conf
※コマンドは以下のように省略できる
command | short command |
---|---|
set-option | set |
set-window-option | setw |
bind-key | bind |
unbind-key | unbind |
基本的な使い方
キーバインド | 動作 |
---|---|
C-a ? | キーバインドの一覧を表示する |
C-a r | 設定ファイルのリロード |
C-a * | サーバーにアタッチしているクライアント一覧を表示する |
C-a c | 新しいウィンドウを作成する |
C-a , | 現在のウィンドウ名変更する |
C-a p | 前のウィンドウへ移動する |
C-a n | 次のウィンドウへ移動する |
C-a ウィンドウ番号 | 指定したウィンドウ番号へ移動する |
C-a & | ウィンドウを強制終了する |
C-a w | ウィンドウ一覧を表示する |
C-a | | 縦にペイン分割する |
C-a - | 横にペイン分割する |
C-a z | ペインを最大化する |
C-a x | ペインを強制終了する |
C-a h | ペイン間を移動する(左) |
C-a j | ペイン間を移動する(下) |
C-a k | ペイン間を移動する(上) |
C-a l | ペイン間を移動する(右) |
C-a H | 現在のペインのサイズを変更する |
C-a J | 残材のペインのサイズを変更する |
C-a K | 現在のペインのサイズを変更する |
C-a L | 現在のペインのサイズを変更する |
C-a d | デタッチする |
tmux attach | アタッチする(最後に作成されたセッションがアタッチされる) |
tmux attach -t セッション名 | セッションを指定してアタッチする |
※ CはControlキー
Macとクリップボードを連携する
http://yonchu.hatenablog.com/entry/20120514/1337026014
の通りにやればOK。
reattach-to-user-namespace をインストールする
$ brew install reattach-to-user-namespace
tmuxxとtmux-pbcopyスクリプトをPATHの通った場所に置く。
https://github.com/kzy52/dotfiles/blob/master/bin/tmuxx https://github.com/kzy52/dotfiles/blob/master/bin/tmux-pbcopy
コピーモードに入る
C-a [viキーバインド(hjkl)で選択したい場所に移動する
範囲選択モードに入る
Space選択範囲をコピーする
Enterペースト
C-a ]クリップボードにコピー
C-a y
※ 4ではtmuxのバッファにしかコピーされないのでクリップボードに入れたい場合は6を実行する
使用例
- リモートサーバーにログインし、tmux の新しいセッションを開始する
$ ssh example.com $ tmux new -s session_name
- セッションをデタッチし、ログアウトする
<prefix> d
$ exit
- 再度 ssh ログインしてセッションをアタッチする
$ ssh example.com $ tmux attach -t session_name
これでいちどネットワークが切れてしまっても作業を再開することができるようになる。
おまけ
Railsでの開発をする時は以下のようなスクリプトをパスの通った場所におき、
作業を始める際に以下を実行しています。
SESSION_NAMEとROOT_DIRを適宜変更してください。
$ sh bin/setup-rails.sh
以下のようになります。