Linuxでコンソールを頻繁に使用する人は、複数の端末の必要性に対処する必要がありました。たとえば、ある端末ではテキストファイルを修正し、別の端末ではプログラムをコンパイルします。 この問題を解決する方法は多数あります。たとえば、いくつかの疑似端末を開いたり、いくつかのタブを開いたりします。 この記事では、特定の端末に関連しない方法を検討したいと思います:コンソールウィンドウマネージャー画面を使用します。
それでは、スクリーンとは何ですか?
Screenは、VT100 / ANSI端末エミュレーションを備えたウィンドウマネージャーです。 つまり、これはコンソール内のコンソール、つまり 1つのターミナルセッションを起動することにより、複数のコマンドを並行して実行し、その動作を観察できます。 もちろん、多くの人は、タブをサポートするgnome-terminal、konsole、その他のグラフィカルターミナルエミュレーターが既にあるのに、なぜある種のコンソールウィンドウマネージャーが必要なのかと言うことができますか?
Screenが本当に必要な状況を考えてください。 Linuxサーバーをリモートで管理する責任があるとします。 次に、他の管理者と同様に、SSHを介してサーバーに接続し、さまざまなコマンドを実行します。 別のウィンドウが必要な場合は、別のSSH接続を作成します。 そして、ネットワークが正常に機能している限りすべてがうまくいきますが、いつか予期しないことが起こり、ネットワークが落ち、ローカルコンピューターとリモートサーバーの両方が正常に機能しますが、削除されたセッションはすべて失われ、実行中のプログラムは保存されずに保存されますスクリプトを新たに作成する必要があります(最後の段階でかなり長いプロセスが失敗し、最初からやり直す必要がある場合は特に不快です)。
Screenを使用すると、サーバーへの複数のSSH接続の作成の問題を取り除くだけでなく、ネットワーク障害の場合、簡単に再接続でき、実行中のプログラムはすべて機能し続けます。 問題を解決するには、SSH接続を再作成し、コンソールでscreen -drコマンドを入力するだけです。
私が最近学んだScreenのもう1つの興味深い機能は、すべてのコンソール出力をテキストファイルに書き込むことです。通常、bashはコマンドのリスト(履歴)を書き込み、screenはこれらのコマンドの結果として受け取った出力を書き込むこともできます。 記録を有効にするには、実行中の画面でCtrl-a Hを押す必要があります。記録を完了するには、このキーの組み合わせをもう一度押します。 Screenは、すべてをscreenlog.nファイルに書き込みます。ここで、nはScreenウィンドウ番号に対応する整数です。 通常、私はこの一連のコマンドで結果の「デモ」を失います(記録が番号1のウィンドウからのものであったと仮定します):
時間= 0.1
rows = `wc -l screenlog.1 | awk '{print $ 1}' '
for i in `seq 1 $ rows`; do head-$ i screenlog.1 | テール-1; $時間スリープ; 完了;
リセットする
ここでの時間は遅延時間です(この時間が長いほど、「デモ」の出力が遅くなります)
基本的な(毎日の)Screenコマンドを検討してください。 Screenを起動するには、ターミナルでscreenコマンドを入力する必要があります。 その後、端末は外部から変更されません(スクリーンライセンスのテキストのみが表示される場合があります。特別なスクリーンコマンドを実行するには、最初にCtrl-aキーを押す必要があります(これはすべてのコマンドの前にあるプレフィックスで、設定ファイルを使用して変更できます、しかし記事では、Ctrl-aキーの組み合わせはScreenコマンドのプレフィックスであるという考えに固執します。a)以下は一般的に使用されるコマンドのリストです。
Ctrl-a c-新しい画面ウィンドウを作成します
Ctrl-a n-次のウィンドウに移動
Ctrl-a p-前のウィンドウに移動
Ctrl-a d-すべてのコマンドの実行を継続しながら、現在の画面セッションから切断します
Ctrl-a K-選択したウィンドウを「強制終了」します(ウィンドウ内のプログラムがフリーズし、単独で終了したくない場合に必要です)
Ctrl-a "-すべてのウィンドウをリスト
Ctrl-a A-現在のウィンドウの名前を変更します(ウィンドウを区別するのに便利です。たとえば、「localhost」、「ssh 1.2.3.4」などの名前を付けます。
コマンドの完全なリストを取得するには、 このガイドを使用できます。
Screenの別の興味深い機能、つまり、さまざまなキーボードショートカットへの「バインダー」の指定を検討してください。 まず、Ctrl-aキーバインディングは一種のプレフィックスとしては扱いにくいように見えますが、このプレフィックスを使用してCtrl- \キーボードショートカットを作成する方がはるかに良いでしょう。 これを行うには、.screenrc構成ファイルに次の行を追加します。
エスケープ\ 034 \ 034
また、ウィンドウを移動するたびにCtrl-a nおよびCtrl-a pを入力 するのは不便に思えました。このアクションをそれぞれファンクションキーF1およびF2に割り当てるとよいでしょう。 これを行うには、構成ファイルに追加します。
bindkey -k k1 prev
bindkey -k k2 next
新しいウィンドウで特定のプログラムの起動を特定のキーに割り当てることも興味深いでしょう。 例として、Ctrl-a eキーの組み合わせを使用してウィンドウNo. 5でVimを起動することを検討してください。 これを行うには、構成に次を追加します。
画面のバインド-t 'Vim' 5 vim
画面のもう1つの機能は、個々のウィンドウのアクティビティまたは非アクティビティを監視する機能です。 この機能は、あるウィンドウで長いコンパイルプロセスがあり、ユーザーが別のウィンドウで何かに取り組んでいて、コンパイルがいつ終了するか(非アクティブの監視)またはプログラムが1つのウィンドウで監視されている(検索など)ときにユーザーがいつ知りたいかを知りたい場合に便利ですプログラムは端末にすべての行を出力します(アクティビティ監視)。 この機能を有効にするには、次のキーの組み合わせを押します。
Ctrl-a M(アクティビティを追跡するため)
Ctrl-a _(非アクティブを追跡するため)
これで、私の記事を終わりたいと思います。 Screenプログラムのすべての機能とはほど遠い説明をしましたが、説明した機能はすべての作業に十分です。 最後に、Screenは、コンソールで作業するすべてのLinuxユーザーにとって非常に機能的な検索結果であると言いたいと思います。
追伸これはHabréについての私の最初の記事です。コメントで彼女をあまり蹴らないようお願いしますが、健全な批判はいつでも歓迎します。 ご清聴ありがとうございました。