このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】複数のセッション起動・複数のウィンドウの作成・1つのウィンドウを複数のペインに分割する:tmuxコマンド

tmuxコマンドの概要

 tmux(ティーマックス)は、端末を多重化するソフトウェアです。tmuxコマンドは、1つの操作画面を分割したり、分割した画面同士で文字列をコピー&ペーストできる機能を提供します。ネットワークが途中で切断されても、再接続したときに切断時の続きから作業を再開できるため、ネットワーク越しにサーバーを操作する際に便利です。このようなソフトウェアをターミナルマルチプレクサと呼びます。tmuxと同様の機能を有するコマンドにはscreenコマンドがあります。

インストール方法(Ubuntuの場合)

 Ubuntuの場合は、以下のコマンドを実行してインストールします。パスワードの入力が求められたら、パスワードを入力し、「続行しますか? [Y/n]」には「y」と入力します。

【コマンド】
sudo apt install tmux

ser01@ubuntu-vm:~$ sudo apt install tmux
[sudo] user01 のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libevent-core-2.1-7 libutempter0
以下のパッケージが新たにインストールされます:
  libevent-core-2.1-7 libutempter0 tmux
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 176 個。
531 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,365 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libevent-core-2.1-7 amd64 2.1.12-stable-1build3 [93.9 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 libutempter0 amd64 1.2.1-2build2 [8,848 B]
取得:3 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 tmux amd64 3.2a-4ubuntu0.2 [428 kB]
531 kB を 2秒 で取得しました (255 kB/s)
以前に未選択のパッケージ libevent-core-2.1-7:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 203610 個のファイルとディレクトリが
インストールされています。)
.../libevent-core-2.1-7_2.1.12-stable-1build3_amd64.deb を展開する準備をして
います ...
libevent-core-2.1-7:amd64 (2.1.12-stable-1build3) を展開しています...
以前に未選択のパッケージ libutempter0:amd64 を選択しています。
.../libutempter0_1.2.1-2build2_amd64.deb を展開する準備をしています ...
libutempter0:amd64 (1.2.1-2build2) を展開しています...
以前に未選択のパッケージ tmux を選択しています。
.../tmux_3.2a-4ubuntu0.2_amd64.deb を展開する準備をしています ...
tmux (3.2a-4ubuntu0.2) を展開しています...
libevent-core-2.1-7:amd64 (2.1.12-stable-1build3) を設定しています ...
libutempter0:amd64 (1.2.1-2build2) を設定しています ...
tmux (3.2a-4ubuntu0.2) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
libc-bin (2.35-0ubuntu3.1) のトリガを処理しています ...

ウィンドウとペインについて

tmuxコマンドの実行

  • tmux」コマンドを実行します。

 tmuxを起動した1つの単位をセッションと呼びます。tmuxコマンドを実行すると、画面がリフレッシュされ、新たに操作画面(ウィンドウ)と実行環境(ペイン)が生成されます。

user01@ubuntu-vm:~$ tmux

tmuxコマンド実行直後

実際に「tmux」コマンドを実行した直後の画面は、下図のとおりです。

画面が画面がリフレッシュされ、新たなウィンドウと実行環境が生成されます。

プレフィックスキー

tmuxコマンド実行中は「Ctrl」+「b」キーと特定のキーの組み合わせでウィンドウを操作します。

tmuxコマンド実行中のキー操作

操作説明
プレフィックスキー +「 " 」ペインを上下に分割します。
プレフィックスキー +「 % 」ペインを左右に分割します。
プレフィックスキー +「 o 」ペイン間を移動します。
プレフィックスキー +「 x 」現在のペインを閉じます。
プレフィックスキー +「 d 」セッションをデタッチ(切り離し)します。
tmuxコマンド実行中のキー操作

ペインの操作

1.ペインを上下に分割する

  • プレフィックスキー(「Ctrl」+「b」)を押した後、「"」キーを押します。
  • これで上下のペイン間を自由に移動できるようになります。下のペインが、カレントペインとなります。

実際の画面は下図のとおりです。

2.上のペインへの移動

  • プレフィックスキー(「Ctrl」+「b」)を押した後、「o」キーを押します。

3.sleepコマンドの実行

  • 上のペインで「sleep 3600」コマンドを実行します。sleepコマンドは指定した秒数だけ停止するコマンドです。3600秒を指定して1時間、停止させます。

4.下のペインに移動する

  • sleepコマンドが実行されている間に、下のペインに移動します。
  • プレフィックスキー(「Ctrl」+「b」)を押した後、「o」キーを押します。

5.sleepコマンドのPIDを調べる

  • pgrep sleep」コマンドでsleepコマンドのPIDを特定します。

6.killコマンドでsleepコマンドのプロセスを終了させる

  • 例えば、「kill 74490」コマンドを実行します。
    ※PIDは実行環境で異なります。
  • sleepコマンドが実行されていた上のペインには「Terminated」と表示され、プロンプトが表示されます。これは、killコマンドからsleepコマンドのプロセスにSIGTERMシグナルが送信されてsleepコマンドのプロセスが終了したことを意味します。

7.ペインの終了

  • ペインを終了させるには「exit」コマンドを使用します。
  • 下のペインを「exit」コマンドで終了させます。
  • もう一度、残ったペインで「exit」コマンドを実行して終了させます。
  • もとのシェルに戻ります。

まとめ

 tmuxコマンドは、端末を多重化するための強力なツールであり、セッション、ウィンドウ、ペインを活用して効率的に作業を管理できます。ネットワーク切断後の作業再開や複数の作業を同時に行う場合に非常に便利です。操作方法や各コマンドの使い方を理解し、効果的に利用することで、作業効率が大幅に向上します。