리눅스 Screen 사용법

여러개의 모니터 앞에 앉아 있는 프로그래머의 뒷모습

GNU screen은 스크린 매니저로, 가상의 터미널을 생성하고 프로세스를 실행시킬 수 있다.

오래 걸리는 태스크를 원격 서버에서 실행할 때 중간에 커넥션이 끊기면 태스크도 종료되는데, screen을 사용하면 연결이 끊기더라도 원격 서버에서는 태스크가 계속 실행되고, 나중에 다시 연결할 수도 있다.

screen 설치

대부분 리눅스 배포판에선 screen이 설치되어 있다. 맥에도 설치되어 있다.

$ screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

위 명령어로 현재 설치된 screen의 버전을 확인할 수 있다

apt (Ubuntu, debian, ...)

$ sudo apt install screen

yum (Fedora, CentOS, ...)

$ sudo dnf install epel-release
$ sudo dnf install screen

페도라 계열에서는 EPEL(Extra Packages for Enterprise Linux) repository 설치가 필요하다.

dnf (Rockylinux, ...)

$ sudo dnf install epel-release
$ sudo dnf install screen

Screen 사용법

$ screen

위 명령어로 스크린 세션을 만들고, 새 윈도우를 만들어 쉘을 실행시킬 수 있다.

screen 세션 내에서 명령어 목록은 Ctrl+a ?로 확인할 수 있다.

$ screen -S 세션명

관리하기 쉽게 스크린 생성시 세션명을 붙일 수 있다.

명령어

스크린 세션을 만들 때, 하나의 윈도우를 만들고 쉘을 실행시키는건데, 한 스크린 세션에서 여러개의 윈도우를 만들 수 있다.

새 윈도우를 만들려면 Ctrl+a c를 입력하면 되고, 0~9 순서의 인덱스로 생성된다.

아래는 스크린에서 자주 사용되는 명령어 목록이다

  • Ctrl+a c: 새 윈도우 생성
  • Ctrl+a ": 모든 윈도우 목록 보기
  • Ctrl+a 0: 윈도우 0번으로 전환 (0~9)
  • Ctrl+a n: 다음 윈도우로 전환
  • Ctrl+a A: 현재 윈도우 Rename
  • Ctrl+a S: 현재 리전을 상하로 나눔
  • Ctrl+a |: 현재 리전을 좌우로 나눔
  • Ctrl+a tab: 포커스를 다음 리전으로 이동
  • Ctrl+a Ctrl+a: 현재, 이전 윈도우로 토글
  • Ctrl+a Q: 현재 리전을 제외한 모든 리전을 닫기
  • Ctrl+a X: 현재 리전을 닫기

Detach

현재 스크린 세션에서 나오려면 Ctrl+a d를 입력한다

detach하더라도 스크린 세션 안에서 동작중인 프로그램은 계속 실행된다

Reattach

스크린 세션에 다시 붙으려면 아래 명령어를 입력한다

$ screen -r

만약 스크린 세션이 여러개라면, 아래처럼 screen -ls로 세션 목록을 출력한 뒤, 원하는 스크린 세션의 id를 입력해야 한다.

$ screen -ls
There are screens on:
	55427.foo	(Detached)
	54060.ttys000.vincejoe-PC	(Detached)
2 Sockets in /var/folders/j6/19jv6r6s0dg2l843c76w9sbr0000gn/T/.screen.

예를 들어 스크린 세션이 위처럼 두개 있을 때, 아래 세션에 붙고 싶다면

$ screen -r 54060

위처럼 -r 뒤에 세션 아이디를 입력한다.

$ screen -r foo

또는 named session을 생성한 경우, 세션 이름을 입력한다.

참고자료