こんにちは!ルーター学生アルバイトのkondoです。
今回は、ターミナル操作が便利&快適になるソフトウェア、tmuxを紹介します。

目次

tmuxとは

仮想ターミナル(以下、ターミナルと記載)を複数立ち上げることができるソフトです。tmuxを使うと、以下のようなことができます。

  • プロセスの管理が楽になります!
    • 具体的には、tmuxを通してプロセスを実行することで、ログアウトしても処理を中断されずに実行できます。
  • ターミナル作業が便利になります!
    • 具体的には複数の画面の使い分けや、画面の分割表示ができます。

どうでしょうか?なかなか便利そうですね。早速使ってみましょう!

インストール

Macの場合、Homebrewを使ってインストールします。

brew install tmux

ubuntuの場合はこちらです。

apt install tmux

では、起動してみましょう。tmuxと打つだけです。
画面下に黄色いバーが出てきていればOKです。

tmuxの基本の説明

ここで、一旦tmuxの基本を説明しようと思います。
tmuxでは、ターミナルを複数立ち上げることができ、これを「セッション」といいます。

  • セッション0
  • セッション1

セッションの次の層として「ウィンドウ」があります。ウィンドウはその名前の通り、表示されている物理的な画面1つを指しているものです。それぞれのセッションは1つ以上のウィンドウを持っています。

  • セッション0
    • ウィンドウ0
    • ウィンドウ1
  • セッション1
    • ウィンドウ0

そして、ウィンドウの下の層として「ペイン」があります。これは、画面を分割したときの単位です。ウィンドウは1つ以上のペインを持っています。

  • セッション0
    • ウィンドウ0
      • ペイン0
      • ペイン1
    • ウィンドウ1
      • ペイン0
  • セッション1
    • ウィンドウ0
      • ペイン0

この「セッション・ウィンドウ・ペイン」の概念を頭に入れておいて下さい。

また、tmuxで作られたターミナル上で、「tmuxのコマンド」を使うときは、prefix(プレフィックス)キーというものを押す必要があります。これはデフォルトではCtrlキーを押しつつbを押すことでprefixキーを押したことになる設定になっています。

プロセスの管理

先程tmuxと打って、下に黄色いバーが出ていますね?
この今の状態が、tmuxによって作られたターミナルの中にいる状態です。

  • ログインしたターミナル
  • tmuxによって作られてたターミナル(←今ココ)

という状況です。「tmuxによって作られてたターミナル」のことを、「セッション」といいます。セッションは複数立ち上げることができるので、今の「tmuxによって作られてたターミナル」を「セッション0」と言うことにします。

  • ログインしたターミナル
  • セッション0(←今ココ)

適当にコマンドを打ってみましょう。普段どおりに操作できます。

$ echo hogehoge
hogehoge

ここで、もとの「ログインしたターミナル」に戻ってみましょう。セッションから離れることをデタッチといいます。
Ctrlを押しながらbを一度押します(つまりprefixを押します)。その後、dを押します。

$ tmux
[detached (from session 0)]
$

と出てきて、下の黄色いバーはなくなり、元の「ログインしたターミナル」に戻れたかと思います。tmux lsでセッションの状態を確認できます。

$ tmux ls
0: 1 windows (created Tue Dec 11 16:52:38 2018) [157x48]

この状態はさっきの図ではこんな感じです。

  • ログインしたターミナル(←今ココ)
  • セッション0

ここで注目したいのが、セッション0がまだ生きているということです。
今いる「ログインしたターミナル」からexitでログアウトして、もう一度ターミナルアプリを起動し直して見ましょう。そして、tmux lsでプロセスを確認してみましょう。

$ tmux ls
0: 1 windows (created Tue Dec 11 16:52:38 2018) [157x48]

上のように、セッション0が生きているのが確認できると思います。
tmux aと打ってみましょう。直前にいたセッションに移動(アタッチ)するコマンドです。以下のような表示がすでに存在していると思います。

$ echo hogehoge
hogehoge
$

hogehogeが残っていますね。つまり、tmuxのセッション内で行った操作は、セッションを破棄しない限りは消えないのです。
これを使うと、

ローカルからサーバーに接続
-> サーバーでtmuxと打ち、tmuxのセッションを作り、入る(セッションの作成&アタッチ)
-> できたセッションで時間のかかるプロセスを実行
-> セッションからデタッチ
-> exitでログアウトしてローカルに戻る

とすることで、「サーバーからログアウトしても処理を中断されずに実行」ができます。
nohupコマンドと違う点としては、この方法ならデタッチしたプロセスにアタッチし直せます。

tmuxのセッションについての操作をまとめるとこんな感じです。

(元のログインしたターミナルでの操作)
tmux新規セッションを作り、それにアタッチする
tmux a直前にいたセッションにアタッチする
tmux ls今あるセッションを全て表示する
tmux kill-session -t 0指定したセッションを破棄する(ここでは0のセッション)

(セッション内での操作)
prefix + d 今いるセッションからデタッチする
prefix + s 今あるセッションの一覧を表示する。セッションの移動もできる。

ターミナル作業を便利に

ここからは、作業が快適になるウィンドウ分け、ペイン分割について説明します。一旦全てのセッションを破棄するため、デタッチしたあとにtmux kill-serverと実行して下さい。そしてtmuxと実行し、新規セッションを立ち上げてください。

ウィンドウ分けから説明します。
tmuxセッションに入り、prefix + c をしてみて下さい。画面が新しくなったかと思います。これでウィンドウが増えました。
prefix + w でウィンドウの確認、選択ができます。

(0)  - 0: 2 windows (attached)
(1)  ├─> 0: bash- (1 panes) "MacBook-ea.local"
(2)  └─> 1: bash* (1 panes) "MacBook-ea.local"

セッション0の、ウィンドウ1にいるのが確認できますね。
作業ごとにウィンドウを分けたりなどすると良いと思います。
続いてペイン分割です。prefix + " をしてみて下さい。下に画面が現れたかと思います。
これがペイン分割です。prefix + 方向キー でペインの移動ができます。prefix + % では、縦にペインを分割できます。どんどん増やしましょう!ペインを2つにすれば作業効率も2倍、3つにすれば3倍ですね!!(違います)

ウィンドウ、ペインに関する操作をまとめます。
(セッション内での操作)
prefix + c 新規ウィンドウを作成し、移動
prefix + w ウィンドウを選択&移動
prefix + & 今のウィンドウを破棄
prefix + " ペインを横分割
prefix + % ペインを縦分割
prefix + 方向キー ウィンドウ内でのペインの移動
prefix + z 今いるペインを一時的に拡大(もう一度実行すると元に戻る)
prefix + x 今いるペインを破棄

さいごに

紹介した機能の他にも、黄色いバーの見た目や内容をいい感じに設定したり、
画面の文字のコピーをvimのヴィジュアルモード風にできたり、
独自のキーバインドを設定したりなどができます。
tmuxを使って、ちょっと便利なターミナルを試してみてはどうでしょうか。