Backup of UNIX/コマンド/端末エミュレータ/screen(No. 14)



Table of Contents

概要 Edit

screen コマンドで、ひとつの端末で複数の仮想端末を使用することができます。 簡単切り替えができて、ひとつのターミナルで全てができるようになります。

% screen 

として仮想端末を生成します。 設定ファイルは.screenrcの項を参照。 とりあえず Let's use SCREEN! を参照した方が良いかもしれません。。。 例えば、次のような状況で便利です。

これから一時間はかかりそうな処理(cp -auv でファイルのバックアップなど)をフォアグラウンドですでに実行してしまっていたとします(標準出力もするのでバックグラウンドで動作させたくはないとします)。そしてもちろんその他にも仕事があるとします。その場合今後の動作として、1つにはコンソール端末をクリックし、別の仮想端末を起動させ、起動した仮想端末をクリックし、作業に移る方法があると思います。また、1つには、Ctrl-z で一旦処理を中断、コマンドを打ち仮想端末を起動し、fg で処理を再開、起動した仮想端末をクリックし、作業に移る方法があると思います。 このような状況において、ログインするととりあえず screen を起動する癖がついてあれば、^A-c だけですぐに別の作業に移ることができるようになります。ちなみに、確認のため戻るには ^A-n または ^A-p を使用します。

その他全般的な利点をリストしておきます。

  • ひとつの端末で複数の仮想端末を使用することができる
  • 2ストロークで仮想端末の切り替え、増減ができる(上述)
  • 画面上をキーカーソル移動できる(通常は現在プロンプトだけ)
  • これにより、画面上の文字をマウスを使わずにコピーアンドペーストできる
  • screen の環境を丸々保存(detach 切断)、後日復帰(resume or attach 再接続)出来る。何かのファイルを開いたままの状態で保存しておいたりできるため、ただのシェルの history に比べ優れる。
  • 複数の端末でひとつの画面を操作できる(共有)。

最近は高機能な端末エミュレータが存在し、画面上をキーカーソル移動できたり、「タブ」という形で複数の仮想端末を生成、操作できたりもしますが、detach, attach の機能は screen ならではと言えるでしょう。 また、多くの場合、それらの高機能端末エミュレータはリッチなローカルホスト環境でのみ利用可能なため、サーバにリモートログインするような場合、リモートログイン先での screen 起動は必須となるでしょう。

操作 Edit

^ というのは Ctrl キーのことです。 デフォルトではすべて ^A で始まりますが、これは .screenrc で設定することも出来ます。

escape ^j^j

とすれば ^J になります。j ぐらいが打ちやすいと思うのですが、お好みで。

基本 Edit

基本的な操作としては以下のようなものがあります。

^A-c画面(端末)の新規生成
^A-p前の画面に移動
^A-n次の画面に移動
^A-^A直前作業していた画面に戻る
^A-[0-9](^A-数字)数字の画面に移動
^A-w画面の一覧の表示
^A-k現在の画面の起動プロセスを終了. exit でも可
^A-?簡略キーバインド一覧

コピー&ペースト Edit

^A-[コピーモード(画面上のキーカーソル移動)開始。viと同じキーマップでカーソル移動、Enter2回で指定範囲をコピー
^A-]コピーしたテキストを張り付け

画面分割 Edit

^A-S画面を分割する。^A-<TAB> で移動し、^A-c で画面を作成する
^A-Q現在の画面を残して、画面分割を閉じる
^A-<TAB>分割した次の画面へ移動する

デタッチとアタッチ Edit

^A-dデタッチ。screen セッション(全体)を保存し、screen を起動する前のシェルに戻る。screen -ls でデタッチ中のスクリーンを確認できる。screen 中で実行されたプロセスはバックグラウンドnohup 状態で動作し続ける。デタッチは nohup に比べプロセスを起動してしまった後でも nohup 状態にできるためありがたい。会津大学ではところ構わず nohup されると迷惑。
screen -r [pid]リジューム or アタッチ。デタッチした screen セッションの復帰。pid ことプロセス番号は screen -ls でも ps でも確認できるだろう。
screen -xマルチアタッチ。既に開かれているセッションにアタッチすることができる。ローカルホスト自身で screen セッションを開き、他のコンピュータからそのホストにアクセス、screen -x することで、同じ画面を2つのコンピュータで共有したりできる。

ログイン時自動起動 Edit

.bashrc もしくは .zshrc 用。シェル起動時(ログイン時)に screen を自動起動、もしくは自動アタッチする。

if [[ $TERM != 'screen' ]] ; then
    if [[ `screen -list | grep -v "No" | awk '$2 { print }' | wc -l` == 0 ]] ; then
        screen
    else
        screen -dr
    fi
fi

参照 Edit


xrea