序章
Screenは、1つのウィンドウ内で複数のターミナルセッションを使用できるようにするコンソールアプリケーションです。 プログラムはシェルセッション内で動作し、ウィンドウマネージャーがウィンドウを管理する方法と同様に、他のターミナルセッションのコンテナーおよびマネージャーとして機能します。
複数のターミナルウィンドウを作成することが不可能または理想的でない多くの状況があります。 Xサーバーを実行せずに複数のコンソールセッションを管理する必要がある場合、多くのリモートクラウドサーバーに簡単にアクセスする必要がある場合、または他のタスクで作業しているときに実行中のプログラムの出力を監視する必要がある場合があります。 画面の力ですべてのニーズに簡単に対応できます。
インストール
このチュートリアルでは、Ubuntu 12.04を使用しますが、インストールプロセス以外では、すべての最新のディストリビューションですべてが同じである必要があります。
「apt-get」を使用してUbuntuにインストールします。
sudo apt-get update sudo apt-get install screen
基本的な使用法
新しい画面セッションを開始するには、「screen」コマンドを入力するだけです。
screen
Screen version 4.00.03jw4 (FAU) 2-May-06 Copyright (c) 1993-2002 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. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see the file COPYING); if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to [email protected] [Press Space for next page; Return to end.]
プログラムを開始すると、ライセンスページが表示されます。 「Return」または「Enter」を押すだけで続行できます。
次に起こることは驚くべきことかもしれません。 通常のコマンドプロンプトが表示され、何も起こらなかったようです。 「画面」が正しく実行されませんでしたか? 簡単なキーボードショートカットを試してみましょう。 コントロールキーを押しながら「a」キーを押し、次に「v」キーを押します。
Ctrl-a v
screen 4.00.03jw4 (FAU) 2-May-06
画面からバージョン情報をリクエストしたところ、画面がで正しく実行されていることを確認できるフィードバックを受け取りました。
今こそ、画面を制御する方法を紹介する絶好の機会です。 画面は主にキーボードショートカットを介して制御されます。 画面のすべてのキーボードショートカットの前には「Ctrl-a」が付いています(Ctrlキーを押しながら「a」キーを押します)。 この一連のキーストロークは、次に押すキーに注意を払う必要があることを画面に通知します。
画面に関するバージョン情報を要求したときに、このパラダイムをすでに使用したことがあります。 これを使用して、より有用な情報を取得しましょう。
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でプロセスを監視しています。 しかし、表示されているプログラムに関する詳細情報を見つけるためにいくつかのコマンドを実行する必要がある場合はどうでしょうか。 「トップ」から抜け出す必要はありません。 これらのコマンドを実行するための新しいウィンドウを作成できます。
Ctrl-a c
「Ctrl-ac」シーケンスは、新しいウィンドウを作成します。 これで、他のウィンドウで行っていた監視を中断することなく、必要なコマンドを実行できます。
その別のウィンドウはどこに行きましたか? 新しいコマンドを使用して、元に戻すことができます。
Ctrl-a n
このシーケンスは、実行中の次のウィンドウに進みます。 ウィンドウのリストは折り返されるため、現在のウィンドウを超えるウィンドウがない場合は、最初のウィンドウに戻ります。
Ctrl-a p
このシーケンスは、現在のウィンドウを反対方向に変更します。 したがって、3つのウィンドウがあり、現在3番目のウィンドウにいる場合、このコマンドは2番目のウィンドウに切り替わります。
同じ2つのウィンドウを切り替えるときに使用する便利なショートカットは次のとおりです。
Ctrl-a Ctrl-a
このシーケンスにより、最近アクセスしたウィンドウに移動します。 したがって、前の例では、これにより3番目のウィンドウに戻ります。
この時点で、私たちが作成しているすべてのウィンドウをどのように追跡できるのか疑問に思われるかもしれません。 ありがたいことに、screenには、さまざまなセッションを管理するためのさまざまな方法が用意されています。 まず、3つの新しいウィンドウを作成して合計4つのウィンドウを作成し、次に最も単純なウィンドウ管理ツールの1つである「Ctrl-aw」を試してみます。
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番目のウィンドウ)にいることがわかります。 では、どうすればウィンドウ#1にすばやく到達できますか?
Ctrl-a 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 $
今回は実際のナビゲーションメニューを取得します。 viテキストエディタの場合と同じように、上矢印と下矢印、または「j」と「k」のいずれかを使用してナビゲートできます。 「Return」または「Enter」を押してウィンドウに切り替えます。
これは非常に便利ですが、現在、すべてのウィンドウに「bash」という名前が付けられています。 それはあまり役に立ちません。 いくつかのセッションに名前を付けましょう。 名前を付けるウィンドウに切り替えてから、「Ctrl-aA」シーケンスを使用します。
Ctrl-a 0 Ctrl-a A
Set window's title to: bash
「Ctrl-aA」シーケンスを使用して、セッションに名前を付けることができます。 これで、「bash」の上にバックスペースして、好きな名前に変更できます。 ウィンドウ#0で再び「top」を実行するので、「monitoring」という名前を付けます。
Set window's title to: monitoring
Ctrl-a “
Num Name Flags 0 monitoring $ 1 bash $ 2 bash $ 3 bash $
これで、ウィンドウ#0のより役立つラベルができました。 したがって、ウィンドウを作成して名前を付ける方法はわかっていますが、ウィンドウが不要になったときにウィンドウを削除するにはどうすればよいでしょうか。 「kill」を表す「Ctrl-ak」シーケンスを使用します。
Ctrl-a k
Really kill this window [y/n]
スクリーンセッションの管理
画面を終了してすべてのウィンドウを強制終了する場合は、このコマンドシーケンスを使用できます。
Ctrl-a \
Really quit and kill all your windows [y/n]
これにより、画面セッションが破棄されます。 作成したウィンドウと未完成の作業はすべて失われます。
しかし、私たちは「スクリーン」を使用することの大きな利点の1つを探求したいと思います。 セッションを破棄するのではなく、単にセッションを切り離したいだけです。 デタッチすると、screenインスタンス内のプログラムを引き続き実行できますが、ベースコンソールセッション(最初に「screen」を開始したセッション)に戻ることができます。 スクリーンセッションはまだそこにあり、バックグラウンドで管理されるだけです。
Ctrl-a d
[detached from 1835.pts-0.Blank]
これで、セッションが切り離されました。 どうすればそれに戻ることができますか?
screen –r
「r」は再接続を表します。 スクリーンセッションに戻りました。 ただし、複数の画面セッションがある場合はどうなりますか? スクリーンセッションを開始してデタッチしてから、 new スクリーンセッションを開始してそれもデタッチした場合はどうなりますか?
screen Ctrl-a d screen 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
2台の別々のコンピューターまたはターミナルウィンドウにセッションを接続する場合はどうなりますか? セッションを共有できる「-x」フラグを使用できます。
screen –x
画面内の端末の管理
画面内で実行するターミナルセッションを管理するのに役立つコマンドがいくつかあります。
テキストをコピーするには、次のシーケンスを使用できます。
Ctrl-a [
これにより、矢印キーまたはh、j、k、lキー(viなど)で移動できるカーソルが表示されます。 コピーを開始したい場所に移動し、「Return」または「Enter」を押します。 コピーしたい場所の最後に移動し、もう一度「戻る」または「Enter」を押します。 次に、テキストがクリップボードにコピーされます。
注意すべきことの1つは、これが画面のスクロールメカニズムでもあるということです。 画面外のテキストを表示する必要がある場合は、「Ctrl-a [」を押してから、画面から上にスクロールします。
コピーしたテキストを右角かっこで貼り付けることができます。
Ctrl-a ]
別の画面ウィンドウで実行されているプログラムを監視することもできます。
1つのウィンドウで何かをコンパイルしていて、それがいつ完了したかを知りたいとします。 「Ctrl-a_」シーケンスを使用して、そのウィンドウの無音状態を監視するように画面に要求できます。これにより、30秒間出力が生成されなかったことが通知されます。
もっと簡単な例で試してみましょう。 私たちのウィンドウがグーグルに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
逆のことをして、特定のウィンドウでアクティビティが発生したときにアラートを受け取ることもできます。 これは、「Ctrl-aM」シーケンスで実現します。
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
これにより、現在のウィンドウが画面の上半分に移動し、その下に新しい空白の領域が開きます。 「tab」キーを使用して下の画面に移動できます。
Ctrl-a [tab]
次に、下部の領域に新しいウィンドウを作成するか、通常の方法でビューを別のウィンドウに変更できます。
現在の領域を強制終了する場合は、次のシーケンスを使用できます。
Ctrl-a X
それは実際のウィンドウを破壊することなく領域を破壊します。 これは、そのリージョンでプログラムを実行している場合でも、通常のウィンドウとしてそのプログラムにアクセスでき、そのウィンドウへのビューが単に破棄されたことを意味します。
垂直分割を行う場合は、代わりに次のシーケンスを使用できます。
Ctrl-a |
注:これは1(ナンバーワン)またはL文字ではありません。 これは「パイプ」文字であり、ほとんどのキーボードの「\」と同じキーにあります。
垂直分割のコントロールは、水平分割と同じです。 いくつかの異なるリージョンを追加し、単一のリージョンに戻りたい場合は、このシーケンスを使用できます。これにより、現在のリージョンを除くすべてのリージョンが破棄されます。
Ctrl-a Q
屏風を使う
画面の大きな機能強化は、「屏風」と呼ばれるプログラムです。 画面のラッパーとして機能し、ユーザーエクスペリエンスを向上させます。 Ubuntuでは、次のコマンドでインストールできます。
sudo apt-get install byobu
始める前に、屏風に画面をバックエンドとして使用するように指示する必要があります。 これは、次のコマンドで実行できます。
byobu-select-backend
Select the byobu backend: 1. tmux 2. screen Choose 1-2 [1]:
ここで画面を選択して、デフォルトのターミナルマネージャーとして設定できます。
これで、「画面」と入力してセッションを開始する代わりに、「屏風」と入力できます。
byobu
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-24-virtual i686) * Documentation: https://help.ubuntu.com/ Welcome to the light, powerful, text window manager, Byobu. You can toggle the launch of Byobu at login with: 'byobu-disable' and 'byobu-enable' For tips, tricks, and more information, see: * http://bit.ly/byobu-help justin@Blank:~$ u? 12.04 0:* 118! 3h55m 2.00 2.0GHz 496M6% 2013-07-01 18:19:21
ご覧のとおり、これで画面が素敵なインターフェイスにラップされました。
初めて「Ctrl-a」を入力するときは、それをEmacsコマンドではなく画面コマンドとして認識するように屏風に指示する必要があります。
Ctrl-a
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]:
屏風を通常通り使用するには、「1」を選択します。
インターフェイスは、ウィンドウリストやシステム情報など、多くの有用な情報を提供します。 Ubuntuでは、セキュリティ更新プログラムがいくつのパッケージにあるかがわかります。番号の後に赤い背景に感嘆符が続きます。
屏風と画面の違いは、屏風が実際にセッションを管理する方法です。 切り離した後、もう一度「屏風」と入力すると、新しいセッションを作成するのではなく、以前のセッションを再接続するだけです。
新しいセッションを作成するには、次のように入力する必要があります。
byobu –S sessionname
「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 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]:
現在のセッションのいずれかを選択したり、新しい屏風セッションを作成したり、屏風を使用せずに新しいシェルを取得したりすることもできます。
リモートで管理しているクラウドサーバーで役立つ可能性のあるオプションの1つは、セッションにログインするたびに屏風を自動的に起動することです。 つまり、セッションから切断された場合でも、作業が失われることはなく、再接続するだけで以前の場所に戻ることができます。
ログインするたびに屏風が自動的に起動するようにするには、ターミナルに次のように入力します。
byobu-enable
The Byobu window manager will be launched automatically at each text login. To disable this behavior later, just run: byobu-disable Press to continue...
それが言うように、この機能を再びオフにしたい場合は、単に次のように入力します。
byobu-disable
自動的に起動しなくなります。