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 -a
ls -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:現在のペインを閉じます。
比較
機能の点では、screen
とtmux
はどちらも同様のパフォーマンスを発揮し、同じ主要機能を提供します。その機能にアクセスする方法が大きく異なります。tmux
は、さまざまな機能にアクセスするためのより洗練された、より快適な方法を提供します。ただし、違いはそれだけではありません。
tmux
でセッションやウィンドウの名前を変更できる機能は優れており、セッションを再接続したときにペインが保持されるという事実はゲームチェンジャーです。
一方、screen
はセッションを切り離して再接続するとペインが完全に失われます。これは、そもそも切り離しを避けるのに十分なほどイライラします。
tmux
には、信じられないほど柔軟なスクリプティング機能など、他にも多くの機能があります。ぜひチェックしてみてください。
コメントする