2011/05/09

Screenを使う上で最低限知っておけばいいこと


LinuxにSSHなどでリモートアクセスして、途中でセッションが落ちたりなんかすると作業中でもそれらの作業が終了してしまいます。
それに、複数の作業をしようとしたらその数だけターミナルを開くのは面倒ですよね。

そこでGNU Screen。

1台の端末や接続したリモートの端末から、全く別々の複数の端末へと同時に接続する事が出来る。コマンドライン上で複数のプログラムを実行したり、シェル上でプログラムを実行させたまま接続を解除したりする時等に非常に役に立つソフトウェアである。

link: GNU Screen - Wikipedia

非常に役立ちます。
で、キーバインドを調べてみるとなんだか複雑なのでこれまでつかってこなかったのですが、実際につかってみると憶える事は案外少ないです。

もしscreenコマンドが使えない場合は

yum install screen

でインストール。
まずは設定ファイル .screenrc を作って以下の内容をコピペ。

# 可視ベル
OFFvbel off

# ハングアップ時に自動デタッチ
autodetach on

# スクロールバッファの大きさ:10万行
defscrollback 100000

# キーバインドの変更 [ Ctrl+a --> Ctrl+o ]
escape "^Oo"

# 背景色消去
defbce "on"
encoding utf-8 utf-8
defencoding utf-8

# defhstatus "$USER@^EH_^En ^Et -- ^EW"
# 下の方に時刻が表示されるようになる。
hardstatus alwayslastline "[%02c] %-w%{=b bw}%n %t%{-}%+w"

link: Holy (K)night 【LINUX】screenコマンド

Screenそのものを操作するときは キーバインドの変更で設定している Ctrl + o を押して操作します。
キー配置を変更する場合は下線部の所を変更するればOK

これで screen コマンドを実行すれば 上の写真のように下部に時計と現在のタブが表示されるScreen画面に入ります。
その状態で使うコマンドはちょっとだけ。

[Ctrl+o c] Ctrlとoを同時押しした後にcを押下。:新しいプロセスを作成。つまり新しいタブが増えて下の部分に新しいbashが追加されます。
[Ctrl+o n] となりのタブに移動。あとn以外にpとoがある。
[Ctrl+o d] デタッチ。要するにScreenを現在の状態を維持したままScreenを終了。

ちなみに現在のbashを終了するときは普通にexitで終了します。

そして一番重要なのが前回のデタッチ状態から続きを行う場合は screen -r コマンドです。

知っておけばいいのは

screen  :新しくScreenを作成

Ctrl+o c :Screen内で新しいbashを作る

Ctrl+o n :Screen内でとなりのbashに移動する

Ctrl+o d :Screenから現在の状態を維持したまま抜け出す

screen -r :前回のScreenに再度接続する

これだけ。
さらに詳しい情報はman screenで。

これで突然ネットが落ちたりしてセッションが切れたり、時間のかかる作業をしている場合でも安心してデタッチ→Screen -rで作業を継続し作業可能です。