GNU screen

Linux Reality에서 screen에 대한 Podcast를 듣고 screen에 대해서 모르던걸 알게됐네요. GNU screen은 하나의 물리적인 터미널 안에서 여러 터미널을 사용할수 있도록 해주는 프로그램입니다. 한 터미널에서 여러 작업을 할때 매우 유용합니다. 또한, 작업하던 세션을 종료하지 않고 빠져나온 다음에 다른 곳에서 세션을 이어서 작업할수 있기 때문에 회사와 집 등 여러곳에서 작업할때 같은 환경에서 그대로 작업을 할수 있습니다. Podcast 들으면서 새롭게 안 기능은 여러 터미널에서 같은 screen 세션에 동시에 접속해서 작업할수 있다는 내용인데, 직접 해보니 Pair Programming할 때 아주 유용할거 같습니다. 그래서 검색을 해보니 위키(한글)에도 이러한 내용이 소개되어 있네요.

약 5년전에 하이텔(?)에 올렸던 글이 있어서 약간 내용 보충해서 올립니다.

—–

원격에서 작업하다 보면 여러창을 보고 싶을때가 많지만, 따로 로그인 하기도 귀찮고, 여러창 왔다갔다 할때도 어느 터미널이 어느 기계인지 많아지면 관리가 안되죠 –; 이럴때 사용하면 편리한 것이 screen입니다.

screen은 한 터미널 화면에서 여러 쉘과 프로그램을 띄울수 있으며, 또한 세션 관리 기능도 지원해서 터미널을 종료해도 나중에 다시 그 세션으로 복귀할수 있기 때문에 정말 편리합니다. 저는 이제 로컬에서도 screen을 애용하고 있네요.

먼저 시작은

% screen

또는

% screen -S 세션명

으로 시작하고, screen 실행후 모든 명령은 Ctrl-a로 시작합니다:

Ctrl-a, c : (create) 새로운 쉘이 생기면서 그 쉘로 이동
Ctrl-a, a : 바로 전 창으로 이동
Ctrl-a, n : (next) 다음 창으로 이동
Ctrl-a, p : (previous) 이전 창으로 이동
Ctrl-a, 숫자 : 숫자에 해당하는 창으로 이동
Ctrl-a, d : (detach) screen 세션에서 빠져나옴
Ctrl-a, x : lock screen

Ctrl-a, [ : 화면에서 텍스트 선택하여 클립보드로 복사 (화면 스크롤 가능)
            이때 vi와 동일하게 커서 이동할수 있고, space로 영역을 선택
Ctrl-a, ] : 클릭보드 텍스트 붙이기

Ctrl-a, S : (split) 창을 나눔 (region)
Ctrl-a, Tab : 다른 region으로 이동
Ctrl-a, Q : 현재 region을 제외한 나머지 숨기기

Ctrl-a, : : 명령모드로 들어갑니다.

위 명령 정도를 알고있으면, 불편하지 않게 사용할수 있으며, detach 시 세션이 종료되는 것은 아니고

% screen -r 세션명

으로 그전 세션을 다시 불러들일수 있습니다. 여러 창을 쓴다는 장점도 있지만, 세션 관리가 되는것도 아주 큰 장점입니다.

세션이 여러개 있으면 screen -list 하면 세션명이 쭉 나오고 (-S로 지정하지 않았으면 자동으로 이름이 할당됩니다)

세션을 완전히 종료하기 위해서는 모든 창에서 빠져나오면(exit 등으로) screen을 빠져나옵니다. 한번에 종료할려면 Ctrl-a : quit 하면 전체 창이 종료됩니다. 하지만 창을 하나씩 확인하면서 종료하는게 안전하겠죠.

split으로 화면을 나누면, 나눠진 공간(region) 별로 다른 창으로 전환할 수 있습니다.

% screen -x 세션명

-x는 -r과 동일하지만 그 전에 연결된 터미널을 끊지않고 세션에 동시에 연결합니다. 같은 세션을 여러명이 공유할수 있고, 세션에서 같은 화면을 보고 있으면 작업하는 내용이 실시간으로 보입니다.

스크린 사용하면 원래 사용하는 터미널의 히스토리 버퍼가 정상적으로 동작하지 않는데, 이때 Ctrl-a, [ 또는 Ctrl-a, ESC 를 이용하면 지나간 텍스트를 볼수 있습니다. 버퍼 크기는 .screenrc에서 “defscrollback 라인수”로 정할수 있으며 디폴트 값은 약간 작은 100 라인 입니다.

다음은 제 .screenrc 파일입니다. hardstatus는 여기를 참고했습니다.

vbell off
defscrollback 500
hardstatus alwayslastline
hardstatus string ‘%{gk}[%{wk}%?%-Lw%?%{=b kR}(%{W}%n*%f %t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]%{=b C}[%H]%{W}’

hardstatus를 설정해서 맨 아래줄에 화면 리스트와 load average, 호스트명 등을 표시해줍니다.

One thought on “GNU screen

  1. Bin

    알고계시겠지만 , FreeBSD에서는 watch 명령을 이용하면 훨씬더 쉽게 세션공유가 가능합니다
    http://www.freebsddiary.org/watch.php
    저도 주로 screen을 이용해서 PP나 세션공유를 했었는데 우연히 watch를 알게된 뒤로는 root 권한이 필요하긴 하지만 screen보다 훨씬더 간편하게 접속이되서 watch를 사용하고 있습니다 :)

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>