Linuxでtmuxを使用する方法(そしてそれがScreenよりも優れている理由)

Linuxディストリビューションのリポジトリからtmuxをインストールし、Linuxターミナルで「tmux」を実行します。各tmuxセッションに一意の名前を付け、各セッション内にウィンドウを作成し、それらのウィンドウをペインに配置できます。

Linuxのtmuxコマンドは、screenのようなターミナルマルチプレクサーです。その支持者は多く、声高なので、私たちは2つを比較することにしました。tmuxは本当に優れているのでしょうか、それとも単に知っているものを好むということなのでしょうか?

tmux vs. screen

tmuxとGNUscreenの両方のコマンドはターミナルマルチプレクサーです。これらは、単一のターミナルウィンドウ内に複数のウィンドウを持ち、それらの間を行き来することができます。ウィンドウはペインに分割でき、それぞれが独立したコマンドラインを提供します。

セッションを切り離すと、バックグラウンドで実行されるヘッドレスエンティティになり、それを起動したターミナルウィンドウを閉じることができます。準備ができたら、新しいターミナルウィンドウを開いて、まだ実行中のセッションを再接続できます。これはSSH接続でも実行できます。

1台のコンピュータでセッションを切り離し、自宅に帰ってリモートコンピュータにログインできます。再接続すると、バックグラウンドセッションを再接続して、再び対話的に使用できます。

screenコマンドとは?

screenコマンドもターミナルマルチプレクサーであり、オプションが満載です。できることすべてについては、詳細な記事をご覧ください。

今回はtmuxに集中します。その中で、screenが同じ機能や機能をどのように処理するかについて説明します。

screenについて私たちを悩ませたのは1つだけです。それについては後で説明し、tmuxがより優れているかどうかを確認します。

tmuxのインストール

screenは一般的に人気のあるLinuxディストリビューションにデフォルトでインストールされていますが、tmuxはインストールされていません。Ubuntuにtmuxをインストールするには、次のように入力します。

sudo apt-get install tmux

Manjaroではpacmanを使用できます。

sudo pacman -Sy tmux

Fedora 31では、tmuxがすでにインストールされています。

tmuxセッションの開始

tmuxを開始するには、それをタイプしてEnterキーを押すだけです。

tmux

tmuxセッションにいると、ターミナルウィンドウにステータスバーが表示されます。

ステータスバーの右側には、ホスト名、時刻、日付が表示されます。左側には、次のセッション関連情報が表示されます。

  • [0]:これはセッション名です。デフォルトでは、0から始まる番号が付けられます。セッションに意味のある名前を付ける方法については以下で説明します。
  • 0:bash*:0は、これがこのセッションの最初のウィンドウであることを示しています。このセッションで実行されている唯一のプロセスはbashです。プログラムを実行すると、その名前がここに表示されます。アスタリスク(*)は、これがあなたが見ているウィンドウであることを意味します。tmuxセッションで新しいウィンドウを作成するたびに、そのウィンドウ番号とそこで実行されているプログラムの名前がステータスバーに追加されます。

screenコマンドは、デフォルトでステータスバーを提供しません。何が起こっているのかを知るには、手探りで自分の機転に頼らなければならず、少し練習が必要です。(独自のステータスバーを設定しない限り)

プラス面では、ターミナルウィンドウの不動産の行を失うことはありません。もちろん、通常はターミナルウィンドウを拡張して、ターミナルマルチプレクサーの使用を価値のあるものにします。その場合、ステータスバーの1行を失うことはそれほど問題ではありません。ターミナルウィンドウの画像をデフォルトのサイズのままにしておいたのは、情報を確認できるようにするためです。

コマンドはキーストロークを使用してtmuxに送信され、これには2つの部分があります。まず、Ctrl+Bを押してtmuxの注意を引きます。次に、すぐに次のキーを押してコマンドをtmuxに送信します。コマンドは、文字、数字、句読点、または矢印キーを押すことによって送信されます。

screenでも同じですが、Ctrl+Aを押して注意を引きます。

ウィンドウを閉じるには、Ctrl+Bを押し、すぐにXを押します。ステータスバーが琥珀色になります。次に、ウィンドウを終了することを確認するように求められます。

ウィンドウを閉じるにはYを、気が変わった場合はNを押します。その後、Enterを押す必要はありません。YまたはNは選択を登録するのに十分です。

Yを押すと、ウィンドウが閉じます。これがこのセッションの唯一のウィンドウであるため、セッションは終了します。

tmuxセッションは閉じられ、tmuxを起動したコマンドラインに戻ります。ターミナルウィンドウに「[終了しました]」と表示されます。

これは当たり前のことのように思えるかもしれませんが、セッションを閉じて、切り離して実行したままにしていないことを確認するための確認です。セッションの切り離しについては以下で説明します。

名前付きtmuxセッションの開始

定期的に複数のtmuxセッションを開始する場合、それぞれに意味のある名前を付ける機能をすぐに理解できるでしょう。screenでもセッションに名前を付けることはできますが、セッションウィンドウにはどこにも表示されません。

セッション名でtmuxを開始するには、new(新しいセッション)コマンドと-s(セッション名)オプションを使用します。セッションを「geek-1」と名付けるので、次のように入力します。

tmux new -s geek-1

tmuxセッションが読み込まれると、「geek-1」がステータスバーの最初のエントリとして左端に表示されます。

ウィンドウの追加

現在のセッションに新しいウィンドウを作成するには、Ctrl+Bを押してからCを押します。現在のセッションに空白のターミナルウィンドウが表示されます。この新しいウィンドウで何かを実行するので、dmesgコマンドを-w(フォロー)オプションで開始します。

dmesg -w

これで、セッションに2つのウィンドウがあります。1つはtop、もう1つはdmesgを実行しています。ただし、一度に1つしか表示できません(詳細については後で説明します)。

ステータスバーの左側を見てください。「geek-1」tmuxセッションにまだいます。ウィンドウ0ではtopが実行されており、ウィンドウ1ではdmesgが実行されています。dmesgの後のアスタリスク(*)は、どのウィンドウが表示されているかを示しています。

ウィンドウ間を移動するには、Ctrl+Bを押してから次のいずれかのキーを押します。

  • N次のウィンドウを表示します。
  • P:前のウィンドウを表示します。
  • 0~9:0~9の番号の付いたウィンドウを表示します。

リストからウィンドウを選択することもできます。Ctrl+Bを押してからWを押すと、ウィンドウのリストが表示されます。

アンバー色のハイライトバーを移動するには、上矢印、下矢印、ホーム、エンドを押します。ディスプレイの下部には、ハイライトされたウィンドウの内容のプレビューが表示されます。

Enterキーを押してハイライトされたウィンドウに移動するか、Escキーを押してウィンドウリストを終了します。

セッションの切り離しと接続

Ctrl+Bを押してからDを押すと、セッションが切り離されます。バックグラウンドで実行され続けますが、表示したり操作したりすることはできません。

セッションでtopを開始したので、実行中のプロセスをデモンストレーションできます。次に、Ctrl+Bを押してからDを押します。セッションは消えてバックグラウンドセッションになります。

元のターミナルウィンドウに戻ります。tmuxからのメッセージが表示され、セッションが切り離されたことが通知されます。また、セッションに付けた名前も思い出させてくれます。これは、バックグラウンドセッションに接続して、対話型セッションに戻すために使用する名前なので、便利です。

切り離されたセッションを接続するには、-t(ターゲットセッション)オプションを指定して、わかりやすいattach-sessionコマンドを使用します。また、呼び出すセッションの名前も指定します。

次のように入力します。

tmux attach-session -t geek-1

セッションが戻ってきて、再び表示可能な対話型セッションになります。

セッションを切り離す前に開始した長時間実行または継続的なプロセスは、セッションを接続するとバックグラウンドで実行され続けます(完了していない場合)。

screenでも同じことができますが、直感的ではありません。

複数のセッションの処理

別のターミナルウィンドウを開き、「geek-2」という新しいtmuxセッションを開始しましょう。

tmux new -s geek-2

そのセッションで、dmesgを開始します。

dmesg -w

これで、元の「geek-1」tmuxセッションと、「geek-2」という新しいセッションができました。

ステータスバーには、このセッションが「geek-2」と呼ばれ、dmesgを実行しているウィンドウが1つあることが示されています。

Ctrl+Bを押してからDを押すと、そのセッションが切り離されます。

「geek-1」tmuxセッションに戻り、Ctrl+Bを押してからSを押してtmuxセッションのリストを表示します。

明確にするために、これはセッションのリストです。以前見た同じような表示は、1つのセッションのウィンドウのリストでした。

上矢印、下矢印、ホーム、エンドを押して、アンバー色のハイライトバーを移動できます。下部セクションには、ハイライトされたセッションの内容のプレビューが表示されます。

右矢印を押すと、ハイライトされたセッションのウィンドウが表示されます。

Enterキーを押して、ハイライトされたセッションまたはウィンドウに移動するか、Escキーを押してセッションを変更せずにセッションリストを終了します。新しいセッションを選択すると、現在のセッションは切り離され、選択したセッションが接続されます。

これを行う前に「geek-2」セッションを切り離しました。ただし、元のターミナルウィンドウにまだ接続されているセッションでこれを行うことができます。そうすると、画面の変更は両方のtmuxセッションに同時に表示されます。

screenコマンドでも、同様のコマンドセットを介してこれを行うことができます。

ウィンドウペインの操作

Ctrl+Bを押してから二重引用符(「」)を押すと、ウィンドウが水平に2つのペインに分割されます。

これは現在のウィンドウにのみ影響します。セッション内の他のウィンドウは変更されません。最上部のペインでtmux lsコマンドを使用して、このセッションのウィンドウを一覧表示しました。2つあり、ステータスラインにはウィンドウ1にいることが示されています。Ctrl+Bを押してから0(ゼロ)を押してウィンドウ0に移動すると、そのままになっていることがわかります。

これらは1つのウィンドウの2つのビューではなく、2つの独立したコマンドラインです。これらは明確で独立したシェルです。各ペインで別々のコマンドを実行することで、これを示すことができます。

次のように入力します。

uname -als -hlあるペインから別のペインに移動するには、Ctrl+Bを押してから上矢印、下矢印、左矢印、または右矢印のいずれかを押します。

Ctrl+Bを押してからパーセント記号(%)を押すと、現在のペインが垂直に分割されます。

Ctrl+Bを押してからQを押して、tmuxで各ペインの番号を短時間点滅させます。

これらの番号は、tmuxからのプロンプトやメッセージで使用されます。Ctrl+Bを押してからXを押して、現在のペインを閉じます。ステータスバーがアンバー色に変わり、そのペイン番号を閉じたいことを確認するように求められます。ペインを削除するにはYを、そのままにするにはNを押します。

Yを押すと、ペインが削除されます。

screenコマンドにもペインがありますが、繰り返しますが、それらは使用するのが直感的ではありません。screenについて私たちを悩ませるのは、ペインのあるセッションを切り離すと、そのセッションを再接続するときにペインが消えてしまうことです。これはすぐに古くなります。

Ctrl+Bチートシート

以下に、tmuxで使用できるさまざまなコマンドのチートシートを記載しました。

セッションコマンド

  • S:セッションを一覧表示します。
  • $:現在のセッションの名前を変更します。
  • D:現在のセッションを切り離します。
  • Ctrl+B、その後?:tmuxでヘルプページを表示します。

ウィンドウコマンド

  • C:新しいウィンドウを作成します。
  • ,:現在のウィンドウの名前を変更します。
  • W:ウィンドウを一覧表示します。
  • N:次のウィンドウに移動します。
  • P:前のウィンドウに移動します。
  • 0~9:指定したウィンドウ番号に移動します。

ペインコマンド

  • %:水平分割を作成します。
  • ":垂直分割を作成します。
  • Hまたは左矢印:左側のペインに移動します。
  • Iまたは右矢印:右側のペインに移動します。
  • Jまたは下矢印:下のペインに移動します。
  • Kまたは上矢印:上のペインに移動します。
  • Q: ペイン番号を短時間表示します。
  • O:ペインを順番に移動します。押すたびに次のペインに移動し、すべてをループするまで繰り返します。
  • }:現在のペインの位置と次のペインの位置を入れ替えます。
  • {:現在のペインの位置と前のペインの位置を入れ替えます。
  • X:現在のペインを閉じます。

比較

機能の点では、screentmuxはどちらも同様のパフォーマンスを発揮し、同じ主要機能を提供します。その機能にアクセスする方法が大きく異なります。tmuxは、さまざまな機能にアクセスするためのより洗練された、より快適な方法を提供します。ただし、違いはそれだけではありません。

tmuxでセッションやウィンドウの名前を変更できる機能は優れており、セッションを再接続したときにペインが保持されるという事実はゲームチェンジャーです。

一方、screenはセッションを切り離して再接続するとペインが完全に失われます。これは、そもそも切り離しを避けるのに十分なほどイライラします。

tmuxには、信じられないほど柔軟なスクリプティング機能など、他にも多くの機能があります。ぜひチェックしてみてください。