- 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
出力が進行状況を示しています。
次の部分はキーストロークの連続なので、画像をお見せすることはできません。
ダウンロード プロセスはまだ実行されていますが、ダウンロードを表示するウィンドウは削除されます。 screen
screen
23167.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を押してセッションを切り離します。
-ls
screen
を使って、切り離したセッションの詳細を見るために、次のように入力します。
数字の識別子(23266)の後ろには、セッションの名前(bigfile)が表示されています。
screen -r bigfile
ダウンロード ウィンドウに再接続され、長いダウンロードがまだ進行中であることがわかります。
ダウンロードが完了したら、exit
と入力してセッション ウィンドウを閉じます。
複数のウィンドウで screen を使用する
これまでは、screen
screen
には、それ以上の機能があります。
次のように入力して、「monitor」と呼ばれる画面セッションを開始します。
screen -S monitor
新しいウィンドウ セッションのコマンド プロンプトで、dmesg
-H
-w
(新しいメッセージを待つ)オプションを使用します。
次のように入力します。
dmesg -H -w
既存のメッセージが表示されます。 コマンドプロンプトに戻らないのは、dmseg
が新しいメッセージを待っていて、到着すると表示するからです。
RELATED: Linux での dmesg コマンドの使い方
別のアプリケーションを実行したいので、新しい screen
ウィンドウが必要になります。 Ctrl+A、そしてCを押して、新しいウィンドウを作成します。 ここでは watch
vmstat
を繰り返し実行し、コンピューター上の仮想メモリの使用状況を頻繁に表示するようにします。
新しいコマンド プロンプトで次のように入力します。
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
デモのために、top
screen
を実行しますが、長時間実行されるプロセスや無限に続くプロセスを開始することもできます。
次のように入力します。
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 ”