screenコマンドを初めて使った時、自分がどこにいるのか全く分からなくなり、正直迷子になりました
原因はウィンドウとセッションの混同だったのですが、この概念の違いを図で説明している記事があまりなかったため、入門記事を書いてみました
この記事が同じ迷子たちの道標となることを祈ります🙏
screen 概要
screenコマンドはCLI上でのマルチターミナル環境を実現するコマンドです
以下でインストールします
$ apt install screen
screenではセッションという単位で作業スペースを作ることができ
セッション内では更にウィンドウという単位で実行環境を分けられます
図のターミナルウィンドウ全てが独立したシェル環境です
screen移動操作は、おおまかに上の図の赤色と青色の矢印の2種類があり、
赤矢印はログインシェルとセッション操作、screen
コマンドを使います
青矢印は同一セッションのウィンドウ操作、Ctrl-a
キーを使います
実際にコマンド入力を通してセッションとウィンドウを作成してみましょう
セッション操作
まずはログインシェル(普段つかっているシェル)からscreen
と入力
$ screen
新しいセッションを作成すると同時に0$ bash
のウィンドウが自動的に作られ、0$に接続します
screenの説明が出てきた場合はエンターキーで閉じます
ウィンドウ操作
ウィンドウ内の操作の基本はCtrl-a
です
Ctrl-a
を押すと表示は変わりませんがコマンド受付状態になります
ウィンドウ作成
Ctrl-a, c
で新しいウィンドウを作って接続します
あるいはscreen
コマンドを打ちます
$ (Ctrl-a), (c)
$ screen(ウィンドウ内)
ウィンドウ一覧
Ctrl-a, w
で現在のセッションのウィンドウ一覧を表示します
$ (Ctrl-a), (w)
+ 0-$ bash 1*$ bash
緑ハイライトの部分が表示されていれば正しくウィンドウ操作ができています
現在のセッションでは0$
と1$
のウィンドウが存在しています
ウィンドウ間の移動
ウィンドウ間を移動する方法は複数あります
状況に合わせて選択すると良いでしょう
$ (Ctrl-a), (0-9)
{0-9}$のウィンドウに移動
$ (Ctrl-a), (Space)
一つ次のウィンドウに移動
$ (Ctrl-a), (Ctrl-a)
直近のウィンドウに移動
その他ウィンドウ操作
$ (Ctrl-a), (k)
$ (Ctrl-d)
$ exit
ウィンドウを削除
$ ctrl+a ?
ヘルプ表示
セッション内すべてのウィンドウを削除すると自動的にセッションが削除されログインシェルに戻ります
ログインシェルへ戻る
セッションのデタッチ
ウィンドウ内でscreen -d
と打つとセッションから抜けます(デタッチ)
あるいはCtrl-a, Ctrl-d
を打ちます
$ screen -d
$ (Ctrl-a), (Ctrl-d)
セッションの一覧
screen -ls
でセッションの一覧とセッションのPIDを表示します
$ screen -ls
There is a screen on:
(PID).pts-0.mycomputer (08/19/21 23:36:09) (Attached)
1 Socket in /run/screen/S-logiteca7.
セッションのアタッチ
もう一度さっきのセッションに戻るにはscreen -r (PID)
かscreen -rx (PID)
(強制アタッチ)
$ screen -r (PID)
セッションの削除
お片付けをしましょう
$ screen kill (PID)
これで一連の移動操作が出来ました!
参考
screenでは一画面に複数ウィンドウを出したり(リージョン)、コピーペーストをしたり、セッションやウィンドウに名前をつけたりできるんですが、長くなるので割愛しました
他の記事を参照してみてください
チートシート
※チートシートや用語の説明として素晴らしい記事ですが、若干のtypo注意
screenでウィンドウを垂直・水平分割する方法
この記事にくどいくらい図が入っているのは、ごめんなさい、draw.io使うのが楽しかった…