- Dave McKay
@TheGurkha
- 2020年3月27日、8:00am EDT

Linuxのscreenコマンドを使うと、実行中のターミナルアプリケーションをバックグラウンドに押しやり、見たいときには前方に引き出すことができます。 また、分割画面表示にも対応しており、SSH 接続では、接続を解除して再接続した後でも動作します!
screen コマンドとは
screen コマンドは、ターミナルのマルチプレクサであり、非常に多くのオプションを備えています。 たくさんのことができるというのは、控えめな表現の最たるものです。
screenコマンドを使用する最も一般的なケースは次のとおりで、この記事ではこれらをさらに詳しく説明します。 自分のプロセスがどうなっているかを確認したいときは、ウィンドウを再びフォアグラウンドに戻して(「リアタッチ」)、再び使うことができます。
screen セッションが実行されると、新しいウィンドウを作成して、その中で他のプロセスを実行できます。 ウィンドウ間を簡単に行き来して、進行状況を監視することができます。 screen セッションを開始して、プロセスを起動することができます。 screenセッションを共有することで、2人が同じものをリアルタイムで見ることができます。screenのインストール
ubuntuでscreenをインストールするには、次のコマンドを使用します:
sudo apt-get install screen

Manjaroでscreenをインストールするには、次のコマンドを使用します:
sudo pacman -Sy screen

Fedoraの場合、次のように入力します:
sudo dnf install screen

Getting Started with screen
screenを起動するには、以下のように入力してEnterキーを押すだけです:
screen

ライセンス情報のページが表示されます。

あなたはコマンドプロンプトのままで、特に何も起こっていないように見えます。 しかし、あなたは今、多重化されたターミナル エミュレーター内でシェルを実行しています。 これはなぜ良いことなのでしょうか? さて、完成までに長い時間がかかりそうなプロセスを始めましょう。 最新の Linux カーネルのソース コードをダウンロードして、latest_kernel.zipというファイルにリダイレクトします。
そのためには、次のように入力します:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip

ダウンロードが開始され、curl出力が進行状況を示しています。

次の部分はキーストロークの連続なので、画像をお見せすることはできません。
ダウンロード プロセスはまだ実行されていますが、ダウンロードを表示するウィンドウは削除されます。 screenscreen23167.pts-0.howtogeekウィンドウが取り外されたことを伝えています。
ウィンドウを再び取り付けるには、ウィンドウ名の先頭からの番号が必要です。
screen -ls

準備ができたら、-r (reattach)オプションとセッションの番号を使って、次のように再接続することができます。
screen -r 23167

バックグラウンドで作業していたウィンドウが、まるで何事もなかったかのようにターミナルウィンドウに戻ってきました。
と入力して、screenを終了させます。
次のコマンドを入力してください:
exit

以前のターミナル ウィンドウに戻り、ウィンドウを再接続するために使用したコマンドが表示されたままになります。 唯一の切り離されたウィンドウを閉じたので、screenが終了するというメッセージが表示されます。

RELATED: How to Use curl to Download Files from the Linux Command Line
Using Named screen Sessions
-S (session name)オプションを使用して、screenセッションに名前を付けることができます。 セッションの数値IDではなく、覚えやすい名前を使うと、セッションに再接続するときに便利です。 次のように入力して、セッションに「bigfile」という名前を付けます:
screen -S bigfile

screenがセッションを起動すると、コマンドプロンプトが表示された空白のウィンドウが表示されます。
次のように入力します。
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

ダウンロードが始まったら、Ctrl+Aを押して、Dを押してセッションを切り離します。
-lsscreen を使って、切り離したセッションの詳細を見るために、次のように入力します。
数字の識別子(23266)の後ろには、セッションの名前(bigfile)が表示されています。
screen -r bigfile

ダウンロード ウィンドウに再接続され、長いダウンロードがまだ進行中であることがわかります。

ダウンロードが完了したら、exitと入力してセッション ウィンドウを閉じます。
複数のウィンドウで screen を使用する
これまでは、screenscreenには、それ以上の機能があります。
次のように入力して、「monitor」と呼ばれる画面セッションを開始します。
screen -S monitor

新しいウィンドウ セッションのコマンド プロンプトで、dmesg-H-w (新しいメッセージを待つ)オプションを使用します。
次のように入力します。
dmesg -H -w

既存のメッセージが表示されます。 コマンドプロンプトに戻らないのは、dmsegが新しいメッセージを待っていて、到着すると表示するからです。

RELATED: Linux での dmesg コマンドの使い方
別のアプリケーションを実行したいので、新しい screen ウィンドウが必要になります。 Ctrl+A、そしてCを押して、新しいウィンドウを作成します。 ここでは watchvmstat を繰り返し実行し、コンピューター上の仮想メモリの使用状況を頻繁に表示するようにします。
新しいコマンド プロンプトで次のように入力します。
watch vmstat

vmstat出力が表示され、2秒ごとに更新されます。

2つのプロセスが実行されています。 screenウィンドウの間をホップするには、Ctrl+Aを押して、ウィンドウの番号を入力します。 最初に作ったのがウィンドウゼロ(0)、次がウィンドウ1、という具合です。 最初のウィンドウ (dmesg) にホップするには、Ctrl+A と 0 を押します。

Ctrl+Aと1を押すと、vmstat ウィンドウに戻ります。

これはかなり気が利いていますね。 Ctrl+A、そしてDを押すと、このセッションから切り離すことができ、後で再接続することができます。 両方のセッションが実行されたままになります。
次のステップでは、2つの画面を1つのウィンドウで表示してみましょう。 このとき、ターミナルウィンドウをこのステップが有効になるような大きさに引き伸ばします。
この例では、スクリーンショットのサイズに制限されているため、ウィンドウは少し窮屈に見えるでしょう。
これを行うには、Ctrl+A、そして Shift+S (大文字の “S” が必要です) を押します。”

上部の領域には vmstat が表示されたままで、下部の領域は空白です。 下のスクリーンショットでは、カーソルが強調表示されています。

カーソルは下部領域に移動しますが、これは本当にただの空のスペースです。 これはシェルではないので、何も入力できません。
- Ctrl+A, S: ウィンドウを水平に分割します。
- Ctrl+A, Tab: 下の領域に移動します。
- Ctrl+A, 0: 下の領域にウィンドウのゼロを表示
さらに一歩進めてみましょう。 今度は下の領域を縦に分割して、3つ目の処理をディスプレイに追加してみましょう。 カーソルが下の領域にある状態で、Ctrl+A と C を押して、シェルが入った新しいウィンドウを作成します。

次に、ファイル システムの使用状況を確認するために df コマンドを実行します。
df

dfが実行されているのを確認したら、Ctrl+Aとパイプ文字(|)を押します。 これで、下の領域が垂直に分割されます。 Ctrl+A と Tab を押して、新しいリージョンに移動します。

また、リージョンからリージョンへ移動し、さらに垂直または水平方向の分割を追加することもできます。
- Ctrl+A: 現在のリージョンと前のリージョンの間を行き来する。
- Ctrl+A, Q: 現在のリージョン以外のすべてのリージョンを閉じる。
SSH での screen の使用
screen を使用すると、ウィンドウ セッションを開始し、バックグラウンドで実行されているように切り離し、ログオフまたは再ログインして、セッションを再接続することができます。
では、sshコマンドを使って、別のコンピュータから自分のコンピュータに SSH 接続してみましょう。
この例では、次のように入力します。
ssh [email protected]

リモートコンピューターで認証してログインした後、以下のように入力して「ssh-geek」というscreenセッションを開始します。
screen -S ssh-geek

デモのために、topscreenを実行しますが、長時間実行されるプロセスや無限に続くプロセスを開始することもできます。
次のように入力します。
top

ウィンドウ内でtopが実行されたら、Ctrl+A、そしてDを押してウィンドウを切り離します。

元の、リモートのターミナルウィンドウに戻りました。

以下のようにexitと入力すると、SSHセッションが切断され、ローカルコンピュータに戻ります。
exit

次のように入力して再接続します。
ssh [email protected]

再接続してログインした後、次のように入力して、screenセッションを再接続します。
screen -r ssh-geek

これで、まだ実行中の top のインスタンスに再接続されました。

これは、あるマシンでプロセスを開始し、別のマシンで中断したところから再開したい場合に最適です。
RELATED: How to Create and Install SSH Keys From the Linux Shell
Sharing a screen session
また、screenセッションを使用することで、2人の人間が同じウィンドウを見て操作することができます。 例えば、Fedoraを使用している人が、私たちのUbuntuサーバーに接続したいとします。
その人は次のように入力します。
ssh [email protected]

接続後、-S (セッション名)オプションを使って「ssh-geek」というスクリーンセッションを開始します。 また、-d (detach) および -m (enforced creation) オプションを使用して、すでに切り離されている新しい screen セッションを作成します。
彼は次のように入力します:
screen -d -m -S ssh-geek

彼は、-X (マルチスクリーンモード)オプションを使用してセッションを添付しながら、次のように入力します:
screen -X ssh-geek

Manjaro のコンピューターで、別の人が同じアカウントの認証情報を使って Ubuntu のコンピューターに接続します。
ssh [email protected]

接続されたら、screen コマンドを入力し、-X (マルチスクリーン モード) オプションを使用して、次のように同じウィンドウ セッションに参加します。
screen -X ssh-geek

これで、どちらかが入力したものは、もう一方にも表示されるようになります。


二人は今、リモートの Ubuntu コンピューター上で実行されている screen セッションを共有しています。
1987 年に初めて日の目を見たソフトウェアであるにもかかわらず、screen はいまだに生産性に優れています。
RELATED: 37 Important Linux Commands You Should Know
Dave McKay氏は、パンチングテープが流行っていた頃に初めてコンピューターを使い、それ以来ずっとプログラミングを続けています。 IT業界での30年以上の経験を経て、現在はフルタイムの技術ジャーナリストとして活躍しています。 その間、フリーランスのプログラマー、国際的なソフトウェア開発チームのマネージャー、ITサービスのプロジェクトマネージャー、そして最近ではデータ保護責任者として活躍しています。 また、Linuxのエバンジェリストであり、オープンソースの提唱者でもあります。Read Full Bio ”