screenまたはGNU screenはターミナルマルチプレクサです。 これを使用すると、コンソールベースのアプリケーション、対話型コマンドシェル、コースベースのアプリケーションなどをいくつでも実行できます。 screen を使用すると、ターミナルを誤って閉じた後でもプログラムを実行し続けることができますし、ログアウトした後でも、どこにいても再開することができます。
実際の例としては、ssh セッションを持つリモートの Linux マシンでタスクを実行する場合があります。 この ssh セッションが終了してしまい、作業ができなくなってしまったことを何度も経験しています。
screen の仕組み
screen が呼び出されると、シェル (または指定されたコマンド) が表示された 1 つのウィンドウが作成され、その後は通常どおりプログラムを使用できるように邪魔をしません。
スクリーンは、それぞれがシェルや他のプログラムを含む1つ以上のウィンドウからなるセッションを管理します。 さらに、スクリーンは端末のディスプレイを複数の領域に分割し、それぞれにウィンドウの内容を表示することができます。 すべてのウィンドウは、それぞれのプログラムを完全に独立して実行します。 ウィンドウが表示されていなくても、スクリーンセッション全体がユーザーの端末から切り離されても、プログラムは実行され続けます。
では、このユーティリティを Linux で使用する方法を確認しましょう。
1) 新しいウィンドウを起動する
もし screen コマンドがまだシステムに存在していない場合は、以下のコマンドでインストールできます。
Debianの場合
# apt-get install screen
Centosの場合
# yum install screen
コマンドプロンプトでscreenと入力するだけで、screenを起動することができます。
# screen
画面の中に新しいウィンドウを立ち上げ、そのウィンドウにaloftなどの名前をつけることもできます。 その名前で識別されたセッションが作成されます。
# screen -S aloft
通常の CLI 環境と同じようにすべての作業を行うことができます。
2) すべての画面プロセスを一覧表示する
画面内で新しいウィンドウを開始できるので、バックグラウンドで実行されているものを含め、現在開かれている画面を表示することができます。
# screen -lsThere is a screen on: 10437.aloft (Attached)1 Socket in /var/run/screen/S-root.
3) スクリーンの主なコマンド
いくつかのコマンドを使用して、スクリーンを操作することができます。 ここでは、より便利な主なコマンドを紹介します。
-
Ctrl-a
c
: 新しいウィンドウを作成する -
Ctrl-a
w
: 新しいウィンドウを作成する。 現在開いているすべてのウィンドウのリストを表示する -
Ctrl-a
A
Ctrl-a
w
で開いたウィンドウの一覧を表示したときに表示されます。 -
Ctrl-a
n
: 次のウィンドウに移動 -
Ctrl-a
p
: 前のウィンドウに戻る -
Ctrl-a
に続けてCtrl-aを押すと、最後に使用したウィンドウに戻ります。 -
Ctrl-a
に続けて 0 から X までの数字を入力すると、X 番目のウィンドウに移動します。 -
Ctrl-a
"
を入力すると、移動するウィンドウを選択します。 -
Ctrl-a
k
:現在のウィンドウを閉じる(キル) -
Ctrl-a
S
Ctrl-a
Tab
を行います。 -
Ctrl-a
|
: 現在のウィンドウを垂直に分割する -
Ctrl-a
d
: -
Ctrl-a
r
を使用して、スクリーンセッションを停止せずに切り離します。 -
Ctrl-a
: コピーしたテキストを貼り付ける
4) 画面のパラメータを表示する
画面のすべてのパラメータを一覧表示することができます。 これを行うには、Ctrl-a
?
という文字を入力します。
5) セッションの切り離し
screenコマンドの最大の利点は、スクリーンセッションを切り離すことができることです。 オフィスの 1 台のコンピューターでスクリーン セッションを開始し、ローカル端末からセッションを切り離し、帰宅してオフィスのコンピューターにリモートでログインし、自宅のコンピューターの端末にスクリーン セッションを再接続することができます。 その間、オフィスのコンピュータ上のすべてのジョブは継続して実行されています。
この機能を理解するために、例を挙げてみましょう。
ここで、Ctrl-a
d
で画面を切り離してみます。
# screen -lsThere is a screen on: 12449.win (Detached)1 Socket in /var/run/screen/S-root.
screen -d
の後にスクリーンIDまたはその名前を指定してスクリーンを切り離すことができます。 これは、現在のコンソールでプロセスが進行中の場合、セッションを切り離すために別のウィンドウやコンソールを開く必要があることを意味します。
# screen -lsThere is a screen on: 13686.win200 (Attached)1 Socket in /var/run/screen/S-root.
新しいターミナルで以下のコマンドを入力してください。
# screen -d 13686
または名前を使用することもできます
# screen -d win200
画面が切り離されたことを示す以下のような出力が得られます
6) セッションを再接続する
画面を切り離した後、コマンドで再接続することができます。 通常、スクリーン セッションはまだ動作しているので、すべてのプロセスが停止することはありません。 セッションを再接続する前に、上記のようにセッションをリストアップし、再接続するセッションを選択する必要があります。
# screen -r 13686
または、
# screen -r win200
セッションを再接続すると、ウィンドウにプロセスの終了が表示され、完了していることがわかります。
7) 新しい対話型シェルを作成する
やるべき仕事があり、仕事を失いたくない場合は、新しい対話型シェルを作成することができます。 1 つのターミナル ウィンドウで、いくつかの対話型シェル (0 から X までの番号が付いている) を簡単に開くことができます。
これを行うには、既存のウィンドウの中に Ctrl-a
c
で新しいウィンドウを作成する必要があります。
スクリーンショットの上部にスクリーン 3 が表示されていますが、これは 3 番目のスクリーンにいることを示しています。
8) 画面の切り替え
複数の画面を開いている場合、各ウィンドウを切り替えるには、Control-a
space
Control-a
1
を押します。
スクリーンショットの上と下を見ると、最初の画面にいることがわかります。
9) ウィンドウを分割する
作業の全体像を把握するには、複数のウィンドウを持つのではなく、ウィンドウを分割する必要があります。 Ctrl-a
S
|
Ctrl-a
Tab
を使用します。
カーソルが下のウィンドウにあるとき、新しいウィンドウを作成したり(Ctrl-a
c
Ctrl-a
に続けて数字を入力)することができます。
分割されたウィンドウを閉じるには、Ctrl-a
X
を使用します(大文字であることに注意)。
10) 切断された ssh セッションに再接続する
最初にログインしたとき、
- run screen でスクリーンセッションを開始します。 別のシェルが表示されるので、その中でコマンドを実行します。
# screen -S remote_session
- 終了したら、スクリーンセッションを切り離して、ログアウトします。
- 最初にすべてのスクリーンセッションをリストアップすることができます
- スクリーンセッションに再接続して、作業を続けます。
# screen -d -r remote_ression
screenコマンドは、現在進行中のプロセスを失うことなく切断後に作業を続けることができるため、sshセッションで最も使用されています。
11>screen ウィンドウを上にスクロールする
screen がリモート プログラムの管理を引き継ぐため、screen の実行中はターミナル エミュレーターのスクロール機能を使用できません。 スクロールバック バッファにアクセスするには、Screen コマンドを使用する必要があります。
-
Ctrl-a
escape
-
Up
Down
PgUp
PgDn
のキーを押すと、前の出力をスクロールすることができます。
スクリーンショットのどこに私のカーソルがあるかがわかります。
12) 各画面セッションの所有者を見る
screen -ls
screen -list
コマンドは、root であっても自分の画面セッションしか表示しません。
どのユーザーがどのスクリーン セッションを開始したかを確認したい場合は、/var/run/screen/
の各ユーザー ディレクトリを参照してください。) 1つのアカウントでスクリーン セッションを共有する
離れた場所から同じアカウントにログインしている2人の人がいるとします。 彼らは簡単にスクリーン セッションを共有することができます (つまり、一方が入力したものを他方が見たり、逆に入力したものを他方が見たりすることができます)。 そのためには、
- 名前の付いたスクリーンセッションを作成します。
# screen -d -m -S share_session
- ターミナル ウィンドウでスクリーン セッションにアタッチします
# screen -x share_session
- もう一人の人 (同じアカウントにログインしている) にもスクリーン セッションを共有してもらいます。 (同じアカウントにログインしている)相手にもスクリーン セッションに接続してもらいます
# screen -x share_session
あなたは、まったく同じ出力を他の場所で表示させることができます。 自分の端末に表示されるすべてのものは、他のユーザーの端末にも表示されます。) スクリーン セッションのロック
通常のセッション ユーザーをロックすることなく、スクリーン セッションをロックすることができます。 つまり、コンピュータから離れても、誰にも不正な操作をされないようにすることができるのです。 そのためには、Ctrl-a
x
(小文字であることに注意)というコマンドを使用します。
15) スクリーンセッションを終了する
終了してスクリーンセッションを終了したい場合は、Ctrl-a
k
というコマンドを使用します。 確認のためのプロンプトが表示されます。
exitコマンドを使用することもできます。
結論
screen ユーティリティは、ウィンドウのアクティビティまたは非アクティビティを監視することができます。 これは、大きなファイルをダウンロードしているとき、コンパイルしているとき、または出力を待っているときに最適です。 その際、必要であれば、screen コマンドを使用して、コンピュータから何らかのプロセスを開始し、終了したら切り離すこともできます。