방금 친구를 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
명령 줄에서 이름 세션을 사용하여 여러 세션을 제어 할 수 있습니다. 작업 당 하나의 세션을 사용하며 각 세션에는 여러 탭이 있습니다.
screen -ls # 현재 화면 세션을 나열합니다. screen -S <name> # name이라는 새로운 스크린 세션을 생성합니다. screen -r <name> # 명명 된 화면 세션에 연결
화면을 사용할 때 몇 가지 명령 만 필요합니다.
^ A c 새 셸 만들기 ^ A [0-9] 쉘 전환 ^ A k 현재 셸 종료 ^ A d 화면에서 연결 해제 ^ A? 도움말보기
screen -e^oo
Ctrl + O를 사용 하여 외부 screen -m
세션 을 시작한 다음 내부 세션을 시작하여 새 세션을 시작합니다.
^A :
한 \Bb
다음 Enter 키를 눌러 이스케이프 키를 ^ B로 설정합니다. 일반적으로 이해 ^A :
하는 명령을 평가할 수 있습니다 .screenrc
.
화면에 익숙하지만 맨 페이지에서 읽은 내용을 기억하지 못하는 사람들을위한 몇 가지 팁 :
.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에서 하루에 약 8 시간 코드를 작성했기 때문에 눈에 친숙한 색상 체계가 몇 가지 있습니다).
.screenrc에 대한 첫 번째 수정은 이스케이프 명령을 변경하는 것입니다. 많은 사람들과 달리 거의 모든 다른 상황에서 기본 기능과의 간섭으로 인해 기본 Ctrl-A 시퀀스가 마음에 들지 않습니다. 내 .screenrc 파일에 다음을 추가합니다.
탈출`e
그것은 backtick-e입니다.
이렇게하면 백틱을 이스케이프 키로 사용할 수 있습니다 (예 : 새 화면을 만들려면 backtick-c를 누르고 detach는 backtick-d, backtick-?는 도움말, backtick-backtick은 이전 화면 등). 그것이 방해하는 유일한 방법은 (그리고 습관을 깨야 만했습니다) 명령 줄에서 백틱을 사용하여 실행 출력을 캡처하거나 백틱이 포함 된 것을 붙여 넣는 것입니다. 전자의 경우 BASH $ (command) 규칙을 사용하여 습관을 수정했습니다. 후자의 경우 일반적으로 다른 xterm을 열거 나 화면에서 분리 한 다음 백틱이 포함 된 콘텐츠를 붙여 넣습니다. 마지막으로 리터럴 백틱을 삽입하려면 백틱 -e를 누르기 만하면됩니다.
일부가 흥미로운 일 업데이트 번호와 같은 모든 윈도우뿐만 아니라 다른 유용한 기계의 세부 사항을 (보여주기 위해 화면의 하단을 사용하여 포함 우분투 서버의 다음 버전에서 기본적으로 일어나는 좋은 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를 사용하는 경우 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가 실행됩니다 (물론 자동으로 연결됨). 이미 실행 중이면 다시 연결하고 이미 연결된 다른 인스턴스를 강제로 분리합니다. 꽤 좋습니다.
또 다른 예는 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
기존 유틸리티와 충돌 하는지는 모르겠지만 당시에는 내 시스템에 있지 않았기 때문에 사용했습니다.
Ctrl+ A는 유닉스 사람들에게 훌륭한 특수 캐릭터이지만 , OpenVMS 와 대화하기 위해 screen을 사용한다면 ^ A를 할 수 없다는 것은 당신을 조기에 대머리로 만들 것입니다.
에서 VMS 사용자가 편집하는 경우, DCL의 히스토리 버퍼에서 실행하기 전에 명령을 삽입 모드 (그것이 내가 여기에받지 않습니다 몇 가지 이유가 있어야한다) ... 당신이 돈 때문에 그것을 켭니다 꺼져 공간을 비우는 대신 명령을 과도하게 입력하지 말고`^ A를 눌러야합니다.
screen -e ^Ll
비슷한 이유로 사용 합니다. 나는 단순히 Emacs에서 줄의 시작으로 가기 위해 ctrl-A를 입력하는 것을 잊을 수 없다. 다행히도 ctrl-L은 거의 필요하지 않은 키 입력이며 IMHO는 일반적인 의미 (다시 그리기 / 화면 지우기)와 잘 연결됩니다.
.screenrc
has escape ^@^@
, control-A가 아닌 null 문자를 사용합니다. 대부분의 시스템에서 널 문자를 제어 공간으로 입력 할 수 있으며 이는 입력하기가 매우 쉽습니다. (내 주요 세션에서 창 내에서 실행 중첩 된 화면 세션을 가지고, 그 일을 위해 내가 가진 escape ^]^]
.)