screenコマンドでは以下のことができます
- 一つのウインドウの中に、複数の仮想的なウインドウを作成でき、簡単な操作で切替えることができます
- ネットワークが切断しても処理を継続できます (長時間かかるコマンドやシェルを実行し一旦切断し、あとで再接続することができる)
- 複数の端末から1つのセッションを操作できます (リモート環境でダブルチェック時などに便利)
大まかに以下の流れで作業をします。
- screenを起動する (自動的に1つのセッションが作成され、またその中で1つのウインドウが作成される)
- セッションをデタッチしscreenを見かけ上終了する(裏で続行中)
- セッションをアタッチし中断した作業を再開する
- すべてのウインドウを終了しセッションを終了する
- 別のところでアタッチ中のセッションに、(重複して)アタッチする
screenの起動
screen
任意のセッション名を付与してのscreenの起動
screen -S 任意のセッション名
「screen -ls」実行の際にセッション名で表示される為、分かりやすくなる。また、アタッチの際もこの名前を使用できる。
screenの中断(detach)
Ctrl+a, d
Ctrl+a, Ctrl+d
screenセッションの一覧表示
screen -ls
screenの再開 (attach)
screen -r [接続ID]
接続IDはデタッチ候補が1つだけの場合には省略可。接続IDは一意に絞られるならば「pid.tty.host」「pid.tty」「pid」「tty.host」「tty」のどの書き方でもOKです。既にアタッチされている場合にはエラーになる。
強制アタッチ
screen -d -r [接続ID]
対象セッションが別画面から既にアタッチされている場合、その画面の接続を切断したうえでアタッチする。既にログインしている人を追い出すようなイメージ。
重複アタッチ
screen -x [接続ID]
既に別のところでアタッチされているセッションに対し、重複してアタッチする。つまり2つ以上2つの画面から1つのセッションに接続することになる※対象セッションがアタッチされていない場合は「-r」と同じ動き。
screenセッションの終了
exit (すべてのウインドウで)
Ctrl+a, Ctrl+\
※「Ctrl+a, Ctrl+\」は私の環境では使えませんでした。
ウインドウの操作
新しいウインドウの作成
Ctrl+a, c
Ctrl+a, Ctrl+c
ウインドウの切り替え
# 次のウインドウ (next)
Ctrl+a, Ctrl+n
Ctrl+a, n
Ctrl+a, space
# 前のウインドウ (prev)
Ctrl+a, Ctrl+p
Ctrl+a, p
Ctrl+a, h
Ctrl+a, BackSpace
# 直前に作業していたウインドウ
Ctrl+a, Ctrl+a
ウインドウ番号を指定しての切り替え
# ウインドウ一覧の表示
Ctrl+a, "
# ウインドウ一覧の表示
Ctrl+a, ウインドウ番号
※ウインドウの切替え方法はいろいろありますが1つ覚えておけば十分だと思います。
現在のウインドウの終了
exit
Ctrl+a, k
Ctrl+a, Ctrl+k
※「Ctrl+a, k」「Ctrl+a, Ctrl+k」は私の環境では使えませんでした。
何らかの理由で操作できなくなったとき
理由はよくわからないのですが、操作を受け付けなくなってしまう状態になったことがあります。このときには以下の操作をしました。
- screenコマンドのプロセスをkill
- 「screen -ls」で一覧表示 (対象セッションが「Dead」と表示)
- 「screen -wipe」で掃除 (対象セッションが「Removed」と表示)
- 「screen -ls」で再度一覧表示 (対象セッションがなくなる)
※screenコマンドにはこれ以外にも本当にたくさんの機能があります。さらに詳しい説明は「man screen」で確認するか、他のサイトを参照してください。