Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

多くの人に知られていない優秀なツール、それが「screen」です。専門的に言えば「ターミナルマルチプレクサ」と呼ばれるものですが、ターミナルを何らかの目的で使うすべての人にとって、必ず持っておくべき武器だと断言できます。それほど便利なツールなのです。

screenを使えば、ターミナルでのマルチタスクが驚くほど簡単になります。複数のツールをそれぞれ独立したセッションで並行して実行でき、一度「screen」上で起動した処理は、自由にデタッチ(切り離し)して、後から再アタッチ(再接続)することが可能です。「切り離されたセッションで処理を走らせ続けられる」この特性により、複数のツール間を自在に行き来できるようになります。

毎日ターミナルで多数の作業をこなしているなら、すでに使っているか、あるいは一度試せば手放せなくなるはずです。

screenのインストール

screenは古くからある実績のあるツールで、ほぼすべてのディストリビューションで利用可能です。Debian、Ubuntu、Mintなどaptを使用するシステムでは、以下のコマンドでインストールできます。

sudo apt install screen

本体が小さく依存関係も少ないため、数秒でインストールが完了し、すぐに使い始められます。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

最初のセッションを作成する

ここでは、すぐに使い始められるよう、screenの基本的な機能のみを紹介します。この記事を読んで気に入ったら、manページでさらに高度な機能も確認してみてください。

使い方は非常にシンプルで、普段ターミナルに入力するコマンドの前に「screen」を付けるだけです。例として、人気のエディタnanoでドキュメントを作成してみましょう。nanoがインストールされていない場合や、他のエディタが好みの場合は、「nano」の部分をお好きなエディタに置き換えてください。

screen nano mte_screen.txt

通常のコマンドの前に「screen」を付けたことで、このコマンドはscreenのセッション内で実行されました。一見何も変化がないように見えますが、次のステップでその効果がわかります。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

セッションからデタッチする

nanoで何か入力したら、Ctrl + A を押した後に D を押してください。nano(使用していたエディタ)が画面から消え、ターミナルには次のようなメッセージが表示されます。

[detached from ターミナルID]

これで、screenを実行する前の元のターミナルに戻りました。しかし、nanoで作業していたセッションは消えていません。バックグラウンドでそのまま動き続けています。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

実行中のセッションに戻る

バックグラウンドでセッションが動いている状態なら、次のコマンドで元の作業画面に復帰できます。

screen -r

Enterキーを押せば、nanoで離れた場所にそのまま戻れます。デタッチと再アタッチは何度でも繰り返し可能です。ただし、これだけではバックグラウンドで動いているアプリが1つあるだけで、本格的なマルチタスクとは言えません。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

2つ目のセッションを作成する

元のターミナルに戻り、nanoのセッションからデタッチした状態で、同じ手順を繰り返して2つ目のセッションで別の作業を実行しましょう。ここでは簡単のため、nanoでもう1つのドキュメントを作成します。

screen nano mte_2nd.txt

もちろん、screenは同じアプリの複数セッションに限定されません。どんなコマンドでも試してみてください。例えば7zで大量のファイルをアーカイブに圧縮するような時間のかかる処理こそ、screenが真価を発揮する場面です。圧縮が終わるのをじっと待つのではなく、セッションをデタッチしてバックグラウンドで処理を続ければよいのです。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

セッションの一覧を確認する

ここまでの手順に従うと、現在2つのセッションが稼働中のはずです。セッションが複数あると、screen -rだけではどのセッションに接続すればいいか判断できないため、以前のようには機能しません。複数セッションがある場合は、まず対象セッションのIDを確認する必要があります。以下のコマンドを入力しましょう。

screen -list

利用可能なすべてのセッションの一覧が表示されます。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

スクリーンショットの例のように、特定のセッションに戻るには、表示されたIDを指定して次のように入力します。

screen -r 14384

または

screen -r 14336

覚えておくと便利な追加機能

完了すると終了するタイプのコマンドをscreen経由で実行した場合、コマンドの終了とともにscreenセッションも終了します。「screenでタスクを実行したのに、アクティブなセッションが表示されない」という場合は、タスクがすでに完了している可能性があります。

こうした場合でもセッションを維持したいときは、コマンドの前にscreenを付ける代わりに、まず「screen」単体で新規セッションを作成し、その中でコマンドを入力してからデタッチしてください。自分で作成したセッション内でコマンドを実行すれば、タスク完了後もセッションは終了しません。

また、screenでは既存のセッション内から新しいセッションを作成することもできます。Ctrl + A を押した後に C を押すだけで、新しいscreenが作成され、そこへ即座に移動します。

その他、頻繁に使うことになる便利なコマンドとして、Ctrl + A の後に以下のキーを組み合わせてください。

  • A:セッションにタイトルを設定し、識別や管理を容易にする
  • K:現在のセッションを強制終了する
  • N / P:次または前のアクティブなセッションへ移動する
  • 0〜9:最初の10個のセッション間を直接移動する

マルチタスクだけじゃない、screenの真の力

最後に最も重要なポイントを紹介します。screenは特定のターミナルに紐づいていません。セッションからデタッチした後、GUI環境であればターミナルウィンドウを閉じても構いませんし、ログアウトしても問題ありません。コンピュータが稼働している限り、セッションは生き続けます。

Linuxターミナルでマルチタスクを実現!「screen」コマンドの使い方徹底解説

つまり、別のターミナルから実行中のセッションに再接続できるのです。スクリーンショットの例では、Mintの標準ターミナルで作成したセッションに、Guakeというドロップダウンターミナルから再アタッチしています。

この意味がまだピンとこない方のために、具体的な活用シーンを考えてみましょう。SSHでリモートから自分のPCにログインし、screenでタスクを開始します。その後デタッチしてログオフしても、処理は完了するまで(あるいは自分が再ログインしてセッションに再接続し、手動で終了させるまで)動き続けます。

これぞ本物の「マルチタスク」と呼べるのではないでしょうか。


  1. Linuxの「at」コマンドでタスクを予約実行する方法|インストールから応用テクニックまで

    初めてアクセスの多いサーバーを管理していた頃、ユーザーが誰もいない時間を見計らってサーバーを再起動する必要がありました。観察してみると、そのタイミングは深夜3時頃でした。「こんなに不便なことはない。再起動のためだけに夜中に起きるなんて…」と思ったのですが、5秒後にはすぐに気づきました。「これはLinuxだ。こんな単純な作業なら簡単に自動化できるはずだ」と。こうしてatコマンドとの出会いが訪れたのです。 atは非常に使いやすいユーティリティです。日付と時刻をコマンドライン引数として渡し、その後に実行したいコマンドを1つ以上入力するだけです。 サーバー環境では、無人での操作が必要になる場面が多い

  2. Macの分割画面(Split View)でマルチタスクを快適に!設定・調整・解除方法を徹底解説

    Macの分割画面(Split View)機能を使えば、リサーチしながらの執筆、動画からの文字起こし、娯楽と仕事の並行など、さまざまなマルチタスクを快適にこなせることをご存じでしょうか? 分割画面とは、画面を2つ以上の領域に分けて複数の作業を同時に行えるようにする機能です。これにより、複数のタブやウィンドウを何度も開いたり閉じたりする手間から解放され、作業効率が大きく向上します。 Macを使っているのに分割表示のやり方を知らない方もご安心ください。この記事で基本の手順から応用テクニックまでわかりやすく解説します。なお、iPadをお持ちの方は、iPadでもほぼ同じ感覚で分割画面機能を利用できます。