1. 概要

Linuxマシンで作業している場合、複数のターミナルウィンドウに分割されたタスクを追跡するのが難しい場合があります。 また、ウィンドウを閉じた後にターミナルセッションをバックアップするように設定するのにも時間がかかります。

このクイックチュートリアルでは、 GNU screen を使用してワークスペースの効率を最大化し、各ログインで継続的なセットアップを維持する方法を学習します。

2. インストール

screen は、ほとんどの標準的なLinuxディストリビューションにすでにインストールされているはずです。 そうでない場合は、パッケージインストーラーがそのトリックを実行します—例:

$ yum install screen

また

$ apt-get install screen

ソースコードをダウンロードしてインストールすることもできます。

3. セッションの構築

3.1. 画面を開始しています

まず、Linuxターミナルウィンドウでscreenセッションを開始します。

$ screen

デフォルトでは、セッションには1つのウィンドウがあり、screenコマンドを実行したディレクトリにコマンドプロンプトが表示されます。 画面のウィンドウは、インターネットブラウザのタブに似ています。セッションごとに1つ以上存在する可能性があります。

キーを押すと、画面ウィンドウの現在のリストを表示できます。

CTRL+a "

ターミナルに次のようなものが表示されます。

Num Name
  0 zsh

3.2. 画面ウィンドウの名前を変更する

作成後にscreenウィンドウに名前を付けることは、screenセッションを整理しておくための良い方法です。 複数のscreenウィンドウを作成するので、後で見つけやすくするために現在のウィンドウの名前を変更しましょう。

まず、次のようにヒットします。

CTRL+a SHIFT+a

次に、現在のウィンドウの名前を変更するためのプロンプトが表示されます。

Set window's title to: zsh

タイトルをlogsに変更し、Enterを押してみましょう。 次に、ウィンドウリストを表示しましょう。

CTRL+a "

これでカスタムタイトルができました:

Num Name
  0 logs

次に、セッションに2番目のウィンドウを追加します。

3.3. 複数のウィンドウ

screen セッションで2番目のウィンドウを作成するには、次を使用します。

CTRL+a c

ウィンドウリストを表示した後:

CTRL+a "

これで、セッションに2つのウィンドウが表示されます。

Num Name
  0 logs 
  1 zsh

次を使用して、この新しいウィンドウの名前を変更しましょう。

CTRL+a SHIFT+a

名前をtimerに変更できます。 今私たちのリストは次のとおりです。

Num Name 
  0 logs
  1 timer

の矢印、またはjkキーを使用して、ウィンドウリストのウィンドウを切り替えることができます。 Enter キーを押すと、選択したウィンドウがアクティブになります。

ウィンドウリストの代わりに、キーコマンドを使用してウィンドウをナビゲートできます。

それらを試してみましょう。 次のウィンドウに移動するには、次を使用します。

CTRL+a n

次を使用して、前のウィンドウに戻ることができます。

CTRL+a p

最後に、次を使用して、以前にアクティブだったウィンドウに切り替えることができます。

CTRL+a CTRL+a

3.4. 異なるウィンドウでの同時コマンドの実行

次に、同じ screen セッション内で、1つのウィンドウでコマンドを実行し、2番目のウィンドウでコマンドを実行する方法を見てみましょう。

まず、タイマーウィンドウに移動します。

CTRL+a "

現在のウィンドウに応じて、タイマーウィンドウに移動するには、またはの矢印が必要です。 Enterで選択します。

簡単なtimerコマンドを開始してファイルに書き込みましょう。

$ echo Starting at $(date) > counter.txt; \
  while true; do echo $(date); sleep 5; \
  done >> counter.txt

これにより、現在の日付と時刻が5秒ごとにファイルに出力されます。

ここで、以下を使用してセッションの他のウィンドウに移動するとします。

CTRL+a n

これで、 tail コマンドを開始して、タイミングスクリプトの出力を監視できます。

$ tail -f counter.txt

これにより、出力が開始されます。

Starting at Sun May 31 14:36:30 EDT 2020
Sun May 31 14:36:30 EDT 2020
Sun May 31 14:36:35 EDT 2020
Sun May 31 14:36:40 EDT 2020

そのため、1つのウィンドウでコードを実行し、2番目のウィンドウで出力を監視しています。

4. 画面セッションの再接続

前のセクションのscreenセッションを構築するのに少し手間がかかりました。 screen を使用すると、マシンに戻ったときにやり直す代わりに、セッションから切り離して後で再接続できます。 すべてのウィンドウ、セットアップ、およびコマンドは、そのままの状態で復元されます。

試してみましょう。 セッションを終了するには、ターミナルウィンドウを閉じるか、次を使用してセッションからデタッチすることができます。

CTRL+a d

私たちのセッションは、別のプロセスとしてアクティブなままです。 作業を続ける準備ができたら、コマンドプロンプトから前のscreenセッションに再接続できます。

$ screen -R

タイマーコードはまだ実行されているはずであり、tail出力はまだカチカチ音をたてているはずです。

余談ですが、セッションでウィンドウを閉じたい場合は、ウィンドウにexitと入力するだけです。

$ exit

これにより、現在のウィンドウが閉じ、前のウィンドウに変わります。

セッションの最後のウィンドウにexitと入力すると、screenセッションは次のメッセージで終了します。

[screen is terminating]

5. 画面セッションのカスタマイズ

ユーザーのホームディレクトリの.screenrcファイルにコマンドを配置することで、画面セッションをカスタマイズできます。 また、優先セッション設定を別のマシンに簡単に移植する方法でもあります。

簡単な例として、.screenrcファイルにいくつかのカスタマイズを追加しましょう。 ホームディレクトリで、最初に.screenrcファイルを開きます。 次に、次の行を追加できます。

screen -t logs
screen -t timer

ファイルを保存して画面を起動した後:

$ screen

ウィンドウリストを確認できます。

CTRL+a "

セッション内の2つの名前付きウィンドウが表示されます。

Num Name
  0 logs
  1 timer

.screenrcドキュメントにはさらに多くのオプションがあります。

6. 結論

この記事では、GNU screen を使用して、複数のウィンドウで再利用可能でカスタマイズ可能なLinuxターミナルセッションをセットアップする方法について説明しました。