優れた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の両方を実行してロックを解除しようとすることです。
スクリーンの下部にある「ステータスバー」を設定する方法を見つけるまで、スクリーンに慣れることができませんでした。これは、現在の「タブ」または「仮想スクリーン」を表示するものです。私のセットアップは次のとおりです。
[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>は、指定されたスクリーンセッションに接続します。 ____。]
画面を使用する場合、いくつかのコマンドのみが必要です。
^ A c新しいシェルを作成します ^ A [0-9]スイッチシェル ^ A k現在のシェルを強制終了します ^ A d画面から切断します ^ A?ヘルプを表示する
優れたクイックリファレンスを見つけることができます こちら 。ブックマークに値する。
画面に精通しているが、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
それは割り当てます ctrl+ashift+0 through 9 Windows 10〜19の場合.
ctrl+a 特別なキーです。
ctrl+ad -[d]タッチ、プログラム(irssi?)をバックグラウンドで残して、家に帰ります。
ctrl+ac [c]新しいウィンドウを作成する ctrl+a0-9 番号でウィンドウを切り替える
screen -r-切り離されたセッションに戻る
これは、ユースケースの90%をカバーします。すべての機能を一度に表示しようとしないでください。
Ctrl+A 基本コマンドです
Ctrl+AN = *** N *** ext画面に移動
Ctrl+AP = *** P ***前の画面に移動
Ctrl+AC = *** C ***新しい画面を作成
Ctrl+AD = *** D ***画面を接続します
http://www.debian-administration.org/articles/34
私は数年前にそれを書いたが、それはまだ多くの肯定的なフィードバックを得る良い紹介です。
これを追加する必要があります:add
bind s
あなたの.screenrc
、あなたが-私のように-分割ウィンドウを使用する場合、C-a S
は実際のウィンドウを分割しますが、C-a s
はフリーズします。そこで、フリーズショートカットを無効にしました。
画面だけに関連するわけではありませんが、端末で256色を有効にする 、GNU ScreenおよびVim は画面のエクスペリエンスを大幅に改善しました時間(特に私がVimで1日約8時間コーディングしているので、目に優しいカラースキームがいくつかあります)。
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
この方法で、私は常にどのウィンドウが開いているのか、そして現在そのウィンドウで何が実行されているのかを常に把握しています。
.screenrcに最初に加える変更は、エスケープコマンドを変更することです。多くの人と同じように、デフォルトのCtrl-Aシーケンスは、他のほとんどすべてのコンテキストで基本的な機能に干渉するため、好きではありません。 .screenrcファイルに、次を追加します。
エスケープ `e
それはバックティックです。
これにより、バックティックをエスケープキーとして使用できます(たとえば、新しい画面を作成するには、backtick-cを押し、デタッチはbacktick-d、backtick-?はヘルプ、backtick-backtickは前の画面など)。干渉する唯一の方法は(そして習慣を破る必要がありました)、コマンドラインでバックティックを使用して実行出力をキャプチャするか、バックティックを含むものを貼り付けることです。前者については、BASH $(コマンド)規則を使用して習慣を変更しました。後者の場合、通常、別のxtermをポップするか、画面からデタッチして、バックティックを含むコンテンツを貼り付けます。最後に、リテラルバックティックを挿入する場合は、単にbacktick-eを押します。
誰がこれを盗んだか覚えていない(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
私は、ウィンドウのわかりやすい名前を使用してスクリーンセッションを設定するのが好きです。 ^ a Aを使用すると、現在のウィンドウに名前を付け、^ a "を使用すると、ウィンドウのリストが表示されます。完了したら、^ a dで画面をデタッチし、screen -Rで再アタッチします。
誰かがこれと同様の質問を Server Fault に投稿しました。
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
が既存のユーティリティと衝突するかどうかはわかりませんが、その時点では私のシステムではそうではなかったので、それを選びました。
^ AはUNIXの人々にとって素晴らしい特別な文字ですが、スクリーンを使用してOpenVMSと通信する場合、^ Aを使用できないと早すぎます。 VMSでは、履歴バッファーから実行する前にDCLコマンドを編集する場合、挿入モードはオフになります(いくつかの理由でここでは説明しません)。スペースを空けるのではなくコマンドを入力し、^ Aを押す必要があります
^ A Aは、元の画面に戻ります。