ssh接続が切れても作業環境を保てたり、複数画面を切り替えられたり、画面上の文字列をコピペできたりと、かなり便利なscreenコマンドですが、少し使わないでいると使い方をすぐに忘れてしまうので、覚え書き。

まずは最低限の設定

screenへ何かコマンドを送りたいとき Ctrl+aを使うのがデフォルトなのですが、Ctrl+aはコマンドラインでは行の先頭にカーソルを移動させる命令でよく使うので、Ctrl+oに変更してみます。

~/.screenrc以下を記述するだけです。

escape "^Oo"

さらに、screenで複数の画面を使っていると、今使っている画面が何番かわからなくなるので、コマンドのプロンプトに画面の番号を表示するように変更。~/.bashrcに以下を追記。screenコマンドを立ち上げると、$TERMにscreenがセットされるようです。

if [ "$TERM" == "screen" ]; then
    export PS1='\h:$WINDOW:\w\$ '
fi

さらに、Puttyのようなターミナルのタイトルバーに出てくる文字列も変えたい場合は~/.screenrcにこう書く。

defhstatus "$USER@^EH_^En ^Et -- ^EW"

”user名@host名_スクリーン番号 スクリーン名 -- 非アクティブなスクリーン名一覧”が表示されます。

以下のように設定を入れると、画面最終行にスクリーンのステータスが表示されます。

hardstatus string '%{gk}[%{G}%H%{g}][%= %{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}]%{=b C}[%m/%d/%y %C %A]%{W}'
hardstatus alwayslastline

screen操作基本

※以下からは、上記のCtrl+oへの変更はしておらず、screenへの命令はデフォルトのCtrl+aを使っていると仮定しています。

screenを立ち上げて、hogeと表示してみる。

$ screen
$ echo hoge
hoge

screenから一時的に抜ける (デタッチという)

Ctrl+a d を入力

現在のスクリーン一覧表示。上で一時的に抜けたscreenが表示されます。

$ screen -list
There is a screen on:
        10230.pts-0.pc01 (Detached)
1 Socket in /var/run/screen/S-mazn.

デタッチしているスクリーンに再度繋ぐ(アタッチという)。上で打ったecho hogeが残っているのが確認できます。

$ screen -r 10230
$ echo hoge
hoge
$

画面上の文字列をコピー

Ctrl+a ESC を入力してコピーモードにする

矢印キーでカーソルを自由に動かせるので、コピーしたい文字の先頭に移動しスペースを入力。ここでは echo hogeをコピーします。

$ echo hoge
hoge
$

さらに矢印キー(viのようにhjklキーでもOK)でコピーしたい文字列の最後に移動。(環境によってはこのように色が変わらないかもしれません

$ echo hoge
hoge
$

スペース入力でコピー完了。 その後、Ctrl+a ] で貼り付け。

$ echo hoge
hoge
$ echo hoge      ← echo hogeがコマンドラインに貼り付けられる

リターンを押せばもちろんecho hogeが実行されます。

仮想の新しい画面を作る。

Ctrl+a c を入力
$               ← 新しいシェルが立ち上がります

この時、最初に書いたようなコマンドプロンプトの設定をしていると、以下のように新しいウィンドウ番号になります。

mazn@localhost:1:~/ $

今立ち上がっている画面一覧を表示。

Ctrl+a w  を入力

ターミナルの一番下に以下のように立ち上げている画面一覧が表示されます。

0-$ notitle  1*$ notitle

screen立ち上げた直後の画面番号が0、Ctrl+a cで作った画面番号が1で、"*"がついているのが今見ている画面です。

試しにgehoと表示

$ echo geho
geho
$

画面0に戻る

Ctrl+a 0 を入力
$ echo hoge
hoge
$

画面1に戻る

Ctrl+a 1  と入力
$ echo geho
geho
$

直前の画面(ここでは画面0)に戻る

Ctrl+a Ctrl+a と入力
$ echo hoge
hoge
$

まだ、いろいろできますが、書くのが大変なので、後はコマンドと意味だけ紹介します。

次の番号の画面へ   Ctrl+a n または Ctrl+a Ctrl+n
前の番号の画面へ   Ctrl+a p または Ctrl+a Ctrl+p
現在の画面破棄      Ctrl+a Ctrl+k
bashにCtrl+a(カーソルを先頭に)を送る  Ctrl+a a
ウィンドウを分割する                   Ctrl+a S
分割したウィンドウを閉じる              Ctrl+a Q
分割したウィンドウで他のウィンドウへ移る Ctrl+a TAB

できることはこんなもんじゃないです。詳細はmanでもみてください。