[Linux] screen을 사용해보자

우리가 서버에서 시간이 많이 드는 작업을 한다고 생각해보자. 필자는 모델을 학습시킨다거나 특정 어플리케이션을 빌드할 때를 예로 들 수 있겠다. (특히 최근에는 gcc를 빌드 할 때..) 해당 작업을 하면서 콘솔에 찍히는 아웃풋 모니터링 등도 함께 필요하면 특히나 서버에 붙은 연결을 유지해야할 필요가 있다. 오늘은 이 문제를 해결할 수 있는 linux의 screen을 알아보고 이 기능 외에도 다양하게 활용할 수 있는 응용 예제들도 살펴보자.

1. Screen의 개념

screen은 현재 접속해 있는 세션과 상관 없이 가상의 터미널을 띄워주는 리눅스 어플리케이션이다. 터미널 멀티플렉서라고도 한다. 가상의 터미널을 띄워주는 기능 덕분에 우리가 ssh 로 붙어 있는 세션이 time-out 등으로 종료되더라도 이미 띄워진 screen 의 세션은 살아있게 된다. 따라서 앞서 내가 겪은 예처럼 모델 학습이나 어플리케이션 빌드를 진행하는 도중 세션이 끊기더라도 그 screen 위에서 동작하는 작업들은 계속 백그라운드에서 동작하게 된다.

2. Screen 설치

screen은 대부분의 linux에서 기본적으로 설치되어 있으나, 다음과 같은 방법으로 그 버전을 확인해보고 없다면 설치해주면 된다.

1
$ screen --version
  • Ubuntu 계열
1
2
$ (sudo) apt update
$ (sudo) apt install screen
  • Fedora 계열 및 CentOS
1
$ (sudo) yum install screen

3. 간단 Screen 시작

위 과정으로 screen이 준비 되었다면, 간단하게 screen을 사용해 볼 수 있다.

1
$ screen

Untitled

screen을 입력해 실행하더라도, 터미널 상에서 그 전과 다르지 않다는 것을 확인 할 수 있다. 하지만 exit으로 screen을 종료하면 다음과 같은 문구를 확인 할 수 있다.

Untitled

이렇게 우리가 지금 screen을 사용하는지 안하는지, 어떤 창을 사용하고 있는지 등을 육안으로는 쉽게 확인 할 수 없기 때문에 screenrc 파일을 수정하여 예쁘게(?) 사용한다. 터미널도 예뻐야 일할 맛이 나니 먼저 screenrc 부터 수정해보자.

4. screen을 자유자재로 활용해보기

screen에 다양한 옵션을 알아보자. 암기하듯이 나열하는 것보다는 필자가 습관처럼 자주 사용하는 명령어 순으로 나열해보겠다.

4-1. screen -S

앞서 screen만 입력하게 되면, default 이름이 들어가게 된다. -S 옵션을 주게 되면 session 마다

1
$ screen -S session_name

4-2. screen -ls

생성한 세션의 리스트를 확인할 수 있습니다.

1
$ screen -ls

Untitled

4-3. 세션 다시 접속

생성했던 세션에 다시 접속하기 위한 명령어이다. 동일한 이름의 세션이름이 두개 이상있다면, 앞에 나와있는 세션 ID까지 같이 입력해주어야 한다.

1
2
$ screen -r session_id_or_session_name
$ screen -x session_id_or_session_name
  • screen -r 과 screen -x의 차이

    • screen -r: Single display mode
    • screen -x: Multi display mode → 같은 스크린 세션에 여러명이 들어갔을 때 모든 명령어와 활동이 함께 보임
    • 아래 예시처럼 서로 다른 터미널을 틀고, 같은 스크린에 -x 옵션을 주어 접속하면 한쪽에서 치는 명령어와 활동이 동일하게 보인다

    Untitled

4-4. 세션 내 윈도우 생성

세션 내에서 윈도우를 생성하는 것은 스크린의 주요 기능이라 할 수 있다. 한 세션 내에서 여러 윈도우를 실행하고 각각 다른 작업을 수행할 수 있다.

1
2
$ ctrl + a, c 
# (create라 기억)

4-5. 세션 detached

다음에서 나오는 세션 종료와는 다르다. 현재 연결 되어있는 screen 과의 연결만 끊는 것이다.

1
2
$ ctrl + a, d
# (detach라 기억)

4-6. 세션 내 윈도우 종료 & 세션 종료

세션에 내 모든 윈도우가 종료되면 screen으로 실행한 세션도 종료된다.

1
$ exit

다음 명령어는 screen을 종료하면서 빠져나간다.

1
$ ctrl + a, k 

4-7. 세션 내 윈도우 목록 보기

한 세션 내에서 여러 윈도우가 있는 경우 윈도우의 리스트를 볼 수 있는 방법이다. 아래 명령어를 입력하면 윈도우 목록이 잠시 나타났다가 사라진다.

1
2
3
4
$ ctrl + a, w
# (실행되고 있는 window라 기억)

$ ctrl + a, "

ctrl + a, w 터미널 하단에 나타나는 결과

ctrl + a, w 터미널 하단에 나타나는 결과

ctrl + a, “ 윈도우 목록이 보이고, 방향키로 해당 윈도우 선택 가능

ctrl + a, “ 윈도우 목록이 보이고, 방향키로 해당 윈도우 선택 가능

4-8. 세션 내 윈도우 이동하기

세션에서 윈도우 간의 이동은 윈도우의 번호를 누르면 된다. 혹은 이전 창의 경우 다음 명령어 와 같다

1
2
3
4
5
$ ctrl + a, 0 # 0번째 윈도우
$ ctrl + a, 1 # 1번째 윈도우
$ ctrl + a, 2 # 2번째 윈도우

$ ctrl + a, a # 이전 사용한 윈도우

4-9. 윈도우 화면 분할

  • 가로 화면 분할
1
$ ctrl + a, shift + s
  • 세로 화면 분할
1
$ ctrl + a, shift + \
  • 분할 윈도우간 이동
1
$ ctrl + a, tab

5. 마무리

이번 글을 통해 screen 의 기본 사용법 대해 알아보았다. 빌드가 오래걸리는 여러가지 작업들에 도움이 될 것이며, 꼭 오래걸리는 작업 이외에도 한 화면에 다양한 화면 분할 기능으로 생산성이 올라갈 수 있을 것이다. 사용자의 입맛 대로 .screenrc를 작성하여 screen 을 꾸며 볼 수도 있다. 한 번 사용해보세요 🙂

Author

Emjay Ahn

Posted on

2023-04-09

Updated on

2023-04-09

Licensed under

Comments