web-dev-qa-db-ja.com

GNU Screen Survival Guide

優れたScreenユーティリティについて知っておく必要のある重要なことだけでなく、初心者から初心者に一から教える価値があると思うものは何だと思いますか?

私はちょうど友人をScreenに紹介したところ、彼らはそれに慣れるのに苦労しています。したがって、バインドなどを記憶するための類推と便利なヒントは素晴らしいでしょう。

106
Henry B

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

^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

それだと思います。分割画面機能を使用することもありますが、毎日ではありません。もう1つのヒントは、偶発的にランダムなキーの組み合わせを押して画面がロックされたように見える場合、^ Qと^ Aの両方を実行してロックを解除しようとすることです。

91
Greg Hewgill

スクリーンの下部にある「ステータスバー」を設定する方法を見つけるまで、スクリーンに慣れることができませんでした。これは、現在の「タブ」または「仮想スクリーン」を表示するものです。私のセットアップは次のとおりです。

[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 ~]$
36
Roel

Ctrl+A ? -ヘルプ画面を表示します!

30
James Muscat

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

それらの場合に私は試して

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

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

26
agnul

Ctrl-Aのエスケープキーを別のキーに再マップできます。 bashの行の先頭に移動するには、〜/ .screenrcファイルに行を追加するだけです。 ^ bまたは^ Bにするには:

escape ^bB

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

 screen -lsは、現在のスクリーンセッションをリストします
 screen -S <name>は、name 
という名前の新しいスクリーンセッションを作成します。screen -r <name>は、指定されたスクリーンセッションに接続します。 ____。]

画面を使用する場合、いくつかのコマンドのみが必要です。

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

優れたクイックリファレンスを見つけることができます こちら 。ブックマークに値する。

12
Andrew Johnson

画面に精通しているが、manページで読んだものを覚えていない傾向がある人のためのヒント:

  • スクリーンウィンドウの名前を変更するのは非常に簡単です。 ctrl+Ashift+A
  • 画面から最後のメッセージを見逃しましたか? ctrl+actrl+m 再び表示されます。
  • 何かを実行したい場合(ファイルのテーリングなど)、変更があったときに画面に通知する場合は、 ctrl+Ashift+m ターゲットウィンドウ上。警告:anythingが変更された場合に通知されます。
  • ウィンドウ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

それは割り当てます ctrl+ashift+0 through 9 Windows 10〜19の場合.

8
staticsan

ctrl+a 特別なキーです。

ctrl+ad -[d]タッチ、プログラム(irssi?)をバックグラウンドで残して、家に帰ります。

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

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

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

6
tadeusz

Ctrl+A 基本コマンドです

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

Ctrl+AP = *** P ***前の画面に移動

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

Ctrl+AD = *** D ***画面を接続します

6
Niko Gunadi

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

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

6
user14038

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

bind s

あなたの.screenrc、あなたが-私のように-分割ウィンドウを使用する場合、C-a Sは実際のウィンドウを分割しますが、C-a sはフリーズします。そこで、フリーズショートカットを無効にしました。

6
Zsolt Botykai

画面だけに関連するわけではありませんが、端末で256色を有効にする 、GNU ScreenおよびVim は画面のエクスペリエンスを大幅に改善しました時間(特に私がVimで1日約8時間コーディングしているので、目に優しいカラースキームがいくつかあります)。

4
jkramer

Ubuntu Serverの次のバージョンでは、デフォルトで適切なgnu-screenのセットアップを行うために、いくつかの 興味深い作業 が行われます。これには、画面の下部を使用してすべてのウィンドウとその他の有用なマシンの詳細(利用可能な#アップデートなど、マシンの再起動が必要かどうかなど)。おそらく、.screenrcを取得して、ニーズに合わせてカスタマイズできます。

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

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

この方法で、私は常にどのウィンドウが開いているのか、そして現在そのウィンドウで何が実行されているのかを常に把握しています。

3
David Dean

.screenrcに最初に加える変更は、エスケープコマンドを変更することです。多くの人と同じように、デフォルトのCtrl-Aシーケンスは、他のほとんどすべてのコンテキストで基本的な機能に干渉するため、好きではありません。 .screenrcファイルに、次を追加します。

エスケープ `e

それはバックティックです。

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

3
Gary Chambers

誰がこれを盗んだか覚えていない(dotfile.orgの誰か)。私は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を使用している場合は新しい画面を開き、画面のタイトルをsshホスト名に変更します。

乾杯z0mbix

3
user203445

私は、ウィンドウのわかりやすい名前を使用してスクリーンセッションを設定するのが好きです。 ^ a Aを使用すると、現在のウィンドウに名前を付け、^ a "を使用すると、ウィンドウのリストが表示されます。完了したら、^ a dで画面をデタッチし、screen -Rで再アタッチします。

2
innaM

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

2
Vagnerr

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が実行されます(もちろん自動的に接続されます)。既に実行されている場合は、再接続して、既に接続されている他のインスタンスを強制的に切り離します。とてもいいです。

別の例として、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

追加:

スクリーンで多くの作業をするときに便利だと思う別のbash-ism:

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

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

1
bambams

^ AはUNIXの人々にとって素晴らしい特別な文字ですが、スクリーンを使用してOpenVMSと通信する場合、^ Aを使用できないと早すぎます。 VMSでは、履歴バッファーから実行する前にDCLコマンドを編集する場合、挿入モードはオフになります(いくつかの理由でここでは説明しません)。スペースを空けるのではなくコマンドを入力し、^ Aを押す必要があります

0
user2146463

^ A Aは、元の画面に戻ります。

0
dummy