GNU SCREEN クイックリファレンス
セッション、ウィンドウ、分割、コピーモード、共有
セッション管理
セッションの作成と一覧表示
screen # 名前なし新規セッション
screen -S work # "work" という名前で新規セッション
screen -ls # すべてのセッションを一覧表示
screen -list # -ls と同じ
セッションコマンド
| screen -S name | 名前付き新規セッションを開始 |
| screen -r name | デタッチされたセッションに再アタッチ |
| screen -x name | アタッチ中のセッションを共有する |
| screen -d name | リモートセッションをデタッチ |
| screen -d -r name | 他でデタッチしてここで再アタッチ |
| screen -D -RR | 強制デタッチして再アタッチ(強制実行) |
| screen -ls | PID 付きですべてのセッションを一覧表示 |
| screen -wipe | 無効なセッションをクリーンアップ |
ウィンドウ
ウィンドウ基本操作
| Ctrl-a c | 新しいウィンドウを作成 |
| Ctrl-a n | 次のウィンドウ |
| Ctrl-a p | 前のウィンドウ |
| Ctrl-a 0-9 | 番号でウィンドウに切り替え |
| Ctrl-a " | すべてのウィンドウを一覧表示(インタラクティブ) |
| Ctrl-a ' | 名前または番号でウィンドウに切り替え |
| Ctrl-a A | 現在のウィンドウ名を変更 |
| Ctrl-a k | 現在のウィンドウを削除 |
ウィンドウ管理
| Ctrl-a w | ステータスラインにウィンドウ一覧を表示 |
| Ctrl-a Ctrl-a | 最後の2つのウィンドウを切り替え |
| Ctrl-a N | ウィンドウ番号と名前を表示 |
| exit / Ctrl-d | ウィンドウを閉じる(シェル終了) |
分割とリージョン
分割コマンド
| Ctrl-a S | 水平分割(上下) |
| Ctrl-a | | 垂直分割(左右) |
| Ctrl-a Tab | 次のリージョンにフォーカスを移動 |
| Ctrl-a X | 現在のリージョンを閉じる |
| Ctrl-a Q | 現在以外のリージョンをすべて閉じる |
リージョンのワークフロー
Ctrl-a S # 水平分割
Ctrl-a Tab # 新しいリージョンに移動
Ctrl-a c # リージョンにウィンドウを作成
Ctrl-a :resize 20 # リージョンを20行に設定
コピーモード
スクロールバックとコピー
| Ctrl-a [ | コピー・スクロールバックモードに入る |
| Space | 選択の開始・終了(コピーモード内) |
| Enter | 選択をコピーしてコピーモードを終了 |
| Ctrl-a ] | コピーしたテキストを貼り付け |
| h/j/k/l | カーソル移動(コピーモードで vi キー) |
| Ctrl-u / Ctrl-d | 半ページ上下にスクロール |
| / または ? | 前方・後方検索 |
| Esc | コピーモードを終了 |
コピーのワークフロー
Ctrl-a [ # コピーモードに入る
Space # 開始位置をマーク(先に移動)
Space # 終了位置をマークしてコピー(先に移動)
Ctrl-a ] # 現在のウィンドウに貼り付け
デタッチと再アタッチ
デタッチ
| Ctrl-a d | 現在のセッションをデタッチ |
| Ctrl-a D D | デタッチしてログアウト |
| Ctrl-a z | screen を一時停止(Ctrl-Z と同様) |
| screen -d PID | PID でセッションをリモートデタッチ |
再アタッチ
screen -r # 再アタッチ(セッションが1つの場合)
screen -r work # 名前で再アタッチ
screen -r 12345 # PID で再アタッチ
screen -d -r work # 他の端末からセッションを奪取
継続的なワークフロー
# 長時間タスクを開始してデタッチし後で再接続
screen -S build
make -j4 all # ビルド開始
Ctrl-a d # デタッチして退席
screen -r build # 後で再アタッチ
共有
マルチユーザーモード
# ホストがマルチユーザーを有効化
Ctrl-a :multiuser on
Ctrl-a :acladd alice # ユーザー alice にアクセス許可
# alice がアタッチ
screen -x hostuser/sessionname
アクセス制御
| :multiuser on | マルチユーザーモードを有効化 |
| :acladd user | ユーザーにフルアクセスを許可 |
| :aclchg user -w '#' | ユーザーを読み取り専用にする(全ウィンドウ) |
| :acldel user | ユーザーのアクセスを削除 |
| screen -x user/sess | 共有セッションにアタッチ |
設定
~/.screenrc の基本設定
startup_message off # 起動メッセージを非表示
defscrollback 10000 # スクロールバッファ行数
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL # ログインシェルを使用
便利な設定
| startup_message off | 起動メッセージを抑制 |
| defscrollback N | スクロールバッファを設定(デフォルト 100) |
| escape ^Bb | プレフィックスキーを Ctrl-b に変更 |
| shelltitle '$ |bash' | ウィンドウタイトルを自動設定 |
| caption always '%n %t' | ウィンドウ情報付きキャプションを常に表示 |
| autodetach on | ハングアップ時に自動デタッチ(デフォルト有効) |
| vbell on | 音の代わりにビジュアルベルを使用 |
よく使うパターン
開発環境のセットアップ
# .screenrc でウィンドウを自動作成
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell 2 bash
select 0 # エディタウィンドウから開始
ログとモニタリング
Ctrl-a H # screenlog.N へのログ記録を切り替え
Ctrl-a M # ウィンドウのアクティビティを監視
Ctrl-a _ # ウィンドウのサイレンスを監視
クイックリファレンス
| Ctrl-a ? | すべてのキーバインドを表示 |
| Ctrl-a :help | 組み込みヘルプ |
| Ctrl-a :source file | 設定ファイルを読み込む |
| Ctrl-a :screen cmd | 新しいウィンドウでコマンドを実行 |
| Ctrl-a :quit | すべてのウィンドウを削除してセッションを終了 |