目次

Unix :: コマンド / screen

コマンド説明
screen仮想端末マネージャ(virtual terminal manager)


screen とは

screen とは、ひとつの端末で複数の端末画面を持つことができるソフトウェアです。また、リモートホストに screen 経由でログインしている場合、回線が突然切れたり、ローカルマシンが落ちたとしても、リモートホストとのセッションは自動的にデタッチ状態に入るので、もう一度ログインすれば、アタッチして再度前回の続きから作業が可能になります。

使うメリット

  1. screen経由で自宅から行なっていた作業をデタッチして、会社に行ってアタッチして作業を続ける、などという使い方ができます
  2. すごく時間のかかる処理(例えば24時間かかる処理)を実行する際、処理を開始したことを確認してデタッチし、24時間後にアタッチして、作業の進捗や完了を確認することができます
  3. 場所をとらずに複数のコンソールを利用できます(画面を上下に2分割して、上画面ではhost1、下画面ではhost2を操作することができます)

デタッチとアタッチ

現在のプロセスを端末から切断する行為。ただしプロセス自体はリモートサーバ内で生存し続ける。

デタッチしたプロセスに再接続する行為。

使い方

自分がログインするサーバすべての ~/.bashrc や ~/.zshrc に以下のように書いておくとよい

screen -d -R

※. デタッチ、アタッチオプションについてはお好みで

デタッチとアタッチのオプション

オプション説明
-dセッションをデタッチする
-rセッションをアタッチする
-d -rセッションを再アタッチする。必要ならばまずデタッチする
-d -Rセッションを再アタッチする。必要ならばまずデタッチするか、あるいはセッションを生成する
-d -RRセッションを再アタッチする。必要ならばまずデタッチするか、あるいはセッションを生成する。複数のセッションをアタッチ可能な場合は、最初のセッションを使う
-D -rセッションを再アタッチする。必要ならばリモートのデタッチとログアウトを先に行う
-D -Rアタッチを今ここで行う。具体的には、セッションが走っている場合には再アタッチを行い、必要ならばまずリモートのデタッチとログアウトを行う。動作中のセッションがなければ生成してユーザに知らせる
-D -RRアタッチを今ここで行う。参考: ときどき “screen -list” を使って、自分のセッションの状態をチェックすると良い
-xRセッションを再アタッチする。あるいはセッションを生成する

具体的な操作

コマンド割当キーを「Ctrl-T」に変更しています(変更方法は事項参照)。デフォルトは「Ctrl-A」です

Ctrl-T Shift-S

画面を分割する

Ctrl-T TAB

画面を分割している時、画面をロータリー式で移動する

Ctrl-T C

カーソルがある画面内に新しい端末を作る

Ctrl-T P

カーソルがある画面内に他の画面をロータリー式で切り替える

Ctrl-T Shift-X

画面を分割している時、カーソルのある画面を削除する

Ctrl-T Shift-A

画面を分割している時、カーソルがある画面にウィンドウ名を付けることができます
コマンドを実行すると「Set window's title to:」と対話形式で聞かれるので好きな名前を付ける
付けた名前はステータスバーで確認できます


※. 上記のキーバインドは .screenrc でカスタマイズすることで変更可能です


シェル起動時に screen を自動起動する

下記を .zshrc (or .bashrc) 等に記述することで、すでに screen セッションがある場合はそのセッションにアタッチし、なければ新規セッションを作成します。
以前起動していたシェルと新しいシェルとで、ひとつのセッションを共有することができます。

screen -xR

ちなみに、下記のように書いてもOK。

if [ "$WINDOW" = '' ]; then
    screen -d -R
fi


(おまけ) ~/.screenrc に書くと便利

デフォルトのコマンドキー割当「Ctrl-A」を「Ctrl-T」に変更

escape ^Tt


ステータスバーの表示

hardstatus alwayslastline "[%Y-%m-%d(%D) %c:%s] %`%-w%{=b bw}%n %t%{-}%+w $STY"

↓こんな感じになる

[2006-10-02(Tue) 12:32:29] 0 sh  1 sh


分割ウィンドウのリサイズの設定

  1. Ctrl-t r でリサイズモードに入る
  2. j でサイズを拡げる
  3. k でサイズを縮める
bind r eval 'echo "Resize window"' 'command -c resize'
bind -c resize ^]  command
bind -c resize j eval 'resize +1' 'command -c resize'
bind -c resize k eval 'resize -1' 'command -c resize'