Linux screenコマンド完全ガイド:ターミナルセッションを効果的に管理する方法

はじめに

システム管理者はSSHやtelnetを使用してLinuxサーバーにリモートログインし、システムバックアップやファイル転送など長時間を要するタスクを実行することが頻繁にあります。通常、これらの各タスクごとにリモートターミナルウィンドウを開く必要があります。これらのタスクは実行に長時間かかるため、ウィンドウを閉じたり接続を切断したりすると、実行中のプロセスが強制終了され、作業が中途半端な状態で終わってしまいます。

GNU Screenの概要

GNU ScreenはGNUプロジェクトによって開発された、コマンドラインターミナル切り替え用のフリーソフトウェアです。このツールを使用すると、ユーザーは複数のローカルまたはリモートのコマンドラインセッションに同時に接続し、それらの間を自由に切り替えることができます。

GNU Screenは、ウィンドウマネージャのコマンドラインインターフェース版と見なすことができます。複数のセッションを統一的に管理するインターフェースと関連機能を提供します。

主な機能

  • セッションの復元
    Screen自体が終了していない限り、その内部で実行されているセッションはすべて復元できます。この機能はリモートログインユーザーにとって特に便利です。ネットワーク接続が中断しても、既に開いているコマンドラインセッションへの制御を失うことはありません。ホストに再ログインしてscreen -rを実行するだけで、セッションの実行を再開できます。同様に、一時的に離れる際にはdetachコマンドを実行することで、内部のプログラムを正常に実行させたままScreenをサスペンド(バックグラウンドに移行)させることができます。これはグラフィカルインターフェースでのVNCに似ています。
  • マルチウィンドウ
    Screen環境では、すべてのセッションが独立して実行され、それぞれが独自の番号、入力、出力、およびウィンドウバッファを持ちます。ユーザーはショートカットキーを使用して異なるウィンドウ間を切り替え、各ウィンドウの入出力を自由にリダイレクトできます。Screenは、コピー&ペーストなどの基本的なテキスト操作を実装しており、スクロールバーのような機能も提供してウィンドウの履歴を表示できます。ウィンドウは分割や命名が可能で、バックグラウンドウィンドウのアクティビティを監視することもできます。
  • セッション共有
    Screenを使用すると、1人または複数のユーザーが異なる端末から同じセッションに複数回ログインし、セッションのすべての特性(完全に同じ出力を含む)を共有できます。また、ウィンドウアクセス権のメカニズムも提供しており、ウィンドウをパスワードで保護できます。

GNU Screenの公式サイト:http://www.gnu.org/software/screen/

基本構文

# screen [-AmRvx -ls -wipe][-d <ジョブ名>][-h <行数>][-r <ジョブ名>][-s ][-S <ジョブ名>]

パラメータ説明

-A
すべてのウィンドウを現在の端末サイズに調整します。
-d <ジョブ名>
指定したscreenジョブをデタッチ(オフライン)します。
-h <行数>
ウィンドウのバッファ行数を指定します。
-m
現在screenジョブを実行中であっても、新しいscreenジョブを強制的に作成します。
-r <ジョブ名>
デタッチされたscreenジョブを再開します。
-R
まずデタッチされたジョブの再開を試みます。見つからない場合は、新しいscreenジョブを作成します。
-s
新しいウィンドウを作成する際に実行するシェルを指定します。
-S <ジョブ名>
screenジョブの名前を指定します。
-v
バージョン情報を表示します。
-x
以前にデタッチされたscreenジョブを再開します。
-lsまたは--list
現在のすべてのscreenジョブを表示します。
-wipe
現在のすべてのscreenジョブをチェックし、使用不能なscreenジョブを削除します。

よく使用するscreenコマンド

  • screen -S sessionname → sessionnameという名前の新しいセッションを作成
  • screen -ls → 現在のすべてのセッションを一覧表示
  • screen -r sessionname → sessionnameというセッションに再接続
  • screen -d sessionname → リモートで特定のセッションをデタッチ
  • screen -d -r sessionname → 現在のセッションを終了し、sessionnameというセッションに再接続

各screenセッション内では、すべてのコマンドが ctrl+a(C-a) で始まります。

  • C-a ? → すべてのキーバインド情報を表示
  • C-a c → 新しいシェルを実行するウィンドウを作成し、そのウィンドウに切り替え
  • C-a n → Next、次のウィンドウに切り替え
  • C-a p → Previous、前のウィンドウに切り替え
  • C-a 0..9 → 0番目から9番目のウィンドウに切り替え
  • Ctrl+a [Space] → ウィンドウ0からウィンドウ9へ順番に切り替え
  • C-a C-a → 最近使用した2つのウィンドウ間で切り替え
  • C-a x → 現在のウィンドウをロック(ユーザーパスワードで解除)
  • C-a d → detach、現在のセッションから一時的に離脱。現在のscreenセッション(複数のウィンドウを含む可能性あり)をバックグラウンドで実行し、screenを起動する前の状態に戻ります。この時、screenセッション内の各ウィンドウで実行中のプロセス(フォアグラウンド/バックグラウンド問わず)は実行を継続し、ログアウトしても影響を受けません。
  • C-a z → 現在のセッションをバックグラウンドで実行し、シェルのfgコマンドで戻ることができます。
  • C-a w → すべてのウィンドウリストを表示
  • C-a t → Time、現在の時刻とシステムの負荷を表示
  • C-a k → kill window、現在のウィンドウを強制的に閉じる
  • C-a [ → コピーモードに入る。コピーモードではviのようにスクロール、検索、コピーが可能
    • C-b 後方へ、PageUp
    • C-f 前方へ、PageDown
    • H(大文字) High、カーソルを左上に移動
    • L Low、カーソルを左下に移動
    • 0 行頭に移動
    • $ 行末に移動
    • w 単語単位で前方に移動
    • b 単語単位で後方に移動
    • Space 1回目で選択範囲の始点、2回目で終点
    • Esc コピーモードを終了
  • C-a ] → Paste、コピーモードで選択した内容を貼り付け

screenの使用方法

screenのインストール

Red Hat Enterprise Linuxなどの主流のLinuxディストリビューションには通常screenユーティリティが付属していますが、含まれていない場合はGNU screenの公式サイトからダウンロードできます。

[user@server ~]# yum install screen
[user@server ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[user@server ~]#

新しいセッションの作成

インストール完了後、screenコマンドを直接実行すると起動できます。ただし、この方法で起動したscreenセッションには名前がないため、実際には各screenセッションに名前を付けて識別しやすくすることが推奨されます:

[user@server ~]# screen -S tanaka

screenが起動すると、最初のウィンドウ(ウィンドウNo. 0)が作成され、その中でシステムデフォルトのシェル(通常はbash)が開かれます。そのため、screenコマンドを入力するとすぐにコマンドプロンプトに戻り、何も起こらなかったように見えるかもしれませんが、実際にはすでにScreenの世界に入っています。もちろん、screenコマンドの後に好みのパラメータを追加して、指定したプログラムを直接開くこともできます。例えば:

[user@server ~]# screen vi report.txt

これにより、vi report.txtを実行する単一ウィンドウのセッションが作成され、viを終了するとそのウィンドウ/セッションも終了します。

ウィンドウとウィンドウ名の表示

複数のウィンドウを開いた後、ショートカットキーC-a wを使用して現在のすべてのウィンドウを一覧表示できます。テキスト端末を使用している場合、このリストは画面の左下に表示され、X環境の端末エミュレータを使用している場合は、タイトルバーに表示されます。ウィンドウリストは通常次のようになります:

0$ bash  1-$ bash  2*$ bash

この例では3つのウィンドウを開いており、*記号は現在ウィンドウ2にいることを示し、-記号は前回のウィンドウ切り替え時にウィンドウ1にいたことを示します。

Screenはデフォルトで、ウィンドウに番号とウィンドウで実行されているプログラム名の組み合わせを名前として付けます。上記の例では、すべてのウィンドウがデフォルト名です。ウィンドウを表示する方法を練習した後、各ウィンドウに異なる名前を付けて区別しやすくなることを望むかもしれません。ショートカットキーC-a Aを使用して現在のウィンドウの名前を変更できます。このショートカットキーを押すと、Screenは現在のウィンドウの新しい名前を入力するように促し、Enterキーで確定します。

セッションのデタッチと再開

screenウィンドウで実行中のプログラムを中断することなく、一時的にscreenセッションをデタッチ(切断)し、後でそのセッションに再接続(アタッチ)して各ウィンドウで実行中のプログラムを再制御できます。例えば、/tmp/report.txtファイルを編集するscreenウィンドウを開きます:

[user@server ~]# screen vi /tmp/report.txt

タグ: linux screen ターミナル セッション管理 コマンドライン

5月27日 18:43 投稿