\r\n\r\n
linuxtmuxコマンドはscreenに似たターミナルマルチプレクサです。その支持者は多く、声も大きいので、この2つを比較することにしました。tmuxは本当に優れているのか、それとも自分の知っているものが好きなだけなのか?
tmuxとGNU screenコマンドはどちらも端末のマルチプレクサです。これらは、1つのターミナルウィンドウの中に複数のウィンドウを持ち、それらの間をジャンプして行き来することを可能にします。ウィンドウは複数のペインに分けることができ、それぞれのペインで独立したコマンドラインを提供します。
また、セッションを切り離すと、バックグラウンドで動作するヘッドレスの存在となり、それを起動したターミナルウィンドウを閉じることも可能です。準備ができたら、新しいターミナルウィンドウを開き、まだ実行中のセッションに再接続することができます。また、この操作はSSH接続でも可能です。
あるコンピューターでセッションをデタッチして帰宅し、その後リモートコンピューターにログオンすることができます。再接続後、バックグラウンドセッションに再接続して、再びインタラクティブに使用することができます。
screenコマンドは端末のマルチプレクサでもあり、多くのオプションが用意されています。その真実は、詳細な記事をご覧ください。
今回はtmuxを取り上げますが、次にscreenが同じ機能をどのように扱っているかを説明します。
画面については、1つだけ気になる点があります。後日、到着してからtmuxの方が良いのかどうか、話し合ってみます。
関連:Linuxのscreenコマンドの使い方
screenは一般的なLinuxディストリビューションでは通常デフォルトでインストールされますが、tmuxはそうではありません。Ubuntuにtmuxをインストールするには、次のコマンドを入力します。
sudo apt-get install tmuxManjaro では、pacman を使って。
sudo pacman -Sy tmuxFedora 31では、tmuxはすでにインストールされています。
tmuxを起動するには、次のように入力し、Enterキーを押すだけです。
tmuxtmux セッションでは、ターミナルウィンドウにステータスバーが表示されます。
ステータスバーの右側には、ホスト名、時刻、日付が表示されます。左側には、次のようなセッション関連の情報が表示されます。
スクリーンコマンドではステータスバーが表示されないので、何が起こっているのかを知るためには、ブラインドで自分の知恵を頼りに飛行しなければならず、少し練習が必要です。
アップサイドは、ターミナルウィンドウの不動産ラインを失わないことです。もちろん、ターミナル・マルチプレクサを使用する価値があるように、通常はターミナル・ウィンドウを拡張します。この場合、ステータスバーの1行を失うことは大きな問題ではありません。端末のウィンドウの画像は、情報を見ることができるように、デフォルトの大きさのままにしています。
コマンドはキーストロークによってtmuxに提供され、そのキーストロークは2つの部分から構成されています。まず、Ctrl+Bを押して、tmuxの注意を引きます。そして、次のキーをすばやく押すと、コマンドがtmuxに送られます。コマンドは、文字、数字、句読点、矢印キーを押すことで送信されます。
Ctrl+Aを押して注意を引く以外は、画面上と同じです。
ウィンドウを閉じるには、Ctrl+Bキーを押した後、素早くXキーを押します。ステータスバーが琥珀色に変わり、ウィンドウを閉じるかどうかの確認画面が表示されます。
Yを押すとウィンドウが閉じ、気が変わったらNを押します。その後、Enterキーを押す必要はなく、YまたはNで選択内容を登録できます。
Yを押すと、このセッションで唯一のウィンドウであるため、ウィンドウが閉じられ、セッションが終了されます。
tmuxのセッションが終了し、tmuxを起動したコマンドラインに戻ります。ターミナルウィンドウに「[exit]」と表示されます。
これは、当たり前のことを言うようですが、セッションを終了したことを確認するもので、切り離したまま実行しているわけではありません。デタッチャブルセッションについては後述します。
複数のtmuxセッションを定期的に起動する場合、各セッションに意味のある名前を付ける機能はすぐに理解できると思います。また、画面上でセッションに名前を付けることもできますが、セッションウィンドウのどこにも表示されません。
セッション名を指定してtmuxを起動するには、new(新しいセッション)コマンドと-s(セッション名)オプションを使用します。私たちのセッションは「geek-1」という名前になるので、次のように入力します。
tmux new -s geek-1tmuxセッションをロードすると、ステータスバーの左端に最初のエントリーとして「geek-1」が表示されます。
現在のセッションに新しいウィンドウを作成するには、Ctrl+Bを押した後にCを押すと、空のターミナルウィンドウが表示されます。そこで、この新しいウィンドウでいくつかのプログラムを実行するので、-w (follow) オプションを使って dmesg コマンドを起動してみましょう:.
dmesg -wセッションには 2 つのウィンドウがあり、1 つは top が動作し、もう 1 つは dmesg が動作しています。 しかし、一度に見ることができるのは 1 つだけです。
左のステータスバーを確認します。まだ「geek-1」のtmuxのセッション中です。ウィンドウ0ではtopが実行されており、ウィンドウ1ではdmesgが実行されている。dmesgの後のアスタリスク(*)は、どちらのウィンドウが表示されているかを示している。
ウィンドウを切り替えるには、Ctrl+Bを押した後、次のいずれかのキーを押します。
Windowsは一覧から選択することもできます。Ctrl+Bを押してからWを押すと、Windowsの一覧が表示されます。
琥珀色のハイライトバーを移動するには、上または下矢印、ホームまたはエンドを押します。ディスプレイの下部には、ハイライトされたウィンドウの内容のプレビューが表示されます。
Enterキーを押すとハイライトされたウィンドウに移動し、Escキーを押すと切り替えずにウィンドウの一覧から離れます。
Ctrl+Bを押した後にDを押すと、セッションが分離されます。セッションはバックグラウンドで実行され続けますが、あなたはそれを見ることも操作することもできません。
すでにセッションで開始しているので、実行中のプロセスをデモしています。その後、Ctrl+Bを押しながらDを押すと、セッションが消え、バックグラウンドセッションになります。
元のターミナルウィンドウに戻ります。tmuxからのメッセージは、セッションが分離されたことを伝えている。これは、セッションにつけた名前も思い起こさせます。これは、バックグラウンドセッションにアタッチして、インタラクティブセッションに戻すときに使う方法なので、便利です。
切り離されたセッションをアタッチするには、自明なattach sessionコマンドに-t(ターゲット・セッション)オプションを付けて使用することにします。また、呼び出したいセッションの名称を記入します。
以下のように入力します。
tmux attach-session -t geek-1私たちのセッションは、インタラクティブなセッションとして戻り、再び見えるようになります。
セッションをアタッチする際、分割セッションの前に開始された長時間稼働プロセスや連続プロセスは、(それらが完了しない限り)バックグラウンドで実行されたままとなります。
画面ではできるのですが、直感的にわからないのです。
別のターミナルウィンドウを開き、「geek-2」という名前で新しいtmuxセッションを開始しましょう。
tmux new -s geek-2そのセッションで、dmesgを開始します。
dmesg -wこれで、元の "geek-1" tmux セッションと、新しい "geek-2" というセッションができました。
ステータスバーには、このセッションが「geek-2」と呼ばれ、dmesgを実行するためのウィンドウがあることが表示されています。
Ctrl+Bを押した後にDを押すと、セッションを切り離すことができます。
geek-1」のtmuxセッションに戻り、Ctrl+B、Sを押してtmuxセッションのリストを表示します。
はっきり言って、これはセッションのリストです。先ほど見た同様の表示は、1つのセッションのウィンドウのリストでした。
上下の矢印、Home、Endを押すと、アンバー色のハイライトバーを移動できます。下段には、ハイライトされたセッションのコンテンツのプレビューが表示されます。
右矢印を押すと、ハイライトされたセッションのウィンドウが表示されます。
Enterキーを押すとハイライトされたセッションまたはウィンドウに移動し、Escキーを押すとセッションを変更せずにセッションリストを終了します。新しいセッションを選択すると、現在のセッションが切り離され、選択したセッションが装着されます。
前回は、「Geek 2」のセッションを分離しました。しかし、元のターミナルウィンドウに接続されたままのセッションを使用して、これを行うことができます。このとき、画面の変更は両方のtmuxセッションに同時に表示されます。
screenコマンドも同様のコマンド群で行えます。
Ctrl+Bを押した後にダブルクォート("")を押すと、ウィンドウが水平に分割され、2つのペインになります。
これは、現在のウィンドウにのみ影響し、セッション内の他のウィンドウは変更されません。トップペインにあるtmuxlsコマンドを使って、このセッションのウィンドウを一覧表示しています。2つあり、ステータスラインは1つ目のウィンドウにいることを示しています。Ctrl+Bでウィンドウ0にジャンプして、0(ゼロ)を押せば、出たときと同じように表示されます。
これらは2つの別々のコマンドラインであり、1つのウィンドウに2つのビューがあるのではなく、別々のシェルです。
以下のように入力します。
対応するカーネルバージョンの検索
タイプ ls-hl
あるペインから別のペインに移動するには、Ctrl+Bキーを押しながら、上下左右の矢印を押してください。
Ctrl+Bを押した後、パーセント記号(%)を押すと、現在のペインが縦に分割されます。
Ctrl+B、Qの順で押すと、tmuxが各ペインの番号を短く点滅させます。
これらの番号は、tmuxからのプロンプトやメッセージで使用されます。Ctrl+B、Xの順で押して、現在のペインを閉じます。ステータスバーがアンバー色に変わり、ペイン番号を閉じるかどうかの確認画面が表示されます。Yを押すとペインが削除され、Nを押すとペインがそのまま残ります。
Yキーが押されると、ペインが削除されます。
screenコマンドにもペインがありますが、直感的に使いこなせません。ペインでセッションを区切ると、そのセッションに再接続したときにペインが消えてしまうので困ります。これはすぐに飽きる。
以下のtmuxに各コマンドのメモ一覧を掲載しました。
機能面では、screenとtmuxは似ていて、同じような主機能を備えています。これらの機能へのアクセス方法は明らかに異なっており、tmuxはよりスムーズで快適な方法で様々な機能を実装しています。しかし、違いはこれだけではありません。
tmuxでセッションやウィンドウの名前を変更できるのは非常にクリーンですし、セッションを再接続してもペインが保持されるのは画期的なことです。
一方、セッションを切り離し、再接続すると、画面は完全にペインを失います。これは、そもそも切り離しを避けるようになるほど厄介です。
tmuxは、信じられないほど柔軟なスクリプト機能をはじめ、他にも多くの機能を備えていますので、ぜひご自身でお確かめください。