screenを使ってCUIを使いこなす
ネットワークが不安定な所で使っていると途中で接続が切れてしまい、途中で作業が途切れてしまうことがある。実はscreenを使うと途中できれた場合でも切れる前の状態を復元できる。さらに一つのターミナルで画面分割したり、切り替えたりして複数のターミナルとして使ったり、何かと便利なので使い方をまとめておく。
ネットワークが不安定な所で使っていると途中で接続が切れてしまい、途中で作業が途切れてしまうことがある。実はこれを使うと途中できれた場合でも状態を復元できる。さらに一つのターミナルで画面分割したり、切り替えたりして複数のターミナルとして使ったり、何かと便利なので使い方をまとめておく。(長らくUnix系OSを使っていたけど、実はscreenコマンドをしらなかった。こんなに便利なら早く使ってればよかった・・・・)。CUI作業をする場合は必須。
設定
取り合えず必要最低限の設定をする。設定ファイルは$HOME/.screenrcで以下の設定をする。
escape ^z^z
とりあえずscreenの動作をするときのショートカットキーを変更する。[Ctrl-a]がデフォルトだけど[Ctrl-a|はカーソル移動とかでよく使うので[Ctrl-z]へ変更する。ただ変更したからといって端末で[Ctlr-z]が使えなくなるわけではない。端末に[Ctrl-z]を送る場合は二回[Ctrl-z]すれば大丈夫。
起動と操作
とりあえず起動してみる
% screen
バージョンとかいろいろ描いてある画面が起動する。でもって何かキーをおすと画面がクリアされシェルが立ち上がり通常の画面に移行する。起動してるのかよくわからない。取り合えず終了してみる。
[Ctrl+z \]
これで終了してよいか聞かれるので[y]で終了する。すると前の起動する前画面が表示される。たぶんこれで起動しているこが実感できると思う。
detach で幸せになる
これがメインの機能(だと思っている)
これのおかげで接続が切れて途中で終了したとしても、途中で用事ができてログアウトしなければならなくなったとしても途中から作業を再開でき る.screenをdetachするには、[Ctrl-z d] でできる。これは一見終了したように見えるけど実は違っていて、裏ではプロセスは走ったまま。もう一度その画面を開くには
% screen -r
これでdetachする直前の画面が表示されるはず。またscreenはauto detach機能がついている。これのおかげで接続が切れた場合自動的にdetachされることでもう一度接続した時にscreen -r で再開することができる。
複数screenコマンドがある場合は
%screen -ls
で一覧が表示される。これはscreenのプロセス番号。これを用いて
%screen -r プロセス番号
で任意のscreenに再接続できる。ちなみに
ps ax|grep SCREEN
でも同じ数字が見えると思う。screenは大文字なのに注意。
よく使うコマンド一覧
とりあえずこれだけ抑えておけばばっちり。ここでは、[Ctrl-z]の設定を行っている場合で記載してある。なにも設定していない場合は[Ctrl-z]を[Ctrl-a]と読み替えてください。
基本(しらないと使えない系)
[Ctrl-z d] |
detach スクリーンを切り離す (バックグラウンドに移す) |
[Ctrl-z ?] |
ヘルプ画面 |
これをしってれば途中で作業を中断したりできるようになる。最低限[Ctrl-z ?]は覚えておくべき。これ知ってればなんとかなる。
基本(複数シェルを切り替えて使いこなす系)
[Ctrl-z \] |
終了 (すべて終了) |
[Ctrl-z k] |
終了 (カレントのみ終了) |
[Ctrl-z c] | 新規ターミナルを起動 |
[Ctrl-z "] | 開いた画面一覧表示から選択して切り替え |
[Ctrl-z w] |
開いた画面一覧表示。番号と名前が表示される |
[Ctrl-z n] |
次の画面へ |
[Ctrl-z p] |
前の画面へ |
[Ctrl-z 数字] |
数字の画面へ切り替え。[Ctrl-z w]で番号がわかる。 |
画面切り替えは実質[Ctrl-z "]だけで事足りるけど一通りの切り替え方を書いておく。これで一つの端末上で複数の画面を切り替えて使ったりすることが自由にできるはず。
コピー、ペースト、画面移動系(これしってるとlessいらず??)
さらに便利なことにscreenコマンドは画面表示をさかのぼったり、コピーしたりをキーボードで実行できる。それ関係のコマンドを以下に記す。
[Ctrl-z [ ] |
コピーモード開始 |
[Ctrl-z ] ] |
ペースト |
以下コピーモード中 | |
[q] | コピーモード終了 |
[/] |
前検索 |
[?] |
後検索 |
[space] |
一回目範囲指定開始、二回目コピー |
[h] [j] [k] [l] |
左下上右 (vi キーバインド) |
画面分割系
emacsとかだと画面分割ができるがscreenをつかうとターミナル画面の分割ができる。これを使えばサーバーのログを表示しながら操作したり使いこなせばかなり便利なはず。
[Ctrl-z S] | 画面分割 |
[Ctrl-z tab] |
分割した次の画面へ |
[Ctrl-z Q] |
カレント画面を最大化(分割した他のウィンドウを閉じる) |
[Ctrl-z : resize +1] | 一行分サイズ拡大 |
[Ctrl-z : resize -1] | 一行分サイズ縮小 |
[Ctrl-z : resize 数字] | 指定行数のサイズへ変更 |
ただ画面のサイズ変更は面倒くさいので、ショートカットキーを設定ファイルに記載する。
bind r eval 'echo "Resize j:wide k:narrow"' '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'
これで[Ctrl+z r]でリサイズモードに移行する。ここでj,kでサイズ変更でき、他のキーで終了できる。
情報表示とかとか
[Ctrl-z i] | 文字コードとか画面サイズとか表示 |
[Ctrl-z t] |
時間を表示 |
[Ctrl-z m] |
モニタ番号とか表示 |
[Ctrl-z x] |
画面ロック |
うーむ。それにしても便利だ。早く知っていればよかった.ただscreenしたことを忘れてプロセスをためないように注意。忘れっぽい人はたまに screen -r で確認すべし。