画面またはGNU画面はターミナルマルチプレクサです。これを使用すると、コンソールベースのアプリケーション、インタラクティブコマンドシェル、コースベースのアプリケーションなどをいくつでも実行できます。画面を使用して、誤って端末を閉じた後、またはログアウトして後でプログラムを実行し続けることができます。どこにいてもすぐに再開できます。
実際の例は、sshセッションがあるリモートLinuxマシンでタスクを実行している場合です。このsshセッションが終了し、作業できなくなるのを何度も目にしました。セッションを再開するのに役立つ画面ユーティリティがあります。
画面はどのように機能しますか?
screenが呼び出されると、シェル(または指定されたコマンド)を含む単一のウィンドウが作成され、通常どおりにプログラムを使用できるように邪魔になりません。その後、いつでも、他のプログラム(より多くのシェルを含む)を含む新しい(フルスクリーン)ウィンドウを作成したり、現在のウィンドウを強制終了したり、アクティブなウィンドウのリストを表示したり、ウィンドウ間でテキストをコピーしたり、ウィンドウを切り替えたりすることができます。 。
画面はセッションを管理します 1つ以上のウィンドウで構成されます それぞれにシェルまたは他のプログラムが含まれています。さらに、画面は端末ディスプレイを複数の領域に分割できます。 、それぞれがウィンドウの内容を表示します。すべてのウィンドウは、互いに完全に独立してプログラムを実行します。プログラムは、ウィンドウが現在表示されていないときや、画面セッション全体がユーザーの端末から切り離されているときでも実行を継続します。これは、不本意なsshタイムアウトセッションを防ぐために実用的です。
それでは、Linuxでこのユーティリティを使用する方法を確認しましょう。
1)新しいウィンドウを呼び出す
screenコマンドがシステムにまだ存在しない場合は、以下のコマンドを使用してインストールできます。
Debianについて
# apt-get install screen
Centosについて
# yum install screen
コマンドプロンプトでscreenと入力するだけで、画面を開始できます。この画面コマンドは、画面内に新しいウィンドウを開始します。
# screen
画面内で新しいウィンドウを開始したり、ウィンドウに名前を付けたりすることもできます(たとえば、アロフト)。その名前で識別されるセッションを作成します。この名前は、後の段階で再接続するために使用できます。
# screen -S aloft
通常のCLI環境と同じようにすべての作業を実行できることに注意してください。
2)すべての画面プロセスを一覧表示します
画面内で新しいウィンドウを起動できるため、バックグラウンドで実行されている画面を含め、現在開いている画面を表示することができます。既存のすべての画面セッションが一覧表示されます。
# screen -ls
There is a screen on:
10437.aloft (Attached)
1 Socket in /var/run/screen/S-root.
3)画面のメインコマンド
いくつかのコマンドを使用して画面を操作することが可能です。より便利な主なコマンドを以下にリストします。
-
Ctrl-a
続いてc
:新しいウィンドウを作成する -
Ctrl-a
続いてw
:現在開いているすべてのウィンドウのリストを表示します -
Ctrl-a
続いてA
:現在のウィンドウの名前を変更します。Ctrl-a
で開いたウィンドウのリストを一覧表示すると名前が表示されます 続いてw
。 -
Ctrl-a
続いてn
:次のウィンドウに移動します -
Ctrl-a
続いてp
:前のウィンドウに移動します -
Ctrl-a
続いてCtrl-a:最後に使用したウィンドウに戻ります。 -
Ctrl-a
0からXまでの数字が続きます:ウィンドウn°Xに移動します。 -
Ctrl-a
続いて"
:移動先のウィンドウを選択します。 -
Ctrl-a
続いてk
:現在のウィンドウを閉じる(kill) -
Ctrl-a
続いてS
:現在のウィンドウを水平に分割します。ウィンドウを切り替えるには、Ctrl-a
を実行します 続いてTab
。 -
Ctrl-a
続いて|
:現在のウィンドウを垂直に分割します -
Ctrl-a
続いてd
:画面セッションを停止せずに切り離します -
Ctrl-a
続いてr
:切り離された画面セッションを再接続します -
Ctrl-a
続いて[
:コピーモードを開始します -
Ctrl-a
続いて]
:コピーしたテキストを貼り付けます
4)画面パラメータを表示
ヘルプのためにすべての画面のパラメータを一覧表示できます。これを行うには、Ctrl-a
と入力します その後に文字?
が続きます 。すべてのコマンドのリストが表示されます。
5)デタッチセッション
screenコマンドの最大の利点は、画面セッションを切り離すことができることです。オフィスの1台のコンピューターで画面セッションを開始し、ローカル端末からセッションを切り離して、家に帰り、オフィスのコンピューターにリモートでログインして、画面セッションを自宅のコンピューターの端末に再接続できます。その間、オフィスのコンピューター上のすべてのジョブは実行され続けました。この機能は、ssh接続の切断中に突然発生するデータの損失を防ぐために使用されます。
私たちが話していることをよく理解するために、例を見てみましょう。インストールプロセスを開始します。
次に、Ctrl-a
を使用して画面を切り離します 続いてd
。以下のコマンドで確認できます。
# screen -ls
There is a screen on:
12449.win (Detached)
1 Socket in /var/run/screen/S-root.
screen -d
で画面を切り離すことができます コマンドの後に画面IDまたはその名前が続きます。これは、現在のコンソールでプロセスが進行中の場合、セッションを切り離すために別のウィンドウまたはコンソールを開く必要があることを意味します。まず、現在接続されている画面を一覧表示する必要があります。
# screen -ls
There is a screen on:
13686.win200 (Attached)
1 Socket in /var/run/screen/S-root.
新しい端末で、以下のコマンドを入力します。
# screen -d 13686
または、名前を使用できます
# screen -d win200
画面が切り離されたことを示す以下の出力が表示されます。
[remote detached from 13686.win200]
6)セッションを再接続します
画面を切り離した後、コマンドで再接続することができます。通常、画面セッションはまだ機能しているため、すべてのプロセスが停止することはありません。セッションを再接続する前に、上記のようにセッションをリストしてから、再接続するセッションを選択する必要があります。
# screen -r 13686
または使用できます
# screen -r win200
セッションを再接続した後、ウィンドウに完了したプロセスの終了が表示されていることがわかります。これは、sshで作業し、自宅で再接続するセッションを切り離して、何も失うことなく作業プロセスを続行できることを意味します。
7)新しいインタラクティブシェルを作成します
やるべき仕事がいくつかあり、仕事を失いたくない場合は、新しいインタラクティブシェルを作成することができます。 1つのターミナルウィンドウでいくつかのインタラクティブシェル(0からXまでの番号)を簡単に開くことができます。新しいセッションを開始すると、シェル0になります。 。
これを行うには、Ctrl-a
を使用して既存のウィンドウ内に新しいウィンドウを作成する必要があります 続いてc
。以下のようなものになります。
画面3が表示されます スクリーンショットの上部にあり、3番目の画面にいることを示しています。下部には、 3も表示されます。
8)画面ウィンドウを切り替えます
複数の画面ウィンドウを開いたときに各ウィンドウを切り替えるには、Control-a
を押します。 続いてspace
またはシェルの数。たとえば、シェル番号1に切り替えるには、Control-a
を押します。 次に1
。たとえば、最初の画面に移動します。
スクリーンショットの上部と下部は、最初の画面にいることを示しています。
9)分割ウィンドウ
作業のグローバルビューを表示するには、複数のウィンドウを使用する代わりに、ウィンドウを分割する必要があります。 Ctrl-a
続いてS
または|
画面を水平または垂直に分割します。無制限に操作を繰り返すことができます。別のウィンドウを移動するには、Ctrl-a
を使用します 続いてTab
。
カーソルが下部のウィンドウにある場合、新しいウィンドウを作成できます(Ctrl-a
続いてc
)または既存のウィンドウを呼び出します(Ctrl-a
後に番号が続きます。
分割されたウィンドウを閉じるには、Ctrl-a
を使用します 続いてX
(大文字であることに注意してください。)
10)切断されたsshセッションに再接続します
初めてログインするとき
- screenを実行して画面セッションを開始します。別のシェルを取得し、その中でコマンドを実行します。
# screen -S remote_session
- 終了したら、画面セッションをデタッチしてからsshにログアウトします
[detached from 20995.remote_session]
- 最初にすべての画面セッションを一覧表示できます
# screen -ls
There are screens on:
20995.remote_session (Detached)
14331.daby (Attached)
14134.mom (Detached)
3 Sockets in /var/run/screen/S-root.
- 画面セッションに再接続して作業を続行します
# screen -d -r remote_ression
screenコマンドは、進行中の現在のプロセスを失うことなく、切断後も作業を続行するのに役立つため、sshセッションで最もよく使用されます。
11)画面ウィンドウを上にスクロールします
screenがリモートプログラムの管理を引き継ぐため、screenの実行中にターミナルエミュレータのスクロール機能を使用することはできません。スクロールバックバッファにアクセスするには、Screenコマンドを使用する必要があります。
-
Ctrl-a
を使用します 続いてescape
-
Up
を押します およびDown
矢印キーまたはPgUp
およびPgDn
前の出力をスクロールするためのキー。
スクリーンショットで私のカーソルがどこにあるかがわかります。各仮想端末には、独自のスクロールバックバッファがあります。
12)各画面セッションの所有者を確認する
screen -ls
またはscreen -list
コマンドは、rootの場合でも独自の画面セッションのみを表示します。私の知る限り、それは画面自体と同じくらい良いものです。
/var/run/screen/
の各ユーザーディレクトリでどのユーザーがどの画面セッションを開始したかを確認する場合 。
# ls -lR /var/run/screen
/var/run/screen:
total 0
drwx------ 2 patrick patrick 60 Jun 17 20:47 S-patrick
drwx------ 2 root root 100 Jun 17 19:39 S-root
/var/run/screen/S-patrick:
total 0
srwx------ 1 patrick patrick 0 Jun 17 20:47 21941.pat_session
/var/run/screen/S-root:
total 0
srw------- 1 root root 0 Jun 9 16:45 14134.mom
srwx------ 1 root root 0 Jun 9 01:07 14331.daby
srwx------ 1 root root 0 Jun 17 20:46 20995.remote_session
13)1つのアカウントで画面セッションを共有する
離れた場所から2人で同じアカウントにログインさせることができます。彼らは簡単にスクリーンセッションを共有することができます(つまり、一方が他方をタイプすると、その逆も同様です)。これを行うには:
- 名前付き画面セッションを作成します:
# screen -d -m -S share_session
- ターミナルウィンドウの画面セッションに接続します
# screen -x share_session
- 他の人(同じアカウントにログインしている)もスクリーンセッションに参加してもらいます
# screen -x share_session
他の場所にもまったく同じ出力が表示されます。自分の端末に表示されるものはすべて、他のユーザーの端末にも表示されます。
14)ロック画面セッション
通常のセッションユーザーをロックせずに画面セッションをロックすることが可能です。それはあなたがあなたのコンピュータを離れることができて、誰も許可されていない操作に来ないことを確実にすることができることを意味します。これを行うには、コマンドCtrl-a
を使用します 続いてx
(小文字であることに注意してください。)
Screen used by root <root> on centos-01.
Password:
15)画面セッションを終了します
終了して画面セッションを終了する場合は、コマンドCtrl-a
を使用できます。 続いてk
。確認を求められます。
exitコマンドを使用することもできます。進行中のプロセスを保存する場合は、セッションを終了する前に画面セッションを切り離すことができます。
結論
画面ユーティリティは、ウィンドウのアクティビティまたは非アクティブを監視できます。これは、大きなファイルをダウンロードしたり、コンパイルしたり、出力を待ったりする場合に最適です。そのとき、必要に応じて、screenコマンドを使用してコンピューターからプロセスを開始し、完了したらそれを切り離すことができます。