screenコマンド

 

こんにちはKUJIRAです。タイトルの通りscreenコマンドというものを知って便利だなぁと思ったので、使い方などをログっておきます。

  1. screenって?
  2. screenコマンドを実行してみる(プロセスを起動する)
  3. screenコマンドが入っていなかったら
  4. プロセスに名前をつけて起動する
  5. 新しい仮想端末を作る
  6. 仮想端末の一覧を表示する
  7. 仮想端末を切り替える
  8. 仮想端末を閉じる
  9. プロセスをデタッチする
  10. プロセスをアタッチする
  11. プロセスに名前を後付けする
  12. 仮想端末に名前をつける

 

screenって?

screenコマンドはlinuxのコマンドライン上で仮想のウィンドウを提供してくれるツールです。プロセス起動と同時に仮想端末を作成し、その上で作業を行います。そのため、作業途中に仮想端末から離れなくてはならなくなっても、デタッチすることで状態が保持され、再度アタッチすることにより元の作業場へと戻ってくることができます。

 

screenコマンドを実行してみる(プロセスを起動する)

screenコマンドは以下のように実行することで使用できます。

 

$ screen

 

このコマンドを実行すると今まで打っていたコマンドの実行結果やら何やらが全てなくなりプロンプトが綺麗になるかと思います。これでプロセスが起動し仮想端末が表示されたことになります。

 

screenコマンドが入っていなかったら

もしscreenコマンドがlinuxに入っていなかったら以下のようにインストールしましょう。

 

# yum -y install screen
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
base                                                                                                                                                                                                     | 3.7 kB     00:00     
extras                                                                                                                                                                                                   | 3.4 kB     00:00     
updates                                                                                                                                                                                                  | 3.4 kB     00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package screen.x86_64 0:4.0.3-18.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================================================================================================================================================================
 パッケージ                                           アーキテクチャ                                       バージョン                                                  リポジトリー                                        容量
================================================================================================================================================================================================================================
インストールしています:
 screen                                               x86_64                                               4.0.3-18.el6                                                base                                               494 k

トランザクションの要約
================================================================================================================================================================================================================================
インストール         1 パッケージ

総ダウンロード容量: 494 k
インストール済み容量: 795 k
パッケージをダウンロードしています:
screen-4.0.3-18.el6.x86_64.rpm                                                                                                                                                                           | 494 kB     00:00     
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : screen-4.0.3-18.el6.x86_64                                                                                                                                                                      1/1 
  Verifying               : screen-4.0.3-18.el6.x86_64                                                                                                                                                                      1/1 

インストール:
  screen.x86_64 0:4.0.3-18.el6                                                                                                                                                                                                  

完了しました!
# 

 

これで再度screenコマンドを打つと実行できると思います。

 

名前をつけてプロセスを起動する

「1.」のコマンドだとプロセスは起動されますが、そのプロセスに名前が付いておりません。別に付いていなくても死ぬほど困るわけではないのですが、あった方がどのプロセスでどんな作業をしていたのかというのが一目で分かるようになります。これが分かると後から説明するプロセスのデタッチとアタッチの時に役立ちます。

名前付きのプロセスを作成するには以下のようにコマンドを実行します。

 

$ screen -S [process name]

 

[process name]に入れた名前がプロセスの名前になります。

 

新しい仮想端末を作る

プロセスを立ち上げて作業を行っているともう一つウィンドウが欲しくなる時があります。しかし、プロンプトは基本GUIと違ってマルチウィンドウにはできません。なので別のプロンプトが欲しくなっても諦めてしまいがちですが、screenで起動したプロセス中でマルチウィンドウとまではいきませんが、タブ切り替えのように複数の仮想端末を移動したり新たな仮想端末を作って表示したりすることができます。

仮想端末の作成は以下のコマンドで行います。

 

Ctrl + a c

 

仮想端末の一覧を表示する

仮想端末の一覧を表示する方法は以下の2種類あります。

Ctrl + a w

 

このコマンドを実行するとvimで「:ls」を実施した時に表示されるバッファリストのように仮想端末の一覧が表示されます。そして現在作業している端末には「*」が仮想端末名につきます。

 

Ctrl + a "

 

このコマンドを実行すると、画面が全面的に変わり、仮想端末の一覧がリストとして表示されます。また、選択用カーソルも表示されておりカーソルを上下することにより選択をすることができます。選択した後Enterキーを入力すると選択した仮想端末に移動します。

 

仮想端末を切り替える

仮想端末の切り替えも一覧を表示するのと同じで方法が2種類あります。

 

Ctrl + a 仮想端末番号

 

このコマンドを実行すると指定した番号に紐付いている仮想端末に切り替わります。どの仮想端末にどの番号た付与されているかは、「Ctrl + a w」コマンドで仮想端末の一覧を表示して確認してください。

 

Ctrl + a " を実施し仮想端末の一覧画面になった状態でカーソルを移動させ「Enter」キーを入力する。

 

こちらは、先ほどの「Ctrl + a “」コマンドを実施した時に表示される仮想端末一覧の画面で行います。カーソルの移動方法はキーボードの上下ボタンか、vimのように「j」「k」ボタンで上下します。(「j」が下方向、「k」が上方向)

 

仮想端末を閉じる

仮想端末を閉じるには色々とありますが、一番簡単なのは仮想端末上でログアウトを行うことです。(exitコマンドやCtrl+dなどを実施し端末を終了する)

 

このやり方の場合、複数の仮想端末が一つのプロセスの上で立ち上がっている時、任意の端末が狙って落とすことができます。また、このやり方で最後の一つの仮想端末を閉じるとプロセスは終了します。

 

別の手段としては以下のコマンドを実施する方法があります。

 

 

このコマンドはプロセスを終了します。先ほどのやり方との違いは仮想端末がいくつ立ち上がっていようとプロセスごと落とすところにあります。そのため、普段はこのやり方は極力使わない方がいいでしょう。

 

プロセスをデタッチする

プロセスをデタッチします。

 

Ctrl + a d

 

このコマンド実施すると以下のように表示されプロセスから操作が切り離されます。
これは何をしているかというと、プロセスをバックグランドで実行しています。そのため仮想端末上で操作していた内容はこのプロセスが生きている限り残っております。
プログラムや、スクリプトなんかも止めるまで実施され続けます。

 

現在、バックグラウンドで実行されているプロセスの一覧を表示する

以下のコマンドを実施することでコマンドのプロセスIDやプロセスの名前などを見ることができます。

 

$ screen -ls
There is a screen on:
    22294.test  (Detached)
1 Socket in /var/run/screen/S-root.

$

 

結果の先頭についているのがプロセスIDです。このプロセスIDはこの後のアタッチでも使用します。

 

プロセスをアタッチする

デタッチがあるならアタッチもあります。プロセスをアタッチする場合は以下のコマンドを実行します。

 

$ screen -r [process id]

 

このコマンドを実行するとプロセスIDを元にバックグラウンドにいたプロセスの操作が戻ってきます。バックグラウンドで実施していたので、仮想端末上で継続的に行っていたものはそのままの継続し続けております。
この状況は言ってしまえばリモートデスクトップのようなものでPCが起動していたりプロセスが残っている限り保持されます。

 

プロセスに名前を後付けする

作成したプロセスに後から名前をつけることができます。

 

Ctrl + a :sessionname [session name]

 

[session name]には任意の文字が入ります。

 

仮想端末に名前をつける

仮想端末に名前をつけるときには以下のコマンドを実施し名前をつけます。

 

Ctrl + a A

 

このコマンドを実行すると現在の仮想端末名が表示されます。名前を変える場合などはBackspaceで消してから名前をつけましょう。

 

とまぁ、駆け足で書きましたが、これは便利なのでこれからたくさん使う機会があると思います。ちょっとでもこれで作業の効率化を図れればいいなと思っております。KUJIRAでした。