Infra Engineer

ターミナルの分割~tmuxコマンド~
2021.10.28
Lv1

ターミナルの分割~tmuxコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、tmuxコマンドについて解説します。
※tmuxコマンドは、複雑でありながらLPIC level1で出題されているところを筆者は見たことがありません。試験対策として本記事を参照される場合は、その点にご留意ください。

tmuxの概要
セッション・ウィンドウ・ペイン
tmuxコマンド詳細
ウィンドウ・ペインの操作
まとめ
確認問題

概要

tmuxコマンドとは、ひとつのターミナルの中に複数のターミナルを作り、同時並行で作業するために使用するコマンドです。
端末の中に仮想端末を作る、端末多重化コマンドと言われます。

普段LinuxOSに対してコマンドラインを開き、そこにコマンドを打ち操作してるかと思います。そのコマンドラインを打っている端末の中に、さらに別の仮想端末を作り出し、そちらからもコマンドラインを立ち上げて命令できます。しかも実際にコマンドラインが複数立ち上がって画面が乱雑になるわけではなく、ひとつのコマンドラインの画面の中で、自在に端末と仮想端末のコマンドラインを切り替えながらそれを行える。そしてコマンドラインの画面を分割して配置することもできる。このようなものです。
ブラウザで例えると、複数のウィンドウを開いてその中にさらにタブを展開していきますが、ウィンドウが画面の中に複数乱立することなく、ウィンドウ同士を行き来できる。タブの中で更に画面を分割することもできる。このようなイメージでしょうか。


セッション・ウィンドウ・ペイン


図1:ウィンドウとペイン


図2:複数のウィンドウ

上はtmuxコマンドを実行し、セッションを立ち上げ、その中に3つのウィンドウを作成して、2番のウィンドウを3つのペインに分けた状態です。
まず、この「ウィンドウ」を動かしているのがひとつの「セッション」です。(これがブラウザの「ウィンドウ」にあたります)
ターミナル画面の下部に緑色の部分があり、ここに「[0]」という表記がありますが、これがセッション番号です。
そしてセッションの中の1画面が「ウィンドウ」です。(これがブラウザの「タブ」にあたります)
下部緑色の部分に「0:bash、1:bash、2:bash」と出ていますが、これらがウィンドウに当たります。つまり、このセッションは3つのウィンドウに分かれているということです。(ブラウザのウィンドウが3つのタブに分かれているような状態)
そのウィンドウのうち、図1では「2:bash」のウィンドウを開いています。そのウィンドウの中身を3つの画面に分割しています。この分割したひとつひとつの画面を「ペイン」と言います。
それぞれのウィンドウ、更にそれぞれのペインで異なる作業をすることができます。図1では、3つのペインで「top、watch、ps」と異なるコマンドを実行しています。
図2では、別のウィンドウに切り替えています。こちらはまだ何もしていない状態です。下部緑色の部分の「*」が移動しています。これがウィンドウを移動した証です。

要約
・セッション:ターミナルひとつひとつ(仮想端末ひとつひとつ)のこと
・ウィンドウ:セッションが持つターミナル画面のこと。ひとつのセッションには最低ひとつのウィンドウがある。
・ペイン:ウィンドウを分割した画面のこと。ひとつのウィンドウには最低ひとつのペインがある。

tmuxコマンド詳細

tmux
意味 tmuxを起動・管理する。
書式 tmux [オプション] [コマンド]

tmuxコマンドのオプションで抑えておくべきものは以下です。

オプション 説明
new-session -s <セッション名> 指定した名前の新しいセッションを作成する。-sオプションで名前をつけていない場合は、連番が振られる。
attach-session -t <セッション名 or 番号> 指定したセッションに接続する。
list-sessions tmuxが管理しているすべてのセッションを表示する。
kill-session -t <セッション名 or 番号> 指定したセッションを削除する。
kill-server tmux全体を終了する。
例①)
「sample1」「sample2」という名前の新しいセッションを作成(new-session -s [セッション名])

「tmux new-session -s」で「sample1」「sample2」という名前の新しいセッションを作成しました。
するとそのセッションのウィンドウに移動し、下部緑のバーにセッション名が表示されています。

例②)
tmuxが管理しているセッション一覧を表示。(list-sessions)
user@user-VirtualBox:~$ tmux list-sessions
sample1: 1 windows (created Fri Oct 29 12:59:46 2021)
sample2: 1 windows (created Fri Oct 29 12:59:55 2021) (attached)

作成したセッションの一覧を確認できます。

例③)
指定したセッションを削除。(kill-session -t)
user@user-VirtualBox:~$ tmux list-sessions
sample1: 1 windows (created Fri Oct 29 12:59:46 2021)
sample2: 1 windows (created Fri Oct 29 12:59:55 2021) (attached)
user@user-VirtualBox:~$ tmux kill-session -t sample2
user@user-VirtualBox:~$ tmux list-sessions
sample1: 1 windows (created Fri Oct 29 12:59:46 2021)

ウィンドウ・ペインの操作

セッションに接続後、そのウィンドウやペインをどう操作するのか解説していきます。
ウィンドウやペインに対する操作なのかコマンドラインへの入力なのかを区別するために、操作コマンドの入力前には「プレフィックス(接頭辞)」を入力する必要があります。プレフィックスキーはデフォルトで「Ctrl+b」に設定されていますが、「~/tmux.conf」を編集することで変更することも可能です。(このファイルは自身で作成する必要があります。設定方法の詳細については今回は割愛します。)

※プレフィックスキーは、下記コマンドと同時に押下するのではなく、まずプレフィックスキーを押下して、キーボードから手を離したのちに下記コマンドを入力します。

ウィンドウ管理のコマンド一覧

コマンド 説明
c 新しいウィンドウを作成する。
n 次のインデックス番号のウィンドウに移動する。
p 前のインデックス番号のウィンドウに移動する。
0-9 該当するインデックス番号のウィンドウに移動する。
‘(シングルクォート) 指定したインデックス番号のウィンドウに移動する。
.(ドット) カレントウィンドウ(いま表示しているウィンドウ)のインデックス番号を取得する。
,(カンマ) カレントウィンドウの名前を変更する。
f ウィンドウを検索する。
& カレントウィンドウを削除する。
例)
ウィンドウの新規作成と削除。(プレフィックスキーは省略しています)

この新しく作ったウィンドウごとに別の処理を実行することができます。

例)
ウィンドウの移動。(プレフィックスキーは省略しています)

ペイン管理のコマンド一覧

コマンド 説明
! カレントペイン(いま操作しているペイン)をカレントウィンドウから分離する。
“(ダブルクオーテーション) カレントペインを上下に分離する。
% カレントペインを左右に分離する。
;(セミコロン) 前回アクティブだったペインに移動する。
o 次のインデックス番号のペインに移動する。
q インデックス番号を表示する。
x カレントペインを削除する。
z カレントペインを拡大して表示する。
{ カレントペインを前のインデックス番号のペインと入れ替える。
} カレントペインを後のインデックス番号のペインと入れ替える。
例)
ペインを上下左右に分割。(プレフィックスキーは省略しています)

ひとつのペインをさらに複数のペインに分けることができます。ペインごとに別の処理を実行することができます。

tmuxから元の画面に戻る際のコマンド

コマンド 説明
Ctrl + z tmuxを一時中断する。
d セッションからコンソールを切り離す。(デタッチ)

デタッチしても、バックグラウンドでセッションは生きています。


まとめ

今回は、tmuxコマンドについて解説しました。
使い方に慣れが必要ですが、以下のようなメリットがあるため、使いこなせると作業効率が非常に向上します。

・1つのターミナルから複数のターミナルを起動可能なので、画面が乱雑になることも、別の端末から改めてssh接続する必要もない。
・仮想ターミナルの画面を分割し使用可能なので、他のファイルを参照しながら作業するなど、同時並行ができる。
・起動した仮想ターミナルのデタッチ(切り離し)/アタッチ(接続)が可能であり、tmux実行端末とのネットワークが切れても問題なく、異なる環境から同じtmuxセッションへ接続可能

最後に確認問題で今回学習した内容を確かめてください。


確認問題

問題1

インデックス番号1のセッションにアタッチするために必要なコマンドはどれですか。

A) tmux new-session -s 1
B) tmux attach-session -t 1
C) tmux attach-session 1
D) tmux kill-session -t 1

解答・解説
答え:B

Ctrl+Zはプロセスに対して一時停止のシグナルを送信します。
A) ⇒ 1という新しいセッションを作成するコマンドです。
B) ⇒ 正解です。
C) ⇒ 存在しないコマンドです。
D) ⇒ インデックス番号1のセッションを削除するコマンドです。

問題2

tmuxで作成した仮想端末において、新しいウィンドウを作成するために必要なコマンドはどれか。

A) [prefix] + c
B) [prefix] + n
C) [prefix] + p
D) [prefix] + f

解答・解説
答え:A

Ctrl+Zはプロセスに対して一時停止のシグナルを送信します。
A) ⇒ 正解です。(create)
B) ⇒ 次のインデックス番号のウィンドウに移動するコマンドです。(next)
C) ⇒ 前のインデックス番号のウィンドウに移動するコマンドです。(previous)
D) ⇒ ウィンドウを検索するコマンドです。(find)