screen: 리눅스에서 셸을 유지하면서 나갔다 들어오는 방법

이번 글은 Linux 내장 유틸리티인 screen에 대해 소개한다. screen은 셸을 나가도 history가 유지해주는 프로그램이다. tmux와 비교되는 경우도 있는데 화면 분할 및 창 이동이 screen의 주요 기능 중 하나지만 그것만 있다면 대부분 tmux를 사용할 것이다.

아직 screen의 작동 원리는 잘 모르겠지만, 비유적으로 설명하자면 tmux는 셸 단위로 실행되는 것에 비해 screen은 셸 밖에서 실행된다고 볼 수 있다. 따라서 셸을 종료하더라도 screen으로 실행한 셸은 계속 살아있으며, 다른 셸에서 해당 screen 세션으로 접속하면 애초에 접속을 끊지 않은 것 같은 UX를 경험할 수 있는 것이다.

기준 환경:

WSL v2


1. 설치 및 명령어 소개

screen은 Debian 계열에서 기본 설치돼있으므로 설치 방법은 생략한다. (apt-get install screen)

screen은 sudo 권한이 필요하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# screen 세션의 목록을 표시한다.
$ sudo screen -list

# screen 세션의 도움말을 표시한다.
$ sudo screen -h

# screen 세션을 하나 시작한다.
$ sudo screen

# screen 세션에서 빠져나온다.
$ ctrl+a+d

# screen 세션에 다시 접속한다.
# 이름을 짓지 않았던 경우 -list 옵션으로 조회한 후 해당 이름을 넘긴다.
# 이름이 보통 긴데, 도커 파일처럼 unique한 길이까지만 앞 글자만 입력해도 되는 듯하다.
# 정확한 name 쿼리 방식은 잘 모르겠다. `3225.test`인데, 3225도 동작하고 test도 동작한다...
$ screen -r <name>

# screen 세션을 이름을 제공해 하나 시작한다.
# 이 경우 조금 더 접속이 쉬울 것이다.
$ sudo screen -s <name>

# screen 세션을 제거한다.
$ screen -X -S <sessionId> quit

2. 예제

sudo screen -list 명령으로 현재 열려 있는 screen 세션을 확인한다.

현재 3806317 세션이 열려있는 것을 확인할 수 있다. (3806의 경우 이 예제에서 사용하지 않는다.)


sudo screen -r 317 명령으로 317 세션으로 접속하고 임의의 명령들을 실행했다.


이후 ctrl+a+d를 입력해 현재 screen 세션에서 원래 셸로 돌아왔다.


아예 다른 셸에서 sudo screen -r 317로 재접속하였다. 성공적으로 재접속되었고 마치 셸을 닫지 않은 것처럼 그대로 작업이 수행되고 그 기록까지 곧장 확인할 수 있다.


ctrl+a+d로 세션에서 나온 후 sudo screen -X -S 317 quit 명령으로 317 세션을 종료했다.


screen: 리눅스에서 셸을 유지하면서 나갔다 들어오는 방법

https://jsqna.com/linux-shell-2-screen/

Author

Seongbin Kim

Posted on

21-09-26

Updated on

21-09-26

Licensed under

댓글