こんにちは。よっしーです(^^)
今日は、screenコマンドについてご紹介します。
背景
“screen”コマンドは、LinuxやUNIXベースのオペレーティングシステムで使用されるユーティリティです。主な目的は、ターミナルセッションを作成して管理することです。
screenコマンドを使用すると、以下のようなシナリオで便利です:
- マルチタスク: screenを使用すると、1つのターミナルウィンドウ内で複数のターミナルセッションを作成できます。これにより、複数の作業を同時に実行したり、複数のプログラムを監視したりできます。
- リモートアクセス: screenは、リモートマシンに接続している場合に特に便利です。セッションを作成してデタッチ(切断)することができ、後で再アタッチして作業を続けることができます。これにより、ネットワーク接続が途切れても作業を継続できます。
- ロングランニングプロセス: screenは、長時間実行されるプロセスを管理するのに役立ちます。デタッチ/アタッチ機能により、セッションを終了することなくプロセスをバックグラウンドで実行できます。
- セッションの共有: screenを使用して作成したセッションを他のユーザーと共有できます。他のユーザーはセッションにアタッチして同じターミナルセッションを表示し、共同作業ができます。
これらは、screenコマンドの一般的な使用例です。screenは柔軟なツールであり、様々なシナリオで利用されます。詳細な使い方やオプションについては、”man screen”コマンドを使用してマニュアルを参照することができます。
screenコマンドにおける「セッション(session)」とは、ターミナルウィンドウ内で実行される独立した作業環境を指します。セッションは、複数のターミナルセッションを1つの物理的なターミナルウィンドウ内で作成、管理することを可能にします。
自分が使用するきっかけになったのは、上記の2のシナリオでもありますが、リモート端末で作業しているときに、ネットワークが切断されて困った状況になったことがありました。そのときに、ネットワークが切断されても再開できるような方法を調べていたところ、screenコマンドを知り、リモート端末で切断されると困るような作業をするときは、screenコマンドで作業するようになりました。
使用方法
screenコマンドの基本的な使用方法を以下に示します。
新しいセッションの作成
screen
このコマンドを実行すると、新しいscreenセッションが開始されます。
セッションのデタッチ(切断)
Ctrl + A, D を順番に押します。
これにより、セッションはバックグラウンドで実行され続けます。
デタッチしたセッションの再アタッチ
screen -r
これにより、最後にデタッチしたセッションが再びアタッチされます。
screen -r <セッションID>
これにより、セッションを指定してアタッチすることもできます。
セッションIDはscreen -ls
コマンドで確認できます。
アタッチしているセッションの一覧表示
screen -ls
アタッチしているセッションの強制終了
screen -X -S <セッションID> quit
セッションIDはscreen -ls
コマンドで確認できます。
これらの基本的なコマンドを使用することで、screenセッションの作成、デタッチ、再アタッチ、セッションの一覧表示、セッションの終了などが行えます。
便利な使い方
便利なscreenコマンドの使い方をいくつか紹介します:
- ウィンドウのリネーム: screenセッション内のウィンドウにわかりやすい名前を付けることができます。ウィンドウ内で「Ctrl + a」と入力し、次に「a」を押すと、リネームモードに入ります。その後、ウィンドウの名前を編集してEnterキーを押すことで、名前を変更できます。これにより、複数のウィンドウを簡単に識別できます。
- ログの保存: screenセッション内のすべての出力をログファイルに保存することができます。セッション内で「Ctrl + a」と入力し、「H」を押すと、ログの保存を開始します。デフォルトでは、$HOMEディレクトリに「screenlog.<セッションID>」という名前で保存されます。ログを終了するには、デタッチするかセッションを終了します。
- セッション間のコピー&ペースト: screenセッション間でのテキストのコピー&ペーストをサポートしています。セッション内で「Ctrl + a」と入力し、「[」を押してコピーモードに入ります。矢印キーでテキストを選択し、Enterキーを押してコピーします。別のセッションに切り替えて「Ctrl + A」と入力し、「]」を押してペーストします。
- スクロールバック: screenセッション内で過去の出力をスクロールバックして表示することができます。セッション内で「Ctrl + a」と入力し、「[」を押してコピーモードに入ります。スクロールキーを使用して過去の出力を表示し、Enterキーを押して通常のモードに戻ります。
- レイアウトの保存と復元: screenセッションのレイアウト(ウィンドウの配置やサイズ)を保存し、後で復元することができます。セッション内で「Ctrl + a」と入力し、「Ctrl + :」を押し、次に
layout save <ファイル名>
と入力してレイアウトを保存します。後で同じレイアウトを復元するには、「Ctrl + a」と入力し、「Ctrl + :」を押し、layout source <ファイル名>
と入力します。 - ウィンドウの移動と複製: screenセッション内のウィンドウを移動したり、複製したりすることができます。セッション内で「Ctrl + A」と入力し、「:」を押してコマンドラインに切り替え、「move <ターゲットウィンドウ番号>」や「duplicate <ターゲットウィンドウ番号>」と入力します。
- ステータスバーのカスタマイズ: screenセッションのステータスバーをカスタマイズして、有用な情報を表示することができます。セッション内で「Ctrl + a」と入力し、「:」を押してコマンドラインに切り替え、「hardstatus <オプション>」と入力してステータスバーの設定を変更します。例えば、「hardstatus alwayslastline」を使用すると、ステータスバーを常に最下行に表示できます。
- リモートセッションの共有: screenコマンドはリモートセッションの共有にも使用できます。セッション内で「Ctrl + a」と入力し、「:」を押してコマンドラインに切り替え、「multiuser on」を入力してマルチユーザーモードを有効にします。他のユーザーは
screen -x <セッションID>
と入力してセッションにアタッチできます。 - 設定ファイルの使用: screenの設定をカスタマイズするために、設定ファイルを使用することができます。デフォルトの設定ファイルは
$HOME/.screenrc
です。このファイルを編集して、セッションのデフォルト設定やキーバインドを変更することができます。
デメリット
screenコマンドは非常に便利なツールですが、いくつかのデメリットもあります。以下にいくつかの一般的なデメリットを挙げます:
- 学習コスト: screenコマンドは、初めて使用する人にとっては学習コストがかかる場合があります。コマンドの構文やキーバインドを覚える必要があります。初心者にとっては使い方がわかりにくい場合もありますが、練習と経験によって克服できます。
- 複雑さ: screenは強力なツールであり、多くの機能とオプションを提供しています。しかし、それゆえに複雑になりがちです。設定やオプションの管理、セッションの管理など、多くの操作を行う必要があります。これにより、一部のユーザーにとっては使いづらいと感じる場合もあります。
- 視覚的な制約: screenはテキストベースのツールであるため、グラフィカルなインタフェースやウィンドウのリサイズなどの視覚的な機能が制限されています。複数のウィンドウを同時に表示したり、ウィンドウのサイズを自由に変更したりすることが難しい場合があります。
おわりに
今日は、screenコマンドについてご紹介しました。
本番作業などを実施する際は、screenコマンドを使用して作業すると、途中で作業が中断されたりしても、再度アタッチして再開することができるので安心です。作業が完了したら、忘れずにセッションを終了させておきましょう。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント