UbuntuクラウドサーバーにScreenをインストールして使用する方法は?
イントロダクション
スクリーンは、1つのウィンドウ内で複数のターミナルセッションを使用できるコンソールアプリケーションです。このプログラムはシェルセッション内で動作し、他のターミナルセッションのコンテナおよびマネージャーとして機能します。ウィンドウマネージャーがウィンドウを管理するのと同様です。
いくつかのターミナルウィンドウを作成することができない場合や理想的ではない場面がたくさんあります。X サーバーを実行していない状況で複数のコンソールセッションを管理する必要があるかもしれませんし、多くのリモートクラウドサーバーにアクセスする必要があるかもしれませんし、実行中のプログラムの出力を監視しながら別の作業を行う必要があるかもしれません。
この問題には、tmuxなどのモダンで総合的な解決策がありますが、screenはそれらすべての中でも最も成熟しており、独自の強力な構文と機能があります。
ステップ1 – 画面のインストール
このチュートリアルでは、Ubuntu 22.04を使用しますが、インストールプロセス以外では、すべての現代のLinuxディストリビューションで同じであるはずです。
Ubuntuでは、スクリーンは通常デフォルトでインストールされています。また、パッケージソースを更新し、スクリーンをインストールするためにaptを使用することもできます。
- sudo apt update
- sudo apt install screen
スクリーンがインストールされていることを確認するために、which screenコマンドを実行してください。
- which screen
/usr/bin/screen
次のステップで画面を使用開始することができます。
ステップ2 – スクリーンを使用する
新しいスクリーンセッションを開始するには、screenコマンドを実行してください。
- screen
[secondary_label Output
GNU Screen version 4.09.00 (GNU) 30-Jan-22
Copyright (c) 2018-2020 Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2015-2017 Juergen Weigert, Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2010-2014 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008-2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib
Chowdhury
Copyright (c) 1993-2007 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version.
…
[Press Space for next page; Return to end.]
プログラムを起動すると、ライセンスページが表示されます。続行するためには、Enterキーを押してください。
次に起こることは驚くかもしれません。通常のコマンドプロンプトが表示され、何も起こったように見えます。スクリーンは正常に実行されなかったのでしょうか?確かめるために、簡単なキーボードショートカットを試してみましょう。Ctrl+aを押し、それに続いてvを押してみてください。
screen 4.09.00 (GNU) 30-Jan-22
私たちはちょうど画面からバージョン情報をリクエストし、画面が正しく動作していることを確認するためのフィードバックを受け取りました。
これからは、画面の操作方法について紹介するベストタイミングです。画面の操作は主にキーボードショートカットで行います。画面のすべてのキーボードショートカットは、Ctrlキーと「a」キーを同時に押すことで実行されます。このキーストロークのシーケンスによって、次に押すキーに注意を払うようにscreenに指示します。
「すでにscreenのバージョン情報をリクエストする際に、このパラダイムを使っています。Ctrl-a ?: を入力して、さらに便利な情報を取得しましょう。」
Screen key bindings, page 1 of 2. Command key: ^A Literal ^A: a break ^B b license , removebuf = clear C lockscreen ^X x reset Z colon : log H screen ^C c copy ^[ [ login L select ‘ detach ^D d meta a silence _ digraph ^V monitor M split S displays * next ^@ ^N sp n suspend ^Z z dumptermcap . number N time ^T t fit F only Q title A flow ^F f other ^A vbell ^G focus ^I pow_break B version v hardcopy h pow_detach D width W help ? prev ^H ^P p ^? windows ^W w history { } quit \ wrap ^R r info i readbuf < writebuf > kill K k redisplay ^L l xoff ^S s lastmsg ^M m remove X xon ^Q q [Press Space for next page; Return to end.]
これは内部のキーボードショートカット画面です。おそらくここに辿り着く方法を覚えておくと便利ですよ。下部に表示されている通り、スペースを押すとさらにコマンドが表示されます。
よし、もっと楽しいことをやってみましょう。このウィンドウで「top」というプログラムを実行してみましょう。それによって、プロセスに関する情報が表示されます。
- top
top – 16:08:07 up 1:44, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 507620k total, 262920k used, 244700k free, 8720k buffers Swap: 0k total, 0k used, 0k free, 224584k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 3384 1836 1288 S 0.0 0.4 0:00.70 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0 5 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kworker/u:0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.07 watchdog/0 8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset 9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 12 root 20 0 0 0 0 S 0.0 0.0 0:00.03 sync_supers 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khubd 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
よし、今私たちはVPS上のプロセスをモニタリングしています。でももし私たちが表示されているプログラムに関する詳細情報を調べるためにいくつかのコマンドを実行する必要がある場合はどうでしょう? “top” を終了する必要はありません。新しいウィンドウを作成してこれらのコマンドを実行することができます。
Ctrl-a cというシーケンスを使用すると、新しいウィンドウを作成できます。他のウィンドウで行っていた監視作業を妨げることなく、自由にコマンドを実行できます。
あの別のウィンドウはどこに行ったの?Ctrl + a n を使えばそれに戻れるよね。
このシーケンスは、現在実行中のウィンドウから次のウィンドウに移動します。ウィンドウのリストは折り返し表示されるため、現在のウィンドウの先に他のウィンドウが存在しない場合、最初のウィンドウに戻ります。
Ctrl-a pは、現在のウィンドウを反対方向に切り替えます。つまり、3つのウィンドウがあり、現在3番目のウィンドウにいる場合、このコマンドを使用すると、2番目のウィンドウに切り替わります。
同じ2つのウィンドウを切り替える際に役立つショートカットは、Ctrl-a Ctrl-aです。
このシーケンスは、最も最近訪れたウィンドウに移動します。したがって、前の例では、これによって3番目のウィンドウに戻ることができます。
この時点で、私たちが作成しているすべてのウィンドウを追跡する方法が気になるかもしれません。幸いにも、screenにはさまざまなセッションを管理する方法がいくつか備わっています。まず、合計4つのウィンドウを作成し、次にScreenのウィンドウ管理ツールの1つである「Ctrl-a w」を試してみましょう。Ctrl-a c Ctrl-a c Ctrl-a c Ctrl-a wを入力してください。
0$ bash 1$ bash 2-$ bash 3*$ bash
このコマンドから役立つ情報を得ることができます:現在のウィンドウのリストです。ここでは、4つのウィンドウがあります。各ウィンドウには番号が付けられ、ウィンドウの番号は “0” から始まります。現在のウィンドウは番号の横にアスタリスクがあります。
今、私たちはウィンドウ番号3にいることがわかります(実際には最初のウィンドウが0なので、実際には4番目のウィンドウです)。Ctrl-a 1を使えば、迅速にウィンドウ番号1に戻ることができます。
私たちは目的のウィンドウに直接ジャンプするためにインデックス番号を使用することができます。Ctrl-a w を使ってウィンドウリストをもう一度表示しましょう。
0$ bash 1*$ bash 2$ bash 3-$ bash
見てわかるように、アスタリスクは現在のウィンドウ番号1であることを示しています。Ctrl-aを使用してウィンドウを切り替える別の方法を試しましょう、「:」を使ってください。
Num Name Flags 0 bash $ 1 bash $ 2 bash $ 3 bash $
今回は実際のナビゲーションメニューが用意されています。上下矢印キーで移動することができます。ウィンドウを切り替えるには、Enterキーを押してください。
これはかなり便利ですが、現在、私たちのすべてのウィンドウの名前が「bash」となっています。それはあまり役に立ちません。いくつかのセッションに名前を付けましょう。たとえば、Ctrl-a 0で名前を付けたいウィンドウに切り替えてから、Ctrl-a Aを使用してください。
Set window’s title to: bash
Ctrl-a Aのシーケンスを使用することで、セッションに名前をつけることができます。「bash」という名前をバックスペースで削除し、任意の名前に変更することができます。ウィンドウ#0で再びtopを実行するため、それを”monitoring”という名前にします。
Ctrl-aと「:」を使用して結果を確認してください。
Num Name Flags 0 monitoring $ 1 bash $ 2 bash $ 3 bash $
窓#0にはより便利なラベルがあります。ですから、私たちはウィンドウを作成して名前を付ける方法を知っていますが、もはや必要なくなった場合にそれらをどのように取り除けばよいのでしょうか?「Ctrl-a k」のシーケンス、「kill」の略です。
Really kill this window [y/n]
ステップ3 – スクリーンセッションの管理
スクリーンを終了し、全てのウィンドウを終了する場合は、Ctrl+a \ を使用することができます。
Really quit and kill all your windows [y/n]
これによって、私たちのスクリーンセッションが破壊されます。私たちが作成したウィンドウや未完成の作業も失われます。
しかし、「スクリーン」を使用することの一つの大きな利点を探求したいのです。セッションを破壊したくはありません。代わりにセッションを切り離したいのです。切り離すことで、スクリーンのインスタンス内で実行中のプログラムは継続されますが、基本となるコンソールセッション(最初に「スクリーン」を起動したセッション)にもアクセスができるようになります。スクリーンセッションはまだ存在しており、バックグラウンドで管理されます。切り離すには、Ctrl-a d を使用してください。
[detached from 1835.pts-0.Blank]
私たちのセッションは今切断されています。それに戻る方法はありますか? (Watashitachi no sesshon wa ima setsudan sa reteimasu. Sore ni modoru houhou wa arimasu ka?)
- screen –r
「-r」フラグはreattachの略です。現在、私たちはスクリーンセッションに戻っています。しかし、もしも複数のスクリーンセッションがあった場合はどうでしょうか? たとえば、スクリーンセッションを作成してデタッチした後、新しいスクリーンセッションを作成してそれもデタッチした場合はどうでしょうか?
スクリーンを実行して、Ctrl-a dでデタッチし、再びスクリーンを実行し、再度Ctrl-a dでデタッチしてみてください。
どのセッションをアタッチするか、画面に教える方法はありますか?
- screen –ls
There are screens on: 2171.pts-0.Blank (07/01/2013 05:00:39 PM) (Detached) 1835.pts-0.Blank (07/01/2013 03:50:43 PM) (Detached) 2 Sockets in /var/run/screen/S-justin.
今、セッションのリストを持っています。-rフラグの後に、セッションのID番号を入力することで、2番目のセッションを再接続することができます。
- screen –r 1835
二つの別々のコンピュータまたはターミナルウィンドウにセッションを接続したい場合はどうしますか?セッションを共有するために、-xフラグを使用することができます。
- screen –x
ステップ4 – スクリーン内の端末の管理
screen内で実行するターミナルセッションを管理するためのいくつかのコマンドがあります。
テキストをコピーするには、Ctrl-a [ を使用できます。
以下は、ネイティブな日本語での一つのオプションです。
矢印キーまたはHJKLで操作できるカーソルが表示されます。コピーを開始したい位置に移動し、Enterキーを押してください。コピーしたい範囲の終わりまで移動し、再度Enterキーを押してください。テキストはクリップボードにコピーされます。
気をつけるべきことは、これは画面のスクロール機構でもあるということです。画面外にあるテキストを見る必要がある場合は、Ctrl-a [を押して画面外にスクロールすることができます。
私たちはCtrl-a]でコピーしたテキストを貼り付けることができます。
もうひとつやってみたいことは、別の画面ウィンドウで実行されているプログラムを監視することです。
仮に、一つのウィンドウで何かをコンパイルしているとしましょう。そして、それが完了した時に知りたいとします。そんな時、Ctrl-a _ を使用して、screenにそのウィンドウの無音状態を監視させることができます。30秒間何の出力も生成されなかった場合、通知されます。
別の例で試してみましょう。画面がウィンドウがGoogleに4回pingを完了したら教えてくれるようにしましょう。
- ping –c 4 www.google.com
Ctrl-aを入力してください。
The window is now being monitored for 30 sec. Silence.
このウィンドウでの作業が完了したら、他のウィンドウで作業を行いながら、Ctrl-a 1 を入力することで通知が届きます。
Window 2: silence for 30 seconds
私たちは逆のこともできます。特定のウィンドウで活動が起こった場合にアラートを受けることもできます。
- sleep 20 && echo “output”
それから、Ctrl-a Mを入力してください。
Window 2 (bash) is now being monitored for all activity.
コマンドが出力を生成した際にアラートが表示されるようになりました。結果を見るためには、Ctrl-a 1を使ってください。
Activity in window 2
重要な変更が行われることになり、実行したすべてのコマンドのログを残したいと考えています。セッションをCtrl-a Hでログ記録することができます。
Creating logfile “screenlog.1”.
画面の領域
複数のウィンドウを同時に表示する必要がある場合、スクリーンは「領域(リージョン)」と呼ばれるものを使用することができます。現在の領域を分割して、さらに複数の領域を作成します。現在の領域を水平方向に分割するには、Ctrl-a S を使用できます。
以下の文を日本語で言い換えると、「現在のウィンドウを画面の上半分に移動し、その下部に新しい空の領域を開きます。Ctrl-a [tab]で下部の画面に移動できます。」
その後、下部領域に新しいウィンドウを作成するか、通常の方法で別のウィンドウにビューを変更することができます。
現在の領域を終了したい場合は、Ctrl-a X を使用できます。
その領域は実際のウィンドウを破壊することなく破壊します。つまり、その領域でプログラムを実行していた場合でも、通常のウィンドウとしてアクセスすることができますが、そのウィンドウの中身が破壊されます。
縦方向での分割を行いたい場合は、Ctrl-a | を使用することができます。
縦分割のコントロールは、横分割と同じです。もし私たちが異なる領域を追加して、1つの領域に戻りたい場合は、Ctrl-a Qを使用して、現在の領域以外の全ての領域を破棄することができます。
ステップ5 – スクリーンと一緒にByobuを使用する
画面の素晴らしい拡張機能は、byobuと呼ばれるプログラムです。これはscreenをラッピングして高度なユーザーエクスペリエンスを提供します。Ubuntuでは、次のコマンドでインストールすることができます。
- sudo apt install byobu
始める前に、Byobuにバックエンドとしてscreenを使用するように伝える必要があります。次のコマンドでそれを実行できます。
- byobu-select-backend
Select the byobu backend: 1. tmux 2. screen Choose 1-2 [1]:
私たちは、ここで画面を選んで、デフォルトのターミナルマネージャとして設定することができます。
今は、セッションを開始するために画面をタイプする代わりに、byobuと入力することができます。
- byobu
Ctrl-aを最初に入力すると、byobuにそれをスクリーンコマンドとして認識させるように指示する必要があります。
Configure Byobu’s ctrl-a behavior… When you press ctrl-a in Byobu, do you want it to operate in: (1) Screen mode (GNU Screen’s default escape sequence) (2) Emacs mode (go to beginning of line) Note that: – F12 also operates as an escape in Byobu – You can press F9 and choose your escape character – You can run ‘byobu-ctrl-a’ at any time to change your selection Select [1 or 2]:
通常通りにByobuを使用するためには、1を選択してください。
インターフェースは、ウィンドウのリストやシステム情報など、多くの便利な情報を提供します。Ubuntuでは、セキュリティのアップデートが必要なパッケージ数が、赤い背景に感嘆符がついた数字で表示されます。
byobuとscreenの違いの一つは、byobuがセッションを管理する方法です。byobuをデタッチした後でも、再度byobuを実行すると、新しいセッションを作成するのではなく、以前のセッションに再アタッチされます。
新しいセッションを作成するには、byobu -S を使用してください。
- byobu –S sessionname
新しいセッションに呼びたい名前でセッション名を変更してください。現在のセッションのリストは以下で確認できます。
- byobu –ls
There are screens on: 22961.new (07/01/2013 06:42:52 PM) (Detached) 22281.byobu (07/01/2013 06:37:18 PM) (Detached) 2 Sockets in /var/run/screen/S-root.
もし複数のセッションがある場合、byobuを実行すると、接続したいセッションを選ぶためのメニューが表示されます。
- byobu
Byobu sessions… 1. screen: 22961.new (07/01/2013 06:42:52 PM) (Detached) 2. screen: 22281.byobu (07/01/2013 06:37:18 PM) (Detached) 3. Create a new Byobu session (screen) 4. Run a shell without Byobu (/bin/bash) Choose 1-4 [1]:
現在のセッションのいずれかを選択することもできますし、新しいbyobuセッションを作成することもできますし、byobuを使わずに新しいシェルを取得することもできます。
リモートで管理しているクラウドサーバーに役立つオプションの一つは、セッションにログインするたびに自動的にbyobuを起動させることです。これにより、セッションが切断されても作業が失われることはなく、再接続して以前の状態に戻ることができます。
自動的にByobuをログイン時に開始するために、ターミナルに次のコマンドを入力してください。
- byobu-enable
The Byobu window manager will be launched automatically at each text login. To disable this behavior later, just run: byobu-disable Press <enter> to continue…
「以下にあるように、もしもこの機能を再度オフにしたい場合は、次のように入力してください。」
- byobu-disable
自動的にはもう起動しません。 (Jidō-teki ni wa mō kidō shimasen)
結論
このチュートリアルでは、screenとbyobuをインストールして使用し、ターミナルセッションを管理しました。実行中の複数の環境を切り替えたり、分離したりするためのさまざまなショートカットを学びました。Screenは他のUnixターミナルインタフェースと同様に独特な部分もありますが、パワフルで普及しており、いつ役に立つかわかりません。