はじめに

こんにちは!今回はscreenコマンドについて解説します。

screenは複数の仮想ターミナルセッション(ウィンドウ)を1つの接続で管理できるコマンドです。SSH接続を切った後もセッションが保存されるので、いつでも再接続して作業を続けられます。

めっちゃ便利なので、リモートサーバー作業をする人には必須ですよ!


screenコマンドとは

screenは、複数の仮想ターミナルセッションを作成・管理する外部コマンドです。1つのターミナル内で複数のウィンドウを開いたり、セッションをデタッチ(切断)・リアタッチ(再接続)できます。

通常のターミナルと違い、セッションは保存されるため、SSH接続を閉じてもセッション内のプロセスは実行を続けます。複数の作業を並列実行したり、長時間のタスクを任せたりするのに最適です。


基本構文

1
screen [オプション] [コマンド]

セッションを作成し、その中で複数のウィンドウを管理できます。


主なオプション

オプション 説明
-S name セッションに名前を付けて作成
-ls セッション一覧を表示
-r デタッチ済みセッションに再接続
-d セッションを作成後、デタッチ
-x 複数接続でセッションを共有
-A すべてのウィンドウをサイズ調整

使用例

例1: 新しいセッションを作成

1
screen

実行結果:

1
2
3
4
GNU Screen version 4.08.00 (GNU) 29-Jul-20
Copyright (c) 2015-2020 Jan Hinrichs, Jörg Weule and others
...
[detached from 12345.pts-0.hostname]

新しいセッションを作成して、その中に入ります。

例2: 名前付きセッションを作成

1
screen -S mysession

実行結果:

1
[detached from 12346.mysession]

「mysession」という名前のセッションを作成します。

例3: セッション一覧を表示

1
screen -ls

実行結果:

1
2
3
4
5
There are screens on:
 12345.pts-0.hostname (Detached)
 12346.mysession (Detached)
 12347.work (Attached)
3 Sockets in /run/screen/S-user.

現在のセッション一覧を確認します。

例4: デタッチ済みセッションに再接続

1
screen -r 12345

実行結果:

1
(セッションが復活し、前の作業が表示される)

デタッチしたセッションに再接続します。

例5: 名前でセッションに再接続

1
screen -r mysession

実行結果:

1
(sesison内の画面が表示される)

セッション名を指定して再接続します。

例6: バックグラウンドでセッション作成

1
screen -d -S backup bash -c "tar czf /backup/site.tar.gz /var/www"

実行結果:

1
[detached]

セッションを作成し、そのまま別のウィンドウに戻ります。

例7: セッション内でコマンド実行

1
screen -S task -X eval 'stuff "echo Hello World\n"'

実行結果:

1
[detached from 12348.task]

セッション内にコマンドを送信します。

例8: セッション内のウィンドウ一覧

セッション内で Ctrl+a w を押すと、ウィンドウ一覧が表示されます。

例9: 複数ウィンドウでの作業

セッション内で Ctrl+a c を押すと、新しいウィンドウを作成します。

例10: セッションの終了

セッション内で exit を入力するか、Ctrl+a k でウィンドウを閉じます。


Tips・注意点

セッション共有を使う

1
2
3
4
5
# ターミナル1
screen -S shared

# ターミナル2
screen -x shared

複数のユーザーが同じセッションを共有できます。

セッションを保護する

1
2
3
screen -S protected -d
# セッション内で passwd コマンドを実行
screen -r protected

パスワード保護されたセッションを作成することで、セキュリティを高められます。

セッション名が重複する場合

1
screen -r mysession.pts-0

セッション IDまで指定して再接続できます。


実践的な使い方

リモートサーバーでの長時間処理

1
2
3
4
5
6
screen -S backup
# セッション内で
tar czf /backup/data_$(date +%Y%m%d).tar.gz /data
# Ctrl+a d でデタッチ
# 後で再接続
screen -r backup

バックアップを実行しながら、セッションをデタッチして別の作業ができます。

複数タスクの並列実行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
screen -S work
# Window 0
npm start

# Ctrl+a c で新しいウィンドウを作成
# Window 1
npm test

# Ctrl+a c でもう1つウィンドウを作成
# Window 2
vim package.json

複数のプロセスを同時に実行し、必要に応じてウィンドウを切り替えます。

セッション内でのログ記録

1
2
3
screen -S development
# セッション内で Ctrl+a H を押す
# すべての活動がログファイルに記録される

セッション内のすべての活動を記録できます。

複数の接続元からセッションにアクセス

1
2
# 管理者が立ち上げたセッションに
screen -x shared_session

複数のユーザーが同じセッションを監視・操作できます。


まとめ

screenコマンドのポイント:

  • 複数の仮想ターミナルセッションを管理
  • セッションをデタッチ・リアタッチできる
  • 基本形: screen -S sessionnamescreen -r sessionname
  • SSH接続を切ってもセッションとプロセスは保存される
  • 複数ウィンドウで並列作業が可能
  • よく使う組み合わせ: screen -S name -d -m bash

リモートサーバーでの作業をしっかりサポートしてくれるコマンド。tmuxの前身として、今でも多くの環境で使われていますよ!