私は友人に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
それだけだと思います。分割画面機能を使用することもありますが、毎日ではありません。もう1つのヒントは、誤ってランダムなキーの組み合わせを押したために画面がロックされたように見える場合は、両方^Q
を^A ^Q
実行してロックを解除してみてください.
画面の下部にある「ステータスバー」を設定して、現在の「タブ」または「仮想画面」と他の画面を表示する方法を見つけるまで、画面に慣れることができませんでした。これが私の設定です:
[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
コマンド ラインから、names sessions を使用して、複数のセッションを管理下に置きます。タスクごとに 1 つのセッションを使用し、それぞれに複数のタブがあります。
screen -ls # 現在のスクリーン セッションを一覧表示します screen -S <name> # name という名前の新しい screen セッションを作成します screen -r <name> # 名前付き screen セッションに接続します
screen を使用する場合、いくつかのコマンドのみが必要です。
^A c 新しいシェルを作成する ^A [0-9] スイッチシェル ^A k 現在のシェルを終了 ^A d 画面から切断 ^あ? ヘルプを表示
優れたクイック リファレンスは、ここにあります。ブックマークする価値があります。
screen にはある程度慣れているが、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
Ctrl+Aは基本コマンドです
Ctrl+ A N= ***次の***画面に移動
Ctrl+ A P= ***P***前の画面に移動
Ctrl+ A C= ***C***新しい画面を作成
Ctrl+ A D= ***D***画面を添付
http://www.debian-administration.org/articles/34
私はそれを数年前に書きましたが、それでも多くの肯定的なフィードバックを得る良い入門書です。
これを追加する必要があります:
bind s
あなた.screenrc
が私のように分割ウィンドウを使用していた場合C-a S
、実際のウィンドウを分割しますが、C-a 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 時間コーディングを行っているため、目に優しいカラースキームがいくつかあります)。
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
このようにして、開いているウィンドウと、そのウィンドウで現在実行されているウィンドウを常に把握できます。
.screenrc に最初に加える変更は、エスケープ コマンドの変更です。多くの皆さんと同じように、私はデフォルトの Ctrl-A シーケンスが好きではありません。他のほとんどすべての状況で、その基本的な機能が妨げられるからです。私の .screenrc ファイルに、次を追加します。
エスケープ `e
それがバックティックです。
これにより、バックティックをエスケープ キーとして使用できます (たとえば、新しい画面を作成するには、backtick-c を押します。デタッチは backtick-d、backtick-? はヘルプ、backtick-backtick は前の画面など)。それが干渉する唯一の方法 (そして私はその習慣をやめなければなりませんでした) は、コマンド ラインでバックティックを使用して実行出力をキャプチャするか、バックティックを含むものを貼り付けることです。前者については、BASH $(command) 規則を使用して習慣を修正しました。後者の場合、通常は別の xterm を開くか、画面から切り離して、バッククォートを含むコンテンツを貼り付けます。最後に、リテラルのバッククォートを挿入したい場合は、単純にバッククォート-e を押します。
私は以下を使用します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 ホスト名に変更されます。
ウィンドウのわかりやすい名前でスクリーンセッションを設定するのが好きです。^ a Aで現在のウィンドウに名前を付け、^ a "でウィンドウのリストを表示します。完了したら、^ adで画面を切り離し、screen-Rで再接続します。
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
、当時のシステムでは衝突しなかったので、それを選びました。
^AA は、元の画面に戻ります。