私はちょうど友人をGNU Screenに紹介しました、そして彼らはそれに慣れるのに苦労しています。そのため、優れたScreenユーティリティについて彼が知っておくべき重要なこと、つまり、初心者の誰かにゼロから教える価値があると同じことを考えさせられます。バインドなどを覚えておくための類似点や便利なヒントは何ですか?
素晴らしいものになるだろう。
私はちょうど友人をGNU Screenに紹介しました、そして彼らはそれに慣れるのに苦労しています。そのため、優れたScreenユーティリティについて彼が知っておくべき重要なこと、つまり、初心者の誰かにゼロから教える価値があると同じことを考えさせられます。バインドなどを覚えておくための類似点や便利なヒントは何ですか?
素晴らしいものになるだろう。
回答:
私はScreen
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
それだと思います。私は時々分割画面機能を使用しますが、確かに毎日ではありません。画面では、事故によっていくつかのランダムなキーの組み合わせを打つため、ロックアップしているように見える場合は、他のチップは両方んです^Q
と^A ^Q
、ロックを解除しようとします。
exit
)を使用してウィンドウのシェルを終了します。ウィンドウ内の最後のシェルを終了すると、画面ウィンドウは自動的に閉じます。
画面の下部にある「ステータスバー」を設定して、現在使用している「タブ」または「仮想画面」やその他のステータスバーを表示する方法が見つかるまで、画面に慣れることができませんでした。これが私のセットアップです:
[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 ~]$
Ctrl+ A?-ヘルプ画面を表示!
あなたの友人が^A
Bashの行の先頭に到達するために押す習慣がある場合、彼/彼女は^A
画面コマンドのキーバインディングなので、いくつかの驚きのためにいます。通常は、画面がフリーズします。おそらく、後でランダムキーを押したためです^A
:-)
それらの場合、私は試します
^A s
および^A q
端末のスクロールのブロック/ブロック解除
それを修正します。画面内の行の先頭に移動するには、キーシーケンスは^A a
です。
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を使用してから、内側のセッションを開始して新しいセッションを開始します。
^A :
続い\Bb
^ Bにエスケープキーを設定しますが続きます。一般に、理解できる^A :
コマンドを評価できます.screenrc
。
画面に慣れているが、manページで読んだことを覚えていない傾向がある人のためのヒント:
.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が割り当てられます。
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. ';
これを追加する必要があります:追加
bind s
あなたに.screenrc
、あなたならば-私のような-として、使用スプリット・ウィンドウに使用C-a S
分割実際のウィンドウが、C-a s
それをフリーズします。そのため、フリーズショートカットを無効にしました。
^-Q
ヒットした場合はフリーズ解除^-S
Ctrl+ aは特別なキーです。
Ctrl+ a d-[d] etach、プログラム(irssi?)をバックグラウンドに残し、家に帰ります。
Ctrl+ a c[c]新しいウィンドウを作成する Ctrl+ a 0-9番号でウィンドウを切り替える
screen -r-切り離されたセッションに戻る
これでユースケースの90%がカバーされます。一度にすべての機能を表示しようとしないでください。
画面に関連するだけでなく、256色を有効にすることで、GNU ScreenとVimは画面のエクスペリエンスを大幅に改善しました(特に、Vimで1日約8時間コーディングしているため、目にやさしいカラースキームがいくつかあります)。
.screenrcに最初に加える変更は、エスケープコマンドを変更することです。他の多くの状況とは異なり、基本的な機能と干渉するため、デフォルトのCtrl-Aシーケンスは好きではありません。私の.screenrcファイルに、以下を追加します。
エスケープ `e
それはbacktick-eです。
これにより、バックティックをエスケープキーとして使用できるようになります(たとえば、新しい画面を作成するには、backtick-cを押し、切り離しはbacktick-d、backtick-?はヘルプ、backtick-backtickは前の画面などです)。それが干渉する唯一の方法(そして私は自分の習慣を破る必要がありました)は、コマンドラインでバックティックを使用して実行出力をキャプチャするか、バックティックを含むものを貼り付けます。前者については、BASH $(command)規則を使用して私の習慣を変更しました。後者の場合、私は通常、別のxtermをポップオープンするか、画面から切り離して、バックティックを含むコンテンツを貼り付けます。最後に、文字どおりのバックティックを挿入したい場合は、単にbacktick-eを押します。
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
このように、私は常に開いているウィンドウと、それらのウィンドウで何が実行されているかを常に把握しています。
私は次のものを使用します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ホスト名に変更します。
を使用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
既存のユーティリティと衝突するかどうかはわかりませんが、システムでは衝突しなかったので、使用しました。
Ctrl+ AはUnixの人々にとって素晴らしい特殊文字ですが、画面を使用してOpenVMSと対話する場合は、^ Aを使用できないと、途中で頭がハゲてしまいます。
ではVMSあなたが編集している場合は、DCLの履歴バッファから実行する前にコマンドを、挿入モードは(それは私がここに得ることはありませんいくつかの理由のためである必要があります)...あなたはドンようにそれを回すためにオフになっていますスペースを空けるのではなく、コマンドを上書きするのではなく、 `^ Aを押す必要があります。
screen -e ^Ll
は同様の理由で使用しています。Emacsで行頭に移動するためにctrl-Aとタイプする方法を単に学ぶことはできません。幸いにも、ctrl-Lは私がめったに必要としないキーストロークです。また、IMHOはその一般的な意味(画面の再描画/クリア)とうまく連動しています。
.screenrc
hasはescape ^@^@
、control-Aではなくnull文字を使用します。ほとんどのシステムでは、ヌル文字を制御スペースとして入力できます。これは、入力が非常に簡単です。(メインセッションのウィンドウ内でネストされたスクリーンセッションが実行されています。そのために使用していescape ^]^]
ます。)