重要なポイント
- Linux の screen コマンドは、ターミナル アプリケーションをバックグラウンドで実行し、必要に応じて切り替えることができる多用途ツールです。
- 分割画面表示をサポートしており、切断して再接続した後でも SSH 接続経由で使用できます。
- screen を使用すると、新しいウィンドウの作成、複数のプロセスの実行、セッションの切断と再接続、および複数のユーザー間でのセッションのリアルタイム共有が可能になります。
Linux の
screen
コマンドを使用すると、実行中のターミナル アプリケーションをバックグラウンドにプッシュし、表示したいときに前方に引き出すことができます。また、分割画面表示もサポートしており、切断して再接続した後でも
SSH 接続経由
で動作します。
画面コマンドとは何ですか?
screen
コマンドは
ターミナル マルチプレクサー
であり、オプションが豊富にあります。多くのことができると言っても過言ではありません。 man ページは
4,100 行以上あります
。
以下は、
screen
コマンドを使用する最も一般的なケースであり、この記事でさらに詳しく説明します。
- 標準的な操作は、シェルを含む新しいウィンドウを作成し、 コマンド を実行して、ウィンドウをバックグラウンドにプッシュすることです (「デタッチ」と呼ばれます)。プロセスがどのように実行されているかを確認したい場合は、ウィンドウを再度最前面に引き出し (「再アタッチ」)、再度使用することができます。これは、ターミナル ウィンドウを閉じて誤って終了したくない長時間のプロセスに最適です。
-
screenセッションを実行したら、新しいウィンドウを作成し、そこで他のプロセスを実行できます。ウィンドウ間を簡単に移動して、進行状況を監視できます。ターミナル ウィンドウを垂直または水平の領域に分割し、さまざまなscreenウィンドウを 1 つのウィンドウに表示することもできます。 -
リモート マシンに接続し、
screenセッションを開始し、プロセスを起動できます。リモート ホストから切断して再接続しても、プロセスは引き続き実行されます。 -
2 つの異なる SSH 接続間で
screenセッションを共有できるため、2 人がリアルタイムで同じものを見ることができます。
Linuxのインストール画面
ubuntu に
screen
をインストールするには、次のコマンドを使用します。
sudo apt-get インストール画面
Manjaro に
screen
をインストールするには、次のコマンドを使用します。
sudo pacman -Sy 画面
Fedora では、次のように入力します。
sudo dnf インストール画面
「Linux の開始」画面
screen
を開始するには、以下に示すように入力して Enter キーを押します。
画面
ライセンス情報のページが表示されます。スペースバーを押して 2 ページ目を読むか、Enter を押してコマンド プロンプトに戻ります。
コマンド プロンプトが表示されたままになっていますが、特に何も起こっていないようです。ただし、現在は多重化されたターミナル エミュレーター内でシェルを実行しています。なぜこれが良いことなのでしょうか?さて、完了までに長い時間がかかるプロセスを開始しましょう。最新の Linux カーネルのソース コードをダウンロードし、
latest_kernel.zip
というファイルにリダイレクトします。
これを行うには、次のように入力します。
カール https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > 最新_kernel.zip
ダウンロードが開始され、
curl
出力に進行状況が表示されます。
次のビットはキーストローク シーケンスであるため、画像をお見せすることはできません。 Ctrl+A を入力し、それらのキーを放してから d を押して画面を切り離します。
ダウンロード プロセスはまだ実行中ですが、ダウンロードを示すウィンドウが削除されます。
screen
セッションを開始したターミナル ウィンドウに戻ります。
23167.pts-0.
というラベルの付いた
screen
ウィンドウが切り離されたことを示すメッセージが表示されます。
再アタッチするには、ウィンドウ名の先頭からの番号が必要です。忘れた場合でも、次に示すように、いつでも
-ls
(リスト) オプションを使用して、切り離されたウィンドウのリストを取得できます。
画面 -ls
準備ができたら、次のように
-r
(再接続) オプションとセッション番号を使用して再接続できます。
スクリーン -r 23167
バックグラウンドで動作していたウィンドウが、まるで最初から離れていないかのようにターミナル ウィンドウに戻されます。
結論まで実行されるプロセスであれば、最終的には完了します。継続的なプロセスの場合は、最終的には終了したくなるでしょう。いずれの場合も、プロセスが終了したら、
exit
と入力して
screen
を終了できます。または、Ctrl+A を押してから K を押して、ウィンドウを強制終了することもできます。
次のコマンドを入力します。
出口
以前のターミナル ウィンドウに戻りますが、ウィンドウを再接続するために使用したコマンドが引き続き表示されます。唯一の独立したウィンドウを閉じたため、
screen
が終了するというメッセージが表示されます。
Linux 画面セッションおよびその他のショートカットからの切断
画面セッションから自分を切り離す方法について簡単に触れましたが、繰り返し説明します。また、使い慣れておくべき他の一般的なショートカットもいくつか紹介しました。
screen を使用している場合、ショートカットは通常、Ctrl + a の後に文字が続く形式になります。 Ctrl + a を押すと、基本的に画面に「別の入力を探す必要があります。」と表示されます。
|
メインキー |
2番目のキー |
アクション |
|
Ctrl + A |
d |
現在の画面から切断します |
|
Ctrl + A |
」 |
利用可能なすべての画面ウィンドウを表示する |
|
Ctrl + A |
1、2、3…9 |
特定の番号の画面に接続します |
|
Ctrl + A |
私 |
現在の画面に関する情報を表示する |
|
Ctrl + A |
k |
現在のウィンドウを強制終了します |
|
Ctrl + A |
\ |
すべてのウィンドウを強制終了し、画面を終了します |
これは完全なリストではありませんが、やるべきことのほとんどはこれで完了します。記事の後半では、特定のシナリオに便利なキーバインドについても詳しく説明します。キーバインドのリスト全体を確認したい場合は、 公式 GNU screen Web サイト に詳細なドキュメントがあります。
Linux での名前付きスクリーンセッションの使用
-S
(セッション名) オプションを使用して、
screen
セッションに名前を付けることができます。セッションの数値 ID ではなく、覚えやすい名前を使用すると、セッションに再接続するのがより便利になります。次のように入力して、セッションに「bigfile」という名前を付けます。
画面 -S ビッグファイル
screen
セッションを起動すると、コマンド プロンプトが表示された空白のウィンドウが表示されます。大きなファイルをダウンロードするので、長時間実行されるプロセスを例として使用します。
次のように入力します。
カール http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
ダウンロードが開始されたら、Ctrl+A を押してから D を押してセッションを切断します。次のように入力して、
screen
で
-ls
(リスト) オプションを使用し、切り離されたセッションの詳細を確認します。
画面 -ls
数値識別子 (23266) の後ろに、セッション (bigfile) の名前が表示されます。セッション名を含めて次のように入力して、セッションを再接続します。
スクリーン -r ビッグファイル
ダウンロード ウィンドウに再接続すると、長いダウンロードがまだ進行中であることがわかります。
ダウンロードが完了したら、
exit
と入力してセッション ウィンドウを閉じます。
複数のウィンドウで画面を使用する
これまで、
screen
使用して、分離されたウィンドウのバックグラウンドに単一のプロセスを配置してきました。ただし、
screen
それ以上のことを行うことができます。次に、コンピューターのいくつかの側面を監視できるようにするいくつかのプロセスを実行します。
次のように入力して、「monitor」という名前の画面セッションを開始します。
画面-Sモニター
新しいウィンドウ セッションのコマンド プロンプトで、
dmesg
を起動し
、
-H
(人間が読める形式) オプションと
-w
(新しいメッセージを待つ) オプションを使用します。これにより
、カーネル バッファ メッセージが表示
されます。新しいメッセージが発生するとすぐに表示されます。
次のように入力します。
dmesg -H -w
既存のメッセージが表示されます。
dmseg
新しいメッセージを待機しており、メッセージが到着すると表示するため、コマンド プロンプトには戻りません。
別のアプリケーションを実行したいので、新しい
screen
ウィンドウが必要です。 Ctrl+A を押してから C を押して、新しいウィンドウを作成します。
watch
を使用して
vmstat
を
繰り返し実行する
ので、コンピューター上の
仮想メモリの使用状況が頻繁に更新されて表示さ
れます。
新しいコマンド プロンプトで、次のように入力します。
vmstatを監視する
vmstat
出力は 2 秒ごとに表示され、更新されます。
2 つのプロセスが実行中です。
screen
ウィンドウ間を移動するには、Ctrl+A を押してウィンドウの番号を押します。最初に作成したものはウィンドウ 0 (0)、次はウィンドウ 1 というように続きます。最初のウィンドウ (
dmesg
ウィンドウ) にジャンプするには、Ctrl+A と 0 を押します。
Ctrl+A と 1 を押すと、
vmstat
ウィンドウに戻ります。
なかなか素敵ですね! Ctrl+A を押してから D を押すと、このセッションから切断できます。後で再接続できます。両方のセッションは引き続き実行されます。再度、ウィンドウを切り替えるには、Ctrl+A を押して、切り替え先のウィンドウの番号 (0 または 1) を押します。
次のステップに進み、1 つのウィンドウに両方の画面を表示してみましょう。これを行うと、この手順が便利なサイズにターミナル ウィンドウが拡大されます。この例はスクリーンショットのサイズに制限されているため、ウィンドウは少し窮屈に見えます。
これを行うには、Ctrl+A を押してから Shift+S を押します (大文字の「S」が必要です)。
ウィンドウは 2 つの「領域」に分割されます。
上部の領域には
vmstat
が表示されたままで、下部の領域は空白です。以下のスクリーンショットでは、カーソルが強調表示されています。下の領域に移動するには、Ctrl+A を押してから Tab を押します。
カーソルは下の領域に移動しますが、実際には単なる空きスペースです。これはシェルではないので、何も入力できません。便利な表示を得るには、Ctrl+A を押してから「0」を押して、この領域に
dmesg
ウィンドウを表示します。
これにより、両方のライブ出力が 1 つの分割ウィンドウに表示されます。 Ctrl+A と D を押してウィンドウを切り離し、その後再接続すると、分割ペイン ビューが失われます。ただし、次のキーボード ショートカットを使用して復元できます。
- Ctrl+A、S: ウィンドウを水平に分割します。
- Ctrl+A 、 Tab: 下の領域に移動します。
- Ctrl+A、0: ウィンドウ 0 を下部領域に表示します。
物事をさらに一歩進めることができます。次に、下のペインを垂直に分割し、表示に 3 番目のプロセスを追加します。カーソルを下部領域に置き、Ctrl+A と C を押して、シェルを含む新しいウィンドウを作成します。下部の領域には新しいウィンドウが表示され、コマンド プロンプトが表示されます。
次に、
df
コマンドを実行して
ファイル システムの使用状況を確認します
。
DF
df
実行されているのを確認したら、 Ctrl+A とパイプ文字
(|)
を押します。これにより、下部領域が垂直に分割されます。 Ctrl+A と Tab を押して、新しい領域に移動します。次に、Ctrl+A と 0 を押して
dmesg
ウィンドウを表示します。
リージョン間を移動したり、垂直または水平の分割を追加したりすることもできます。さらに便利なキーの組み合わせをいくつか示します。
- Ctrl+A: 現在のリージョンと前のリージョンの間を行き来します。
- Ctrl+A、Q: 現在の領域を除くすべての領域を閉じます。
- Ctrl+A、X: 現在の領域を閉じます。
SSH経由で画面を使用する
screen
を使用すると、ウィンドウ セッションを開始し、セッションを切断してバックグラウンドで実行したり、ログオフまたは再度ログインしたり、セッションを再接続したりできます。
ssh
コマンドを使用して、別のコンピュータから
自分のコンピュータに SSH 接続
を確立しましょう。接続するアカウントの名前とリモート コンピューターのアドレスを指定する必要があります。
この例では、次のように入力します。
ssh デイブ@192.168.4.30
リモート コンピューターで認証してログインした後、次のように入力して、「ssh-geek」という名前の
screen
セッションを開始します。
screen -S ssh-geek
デモンストレーションの目的で、
screen
ウィンドウの
top
実行しますが、長時間実行または無限のプロセスを開始することもできます。
次のように入力します。
上
ウィンドウ内で
top
実行されたら、Ctrl+A を押してから D を押してウィンドウを切り離します。
元のリモート ターミナル ウィンドウに戻ります。
以下に示すように
exit
と入力すると、SSH セッションが切断され、ローカル コンピューターに戻ります。
出口
再接続するには次のように入力します。
ssh デイブ@192.168.4.30
再接続してログインしたら、次のように入力して
screen
セッションを再接続します。
screen -r ssh-geek
これで、まだ実行中の
top
のインスタンスに再接続されました。
これは、あるマシンでプロセスを開始し、別のマシンで中断したところから再開したい場合に最適です。
画面セッションの共有
screen
セッションを使用して、2 人が同じウィンドウを表示して操作できるようにすることもできます。自分のコンピュータで Fedora を実行している人が、Ubuntu サーバーに接続したいとします。
彼は次のように入力します。
ssh デイブ@192.168.4.30
接続後、-S (セッション名) オプションを使用して、「ssh-geek」という名前の screen セッションを開始します。また、
-d
(デタッチ) および
-m
(強制作成) オプションを使用して、すでにデタッチされている新しい
screen
セッションを作成します。
彼は次のように入力します。
screen -d -m -S ssh-geek
彼は、
-x
(マルチスクリーン モード) オプションを使用して次のように入力し、セッションを接続します。
screen -x ssh-geek
以下に示すように、Manjaro コンピューター上で、別のユーザーが同じアカウント資格情報を使用して Ubuntu コンピューターに接続します。
ssh デイブ@192.168.4.1
接続したら、次のように
screen
コマンドを入力し、-X (マルチスクリーン モード) オプションを使用して同じウィンドウ セッションに参加します。
screen -X ssh-geek
これで、どちらかが入力したものは、もう一方が見ることができます。たとえば、1 人が date コマンドを発行すると、入力されたコマンドとその出力が両方とも表示されます。
両者は現在、リモートの Ubuntu コンピューター上で実行されている
screen
セッションを共有しています。
1987 年に初めて日の目を見たソフトウェアにしては、
screen
今でも生産性を大幅に向上させています。それに慣れると、有意義な時間を過ごすことができます。





