screen – 端末セッションを多重化して切断・再接続できるターミナルマルチプレクサ

端末多重化
スポンサーリンク

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-ascreen -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。必要であれば -eescape 設定で変更可能。(Aperiodic, man7.org)
  • 似た操作のメモ: 共同閲覧には -x、ウィンドウ作成は C-a c、ヘルプは C-a ?。(man7.org, GNU)

参考

  • GNU Screen ユーザーズマニュアル(公式): (GNU)
  • manページ(man7.org): (man7.org)
  • Arch Wiki: GNU Screen(実践的な使い方): (ArchWiki)
  • Default Key Bindings(公式マニュアルの該当節): (GNU)
  • 速習チートシート(Aperiodic): (Aperiodic)
スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント