screen は1つの端末で複数の仮想端末(ウィンドウ)を作り、切断しても後で再接続できるツールです。長時間処理やリモート作業で、セッションを維持したまま安全にログアウトできます。(man7.org)
構文(Syntax)
# 新規セッションを開始
screen [OPTIONS] [CMD [ARGS...]]
# 既存セッションの一覧 / 再接続
screen -ls
screen -r [[PID.]TTY[.HOST]] # or: screen -r NAME
# よく使う起動例
screen -S NAME # 名前付きで開始
screen -dmS NAME CMD ARGS... # デタッチ状態で起動しCMD実行
主な動作(例):-S でセッション名、-ls で一覧、-r で再接続、-d -r で遠隔デタッチ後に再接続、-dm でデタッチ起動。(man7.org)
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-S NAME | 新規セッションに名前を付ける | screen -S deploy (man7.org) |
-ls / -list | 実行中セッションを一覧表示 | screen -ls (man7.org) |
-r [ID/NAME] | デタッチ済みセッションへ再接続 | screen -r deploy (man7.org) |
-d -r / -d -R / -d -RR | (他端末で接続中でも)強制デタッチして再接続/なければ作成 | screen -d -r (man7.org) |
-d -m | デタッチ状態で新規起動(起動スクリプト向け) | screen -d -m -S batch ./job.sh (man7.org) |
-L / -Logfile FILE | ウィンドウ出力の自動ログを有効化/ログファイル名指定 | screen -L -Logfile build.log -S build (man7.org) |
-h NUM | スクロールバック行数を指定 | screen -h 5000 (man7.org) |
-c FILE | 既定の ~/.screenrc の代わりに設定ファイルを指定 | screen -c ./myscreenrc (man7.org) |
-x | すでに接続中のセッションに共同接続(マルチディスプレイ) | screen -x deploy (man7.org) |
-e XY | プレフィックスキーを変更(既定は C-a) | screen -e^Eq (man7.org) |
-p WIN / -X CMD | 特定ウィンドウを選択しコマンド送信 | screen -S deploy -p 0 -X stuff "help\n" (man7.org, Aperiodic) |
代表的キーバインド:
C-a d(デタッチ)、C-a c(新規ウィンドウ)、C-a [(コピー/スクロールモード)、C-a ?(ヘルプ)、C-a a(アプリへ素の Ctrl-aを送る)。(GNU, Aperiodic)
実行例
1) 名前付きで開始 → デタッチ → 一覧表示
説明: 作業用セッションを作り、いったん離れます。
コマンド:
screen -S work
# 中で作業…(例: vim, top)
# Ctrl+a d でデタッチ
screen -ls
出力例(例):
There is a screen on:
12345.work (Detached)
1 Socket in /run/screen/S-user.
C-a d はデタッチ、-ls は一覧です。(man7.org, GNU)
2) 既存セッションへ再接続(接続中でも奪って接続)
説明: 誰かが接続中でも強制的にデタッチして接続し直します。
コマンド:
screen -d -r work
-d -r は「必要なら先にデタッチして再接続」。(man7.org)
3) バッチを“見えない”状態で起動しておく
説明: 起動時からデタッチし、後で状況確認します。
コマンド:
screen -dmS backup bash -c 'rsync -a /data/ /backup/'
# 後で
screen -r backup
-d -m はデタッチ起動、-S で名前を付けます。(man7.org)
4) ログを自動保存してビルド実行
説明: screen 起動時にログを有効化し、ファイルへ保存します。
コマンド:
screen -L -Logfile /var/log/build.log -S build
# 中で: make -j
-L と -Logfile で自動ログを書き出します。(man7.org)
5) スクロールバック/コピーモードを使う
説明: 画面を遡ってコピーできます。
コマンド:
Ctrl+a [ # コピー/スクロールモード
# 方向キーや PgUp/PgDn で移動、終了は Esc
C-a [ がコピー/スクロールモードの既定です。(GNU)
エラー例:存在しないセッションに再接続
説明: 一致するセッションがないとエラーになります。
コマンド:
screen -r no_such
出力例(例):
There is no screen to be resumed matching no_such.
(screen -ls で名称を確認してから再実行)
関連コマンド
tmux: 同種のターミナルマルチプレクサ(より新機能豊富)。nohup: 端末切断時のSIGHUPを無視してコマンドを継続。script/scriptreplay: 端末セッションを記録/再生。(man7.org)byobu:screen/tmuxのラッパーで使いやすいUIを提供。
備考
- 設定ファイル: グローバル
screenrc(例:/usr/local/etc/screenrc)とユーザーの~/.screenrcを読み込みます。-cで任意の設定ファイルを指定可能。環境変数$SYSSCREENRC/$SCREENRCも利用されます。(man7.org) - ソケット/権限: ソケットディレクトリはビルド時設定や
$SCREENDIRに依存。別ユーザーのセッションに接続するマルチユーザーモードは setuid-root を要します。(man7.org) - キーバインド: 既定のプレフィックスは
Ctrl-a。アプリへそのままのCtrl-aを送るにはC-a a。必要であれば-eやescape設定で変更可能。(Aperiodic, man7.org) - 似た操作のメモ: 共同閲覧には
-x、ウィンドウ作成はC-a c、ヘルプはC-a ?。(man7.org, GNU)

コメント