GNU Screen을 올바르게 사용하려면 무엇을 알아야합니까? [닫은]


106

방금 친구를 GNU Screen에 소개했는데 익숙해지는 데 어려움을 겪고 있습니다. 그래서 그가 우수한 제품에 대해 알아야 할 필수 사항에 대해 생각하게합니다. Screen 유틸리티 합니다. 초보자 인 누군가에게 처음부터 가르쳐야 할 가치가 있다고 생각하는 것과 같습니다. 바인딩 등을 기억하기위한 몇 가지 비유와 유용한 팁은 무엇입니까?

굉장 할 것입니다.


1
이것에 대한 좋은 답변이 여기에 있습니다 : stackoverflow.com/questions/70661/what-is-gnu-screen
Chris

누군가가 이와 유사한 질문을 Server Fault 에 게시했습니다 .
Vagnerr 2009

누군가 Screen을 시작하고 어려움을 겪고 있다면 대체 tmux 를 확인하고 싶을 것 입니다.
Christopher Bottoms

답변:


93

저는 Screen10 년 넘게 사용해 왔으며 아마도 절반 이하의 기능을 사용하고있을 것입니다. 따라서 모든 기능을 즉시 배울 필요는 없습니다 (사용하지 않는 것이 좋습니다). 내 일상적인 명령은 다음과 같습니다.

^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잠금을 해제하려고 할 수 있습니다.


1
^ A k를 목록에 추가하여 창을 닫아야합니다.
Léo Léopold Hertz 준영 2009-04-30

7
실수로 의도 한 것보다 더 많이 죽일 가능성이 있기 때문에 ^ A k를 사용하지 않습니다. 대신 ^ D (또는 exit)를 사용하여 창에서 쉘을 종료합니다 . 화면 창은 창의 마지막 셸을 종료 한 후 자동으로 닫힙니다.
Greg Hewgill

9
"^ A esc-스크롤 백에 사용하는 복사 모드"당신은 인간들 사이의 신입니다.
Rob Howard

4
^ A [는 정확히 같은 일을합니다.
atx 2011 년

^ A ^ D 트릭에 감사드립니다. 멈춰서 세션으로 돌아갈 수 없습니다. 경우이 여기에 같은 화면의 기본을 설명하지만, 몇 가지 더 트릭이 다시 동안이 기사 a를 쓴 사람이 도움이 geekpad.ca/blog/post/...이
패트릭은 잊어

36

화면 하단에 현재있는 '탭'또는 '가상 화면'과 다른 항목을 표시하는 '상태 표시 줄'을 설정하는 방법을 찾을 때까지 화면에 익숙해지지 않았습니다. 내 설정은 다음과 같습니다.

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

3
byobu (스크린 프로필)도 확인하세요. launchpad.net/byobu
Drew Stephens

놀랍습니다. 감사합니다. 터미널을 분리하려고 할 때 실제로 무슨 일이 일어나고 있는지 파악하는 데 어려움을 겪고있었습니다. 나는 이러한 명령이 작동하도록하려면 먼저 화면을 실행해야한다는 것을 몰랐습니다.
Ogaday 2015

30

Ctrl+ A? -도움말 화면을 보여주세요!


나는 이것에 전적으로 동의합니다. 이것은 다른 명령을 공제 할 수 있지만 그 반대의 경우는 불가능하기 때문에 다른 답변보다 훨씬 유용합니다. 또한 그 일을 기억하는 것이 훨씬 쉽습니다.
Léo Léopold Hertz 준영 2011

26

친구가 ^ABash에서 줄의 시작 부분으로 가기 위해 누르는 버릇이 있다면 ^A, 화면 명령 키 바인딩 이기 때문에 놀라게 될 것 입니다. 일반적으로 화면이 멈춘 상태로 끝납니다. 아마도 이후에 눌렀 던 임의의 키 때문일 수 있습니다.^A 던 :-)

그런 경우에는

^A s^A q 터미널 스크롤링 차단 / 차단 해제

그것을 고칠 수 있습니다. 화면 내 줄의 처음으로 이동하려면 키 시퀀스는 ^A a입니다.


1
이스케이프 문자를 ^ A에서 다른 것으로 변경하는 것은 쉽습니다. 나는 내 대답에 세부 사항을 넣었습니다.
Andrew Johnson

3
+ 1 + 1 + 1 ^ A s ... 감사합니다 ... 잠긴 화면 :)
Yuji '

1
@agnul +1 for ^ A a 나는 일반 bash 세션에서 ^ A의 사용자이며 화면 세션 내에서 사용할 수 없습니다. 훌륭한 팁에 감사드립니다! :)
icasimpan

화면 내부에서 ctrl A를 작동시키는 방법을 알려 주셔서 100 번 감사드립니다. 내 평생 이걸 찾고 있었어.
user674669 2013 년

여기서 'A'와 'a'는 대소 문자를 구분합니까?
Aditya MP

12

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^ooCtrl + O를 사용 하여 외부 screen -m세션 을 시작한 다음 내부 세션을 시작하여 새 세션을 시작합니다.
staticsan

1
즉시 이스케이프 키를 변경할 수 있습니다. 실행중인 화면 세션에서 입력 ^A :\Bb다음 Enter 키를 눌러 이스케이프 키를 ^ B로 설정합니다. 일반적으로 이해 ^A :하는 명령을 평가할 수 있습니다 .screenrc.
malana

8

화면에 익숙하지만 맨 페이지에서 읽은 내용을 기억하지 못하는 사람들을위한 몇 가지 팁 :

  • 화면 창의 이름을 변경하는 것은 매우 쉽습니다. ctrl+ A shift+ A.
  • 화면에서 마지막 메시지를 놓쳤습니까? ctrl+ a ctrl+ m가 다시 표시합니다.
  • 무언가를 실행하고 (예 : 파일 테일링) 변경 사항이있을 때 화면에 표시 되도록하려면 대상 창에서 ctrl+ A shift+ m를 사용합니다. 경고 : 당신이 있으면 알려 드릴 것 아무것도 변경됩니다.
  • 창 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

Windows 10에서 19까지 ctrl+ a shift+ 0 through 9를 할당합니다 .


7

Ctrl+ A는 기본 명령입니다.

Ctrl+ A N= *** N *** 다음 화면으로 이동

Ctrl+ A P= *** P *** 이전 화면으로 이동

Ctrl+ A C= *** C *** 새 화면 만들기

Ctrl+ A D= *** D *** 화면 분리


6

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. ';
Peter Mortensen

6

나는 이것을 "반드시"추가한다 : 추가

bind s

.screenrc, 다음과 같은 경우 - 나 같은 -로 사용 분할 창에 사용되는 C-a S분할 실제 창을하지만, C-a s그것을 정지. 그래서 동결 단축키를 비활성화했습니다.


2
^-Q당신이 명중하면 정지 해제^-S
플라톤

당신이 맞습니다 @Plato. 여전히 나는 거의 모든 단축키를 기억하지 못하는 사용자 환경에서 작업하고 있습니다 ... 나는 그것을 비활성화해야했습니다.
Zsolt Botykai 2013

NP는 난 그냥 먼저이 스레드를 발견하고 '동결'을 검색하고 내가 찾던 것을 찾지 못 하셨나요
플라톤

6

Ctrl+ a는 특수 키입니다.

Ctrl+ a d-[d] etach, 백그라운드에서 프로그램 (irssi?)을 남겨두고 집으로 이동합니다.

Ctrl+ a c[c] 새 창 만들기 Ctrl+ a 0-9숫자로 창 간 전환

screen -r-분리 된 세션으로 돌아 가기

이는 사용 사례의 90 %를 포함합니다. 한 번에 모든 기능을 표시하려고하지 마십시오.


처음 알게되었을 때 실제로 화면 을 분리 하고 다시 부착 하는 것이 screen무엇을 의미 하는지 혼란 스러웠 습니다 . 인용구 : "... 지정된 시스템에서 별도의 콘솔 (예 : 원격 시스템의 ssh, IRC 세션 등)에서 장시간 실행되는 작업을 수행하고, 세션에서 분리하고, 물리적 위치에서 다른 위치로 이동하고, ssh를 통해 컴퓨터를 연결하고 화면 세션에 다시 연결하여 계속 작업하십시오. "
JW.


3

.screenrc에 대한 첫 번째 수정은 이스케이프 명령을 변경하는 것입니다. 많은 사람들과 달리 거의 모든 다른 상황에서 기본 기능과의 간섭으로 인해 기본 Ctrl-A 시퀀스가 ​​마음에 들지 않습니다. 내 .screenrc 파일에 다음을 추가합니다.

탈출`e

그것은 backtick-e입니다.

이렇게하면 백틱을 이스케이프 키로 사용할 수 있습니다 (예 : 새 화면을 만들려면 backtick-c를 누르고 detach는 backtick-d, backtick-?는 도움말, backtick-backtick은 이전 화면 등). 그것이 방해하는 유일한 방법은 (그리고 습관을 깨야 만했습니다) 명령 줄에서 백틱을 사용하여 실행 출력을 캡처하거나 백틱이 포함 된 것을 붙여 넣는 것입니다. 전자의 경우 BASH $ (command) 규칙을 사용하여 습관을 수정했습니다. 후자의 경우 일반적으로 다른 xterm을 열거 나 화면에서 분리 한 다음 백틱이 포함 된 콘텐츠를 붙여 넣습니다. 마지막으로 리터럴 백틱을 삽입하려면 백틱 -e를 누르기 만하면됩니다.


훌륭한. $ (...)를 사용해야한다는 것을 알고 있지만 항상 백틱을 사용하므로 이제 내 방식을 바꿔야 할 것 같습니다. 백틱은 약간 멀어 지지만 수정자가 필요없는 단일 키가있는 것이 좋습니다. 하지만 왜 "e"이고 어떻게 기억합니까?
iconoclast

방금 '탈출'을 테스트했는데 잘 작동하고 기억하기가 더 쉬워 보입니다. 백틱을 눌렀는데 원하는 것을 얻지 못했다면 다시 누르십시오.
iconoclast 2010-06-23

이 작업을 수행했지만 화면에서 실제로 백틱을 입력하는 방법이 있습니까? 때로는이 작업을 수행해야하고 분리해야하는 것이 싫습니다 ...
Guillochon

@Guillouchon : 이전 댓글에서 정확히 설명합니다.
tripleee

3

일부가 흥미로운 일 업데이트 번호와 같은 모든 윈도우뿐만 아니라 다른 유용한 기계의 세부 사항을 (보여주기 위해 화면의 하단을 사용하여 포함 우분투 서버의 다음 버전에서 기본적으로 일어나는 좋은 GNU 화면 설정을 얻기에 진행되고는 사용 가능 여부 및 시스템 재부팅이 필요한지 여부). 아마도 그것들을 잡고 .screenrc필요에 맞게 사용자 정의 할 수 있습니다.

내가 가지고있는 가장 유용한 명령 .screenrc은 다음과 같습니다.

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

이렇게하면 어떤 창이 열려 있는지, 현재 어떤 창이 실행되고 있는지 항상 알 수 있습니다.


3

다음을 사용합니다 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 호스트 이름으로 화면 제목의 이름을 바꿉니다.


2

나는 창을 설명하는 이름으로 스크린 세션을 설정하는 것을 좋아합니다. ^ a A는 현재 창에 이름을 지정하고 ^ a "는 창 목록을 제공합니다. 완료되면 ^ ad로 화면을 분리하고 screen -R을 사용하여 다시 연결합니다.


1

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기존 유틸리티와 충돌 하는지는 모르겠지만 당시에는 내 시스템에 있지 않았기 때문에 사용했습니다.


0

^ AA는 방금 가져온 화면으로 다시 전환됩니다.


2
^ A ^ A는 다시 전환되고 ^ AA는 창의 제목 이름 바꾸기를 허용합니다.
Andrey Starodubtsev

0

Ctrl+ A는 유닉스 사람들에게 훌륭한 특수 캐릭터이지만 , OpenVMS 와 대화하기 위해 screen을 사용한다면 ^ A를 할 수 없다는 것은 당신을 조기에 대머리로 만들 것입니다.

에서 VMS 사용자가 편집하는 경우, DCL의 히스토리 버퍼에서 실행하기 전에 명령을 삽입 모드 (그것이 내가 여기에받지 않습니다 몇 가지 이유가 있어야한다) ... 당신이 돈 때문에 그것을 켭니다 꺼져 공간을 비우는 대신 명령을 과도하게 입력하지 말고`^ A를 눌러야합니다.


screen -e ^Ll비슷한 이유로 사용 합니다. 나는 단순히 Emacs에서 줄의 시작으로 가기 위해 ctrl-A를 입력하는 것을 잊을 수 없다. 다행히도 ctrl-L은 거의 필요하지 않은 키 입력이며 IMHO는 일반적인 의미 (다시 그리기 / 화면 지우기)와 잘 연결됩니다.
tripleee

@tripleee : My .screenrchas escape ^@^@, control-A가 아닌 null 문자를 사용합니다. 대부분의 시스템에서 널 문자를 제어 공간으로 입력 할 수 있으며 이는 입력하기가 매우 쉽습니다. (내 주요 세션에서 창 내에서 실행 중첩 된 화면 세션을 가지고, 그 일을 위해 내가 가진 escape ^]^].)
키이스 톰슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.