GNU Screenを適切に使用するには何を知っておくべきですか?[閉まっている]


106

私はちょうど友人をGNU Screenに紹介しました、そして彼らはそれに慣れるのに苦労しています。そのため、優れたScreenユーティリティについて彼が知っておくべき重要なこと、つまり、初心者の誰かにゼロから教える価値があると同じことを考えさせられます。バインドなどを覚えておくための類似点や便利なヒントは何ですか?

素晴らしいものになるだろう。


1
これにもいくつかの良い答えがあります:stackoverflow.com/questions/70661/what-is-gnu-screen
Chris

誰かがこれと同様の質問をServer Faultに投稿しました。
Vagnerr 2009年

誰かがScreenを使い始めたばかりで苦労している場合は、代わりのtmuxをチェックすることをお勧めします。
クリストファーボトムズ2015

回答:


93

私はScreen10年以上使用しており、おそらく機能の半分未満しか使用していません。したがって、すべての機能をすぐに学習する必要はありません(試してみることはお勧めしません)。私の日常のコマンドは次のとおりです。

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

それだと思います。私は時々分割画面機能を使用しますが、確かに毎日ではありません。画面では、事故によっていくつかのランダムなキーの組み合わせを打つため、ロックアップしているように見える場合は、他のチップは両方んです^Q^A ^Q、ロックを解除しようとします。


1
ウィンドウを閉じるには、^ A kをリストに追加する必要があります。
レオ・レオポルド・ヘルツ준 영

7
意図せずに誤って殺してしまう可能性があるため、^ A kは使用しません。代わりに、^ D(またはexit)を使用してウィンドウのシェルを終了します。ウィンドウ内の最後のシェルを終了すると、画面ウィンドウは自動的に閉じます。
グレッグヒューギル

9
「^ A esc-スクロールバックに使用するコピーモード」あなたは男性の神様です。
ロブハワード

4
^ A [はまったく同じことを行います。
atx

^ A ^ Dトリックをありがとう...行き詰まり、セッションに戻ることができませんでした。ケースでは、これは私がここのような画面の基本を説明したが、さらにいくつかのトリックを持ってしばらく物品A書いた誰かに役立ちますgeekpad.ca/blog/post/...を
パトリックは忘れ

36

画面の下部にある「ステータスバー」を設定して、現在使用している「タブ」または「仮想画面」やその他のステータスバーを表示する方法が見つかるまで、画面に慣れることができませんでした。これが私のセットアップです:

[roel@roel ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[roel@roel ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[roel@roel ~]$

3
あまりにも、(スクリーン・プロファイル)屏風チェックアウト:launchpad.net/byobu
ドリュースティーブンス

これは素晴らしいです、ありがとう。端末を分割しようとしたときに実際に何が起こっているのかを理解するのに苦労していました。これらのコマンドを機能させるために、最初にscreenを実行する必要があるとは思いませんでした。
Ogaday 2015年


26

あなたの友人が^ABashの行の先頭に到達するために押す習慣がある場合、彼/彼女は^A画面コマンドのキーバインディングなので、いくつかの驚きのためにいます。通常は、画面がフリーズします。おそらく、後でランダムキーを押したためです^A:-)

それらの場合、私は試します

^A sおよび^A q端末のスクロールのブロック/ブロック解除

それを修正します。画面内の行の先頭に移動するには、キーシーケンスは^A aです。


1
エスケープ文字を^ Aから別の文字に変更するのは簡単です。詳細は回答に記載しました。
Andrew Johnson

3
+ 1 + 1 + 1 ^ A s ...ありがとう...ロック画面:)
Yuji 'Tomita' Tomita

1
@agnul +1 for ^ A a私は通常のbashセッションでは^ Aのユーザーです。スクリーンセッションでは使用できません。素晴らしいヒントをありがとう!:)
icasimpan

画面内でctrl Aを機能させる方法を教えてくれてありがとう100回ありがとう。私のこれまでのすべての人生を探してきました。
user674669 2013年

ここで「A」と「a」の大文字と小文字は区別されますか?
Aditya MP

12

Ctrl+ Aからエスケープキーを別のキーに再マップできるため、それを他の何かに使用する場合、たとえばbashの行の先頭に移動する場合は、〜/に行を追加するだけです。 screenrcファイル。^ bまたは^ Bにするには、以下を使用します。

escape ^bB

コマンドラインから、セッション名を使用して、複数のセッションを制御します。タスクごとに1つのセッションを使用し、それぞれに複数のタブがあります。

  screen -ls#現在のスクリーンセッションを一覧表示します
  screen -S <name>#nameという名前の新しいスクリーンセッションを作成します
  screen -r <name>#指定された画面セッションに接続します

screenを使用する場合、必要なコマンドはわずかです。

  ^ A c新しいシェルを作成する
  ^ A [0-9]スイッチシェル
  ^ A k現在のシェルを強制終了します
  ^ A d画面から切断
  ^ A?ヘルプを表示

優れたクイックリファレンスはここにあります。ブックマークする価値があります。


ネストされたスクリーンセッションを使用します。外側のセッションを開始screen -e^ooするscreen -mためにCtrl + Oを使用してから、内側のセッションを開始して新しいセッションを開始します。
staticsan 2012

1
あなたはその場でエスケープキーを変更することができます。実行中のscreenセッションでは、タイプが^A :続い\Bb^ Bにエスケープキーを設定しますが続きます。一般に、理解できる^A :コマンドを評価できます.screenrc
マラナ2013年

8

画面に慣れているが、manページで読んだことを覚えていない傾向がある人のためのヒント:

  • 画面ウィンドウの名前を変更するのはとても簡単です:ctrl+ A shift+ A
  • 画面から最後のメッセージを見逃しましたか?ctrl+ a ctrl+ mもう一度表示されます。
  • 何かを実行したい場合(ファイルのテーリングなど)、変更があったときにscreenに通知させるには、ターゲットウィンドウでctrl+ A shift+ mを使用します。警告:何か変更がある場合は通知されます。
  • ウィンドウ15を直接選択しますか?あなたの.screenrcファイルでこれらを試してください:
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

これにより、Windows 10〜19にctrl+ a shift+ 0 through 9が割り当てられます。


7

Ctrl+ Aは基本コマンドです

Ctrl+A N = *** N *** ext画面に移動

Ctrl+ A P= *** P ***前の画面に移動します

Ctrl+ A C= *** C ***新しい画面を作成

Ctrl+ A D= *** D ***画面に接続


6

http://www.debian-administration.org/articles/34

私は数年前にそれを書きましたが、それは多くの肯定的なフィードバックを得る良い入門です。


リンクが(事実上)壊れています:$VAR1 = \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (111 "Connection refused") at ../lib/Singleton/DBI.pm line 95. ';
Peter Mortensen

6

これを追加する必要があります:追加

bind s

あなたに.screenrc、あなたならば-私のような-として、使用スプリット・ウィンドウに使用C-a S分割実際のウィンドウが、C-a sそれをフリーズします。そのため、フリーズショートカットを無効にしました。


2
^-Qヒットした場合はフリーズ解除^-S
プラトン

あなたは正しい@プラートです。それでも私はユーザーのいる環境で作業していますが、ほとんどのショートカットは覚えていません...無効にする必要がありました。
Zsolt Botykai 2013

NP私はこのスレッドを最初に見つけて 'freeze'を検索しましたが、探しているものが見つかりませんでした
Plato

6

Ctrl+ aは特別なキーです。

Ctrl+ a d-[d] etach、プログラム(irssi?)をバックグラウンドに残し、家に帰ります。

Ctrl+ a c[c]新しいウィンドウを作成する Ctrl+ a 0-9番号でウィンドウを切り替える

screen -r-切り離されたセッションに戻る

これでユースケースの90%がカバーされます。一度にすべての機能を表示しようとしないでください。


しかし、私が最初に知ったとき、screen私はそれが実際に画面を切り離し再接続することの意味について混乱していました。引用:「...特定のマシンの別のコンソール(リモートコンピューターのssh、IRCセッションなど)で長時間実行タスクを実行し、セッションから切り離し、物理的な場所から別の場所に移動し、接続することができます。 sshを使用してマシンを再起動し、screenセッションに再度接続して作業を続けます。」
JW。


3

.screenrcに最初に加える変更は、エスケープコマンドを変更することです。他の多くの状況とは異なり、基本的な機能と干渉するため、デフォルトのCtrl-Aシーケンスは好きではありません。私の.screenrcファイルに、以下を追加します。

エスケープ `e

それはbacktick-eです。

これにより、バックティックをエスケープキーとして使用できるようになります(たとえば、新しい画面を作成するには、backtick-cを押し、切り離しはbacktick-d、backtick-?はヘルプ、backtick-backtickは前の画面などです)。それが干渉する唯一の方法(そして私は自分の習慣を破る必要がありました)は、コマンドラインでバックティックを使用して実行出力をキャプチャするか、バックティックを含むものを貼り付けます。前者については、BASH $(command)規則を使用して私の習慣を変更しました。後者の場合、私は通常、別のxtermをポップオープンするか、画面から切り離して、バックティックを含むコンテンツを貼り付けます。最後に、文字どおりのバックティックを挿入したい場合は、単にbacktick-eを押します。


鮮やかさ。$(...)を使用するべきだとわかっていても、私は常にバックティックを使用しているので、方法を変更する必要があるかもしれません。バックティックは少し邪魔になりますが、モディファイアを必要とせずに単一のキーを持つのは素晴らしいことです。しかし、なぜ「e」であり、それをどのように覚えていますか?
iconoclast

私は「エスケープ」をテストしましたが、うまく機能し、覚えやすくなっています。バックティックにヒットしても期待した結果が得られない場合は、もう一度ヒットします。
iconoclast

これを実行しましたが、画面でバックティックを実際に入力する方法はありますか?時々、これをする必要がある、そして私はそれをするために外さなければならないのを嫌う...
ギロチョン

@ギルーション:前のコメントはそれを正確に説明しています。
tripleee 2013年

3

Ubuntu Serverの次のバージョンでは、デフォルトで適切なGNU画面設定が行われるようにするための興味深い作業がいくつかあります。これには、画面の下部を使用してすべてのウィンドウとその他の有用なマシンの詳細(更新の数など)を表示することが含まれます利用可能であり、マシンを再起動する必要があるかどうか)。あなたはおそらく彼ら.screenrcをつかんで、あなたのニーズに合わせてカスタマイズすることができます。

私の中で最も便利なコマンド.screenrcは次のとおりです。

shelltitle "$ |bash" # Make screen assign window titles automatically
hardstatus alwayslastline "%w" # Show all window titles at bottom line of term

このように、私は常に開いているウィンドウと、それらのウィンドウで何が実行されているかを常に把握しています。


3

私は次のものを使用しますssh

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

次に、次のbashエイリアスを設定します。

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

sshを使用して上記のエイリアスとiffの新しい画面を開き、画面のタイトルをsshホスト名に変更します。


2

ウィンドウの説明的な名前を使用してスクリーンセッションを設定するのが好きです。^ a Aでは現在のウィンドウに名前を付けることができ、^ a "ではウィンドウのリストが表示されます。完了したら、^ adで画面を切り離し、screen -Rで再接続します


1

を使用screen -d -RRして、特定の画面を自動的に作成/アタッチします。簡単にするためにbash関数を作成しました...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

彼らはのエイリアスを作成し/usr/bin/screen -d -RR -S $name $commandます。たとえば、私はスクリーンセッションでirssiを使用するのが好きなので、(これらの関数の下にある).bashrcで、次のようにします。

mkscreen irc /usr/bin/irssi

それから私はただタイプすることができます irc、ターミナルにしてirssiに入ります。画面 'irc'がまだ存在しない場合は作成され、/ usr / bin / irssiが実行されます(もちろん、自動的に接続されます)。すでに実行されている場合は、再接続して、すでに接続されている他のインスタンスを強制的に切り離します。とてもいいです。

もう1つの例は、perldocsに遭遇したときに一時的な画面エイリアスを作成することです。

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

-aオプション(最初の引数である必要があります)は画面エイリアスを.bashrcに追加し(永続化するため)、-dオプションはそれを削除します(これらは破壊される可能性があるため、自己責任で使用してください)。xD

追加:

画面でたくさん作業するときに便利だと思うもう1つのbash-ism:

alias sls='/usr/bin/screen -ls'

そうすれば、はるかに少ないキーストロークで画面を一覧表示できます。sls既存のユーティリティと衝突するかどうかはわかりませんが、システムでは衝突しなかったので、使用しました。



0

Ctrl+ AはUnixの人々にとって素晴らしい特殊文字ですが、画面を使用してOpenVMSと対話する場合は、^ Aを使用できないと、途中で頭がハゲてしまいます。

ではVMSあなたが編集している場合は、DCLの履歴バッファから実行する前にコマンドを、挿入モードは(それは私がここに得ることはありませんいくつかの理由のためである必要があります)...あなたはドンようにそれを回すためにオフになっていますスペースを空けるのではなく、コマンドを上書きするのではなく、 `^ Aを押す必要があります。


screen -e ^Llは同様の理由で使用しています。Emacsで行頭に移動するためにctrl-Aとタイプする方法を単に学ぶことはできません。幸いにも、ctrl-Lは私がめったに必要としないキーストロークです。また、IMHOはその一般的な意味(画面の再描画/クリア)とうまく連動しています。
tripleee 2013年

@tripleee:私の.screenrchasはescape ^@^@、control-Aではなくnull文字を使用します。ほとんどのシステムでは、ヌル文字を制御スペースとして入力できます。これは、入力が非常に簡単です。(メインセッションのウィンドウ内でネストされたスクリーンセッションが実行されています。そのために使用していescape ^]^]ます。)
キーストンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.