Linux / 명령어 / screen - 터미널 세션 유지와 관리

screen은 하나의 실제 터미널 안에 여러 가상 터미널을 만들고, 세션을 분리(detach)했다가 나중에 다시 연결(reattach)할 수 있게 하는 터미널 멀티플렉서입니다. SSH 연결이 끊겨도 대화형 작업 환경을 유지해야 할 때 유용하며, 기본 흐름은 세션 생성 → 작업 실행 → Ctrl+A 다음 D로 분리 → screen -r로 재접속입니다.

단순히 비대화형 명령을 백그라운드에서 실행하는 목적이라면 nohup이 더 간단할 수 있습니다. 반대로 실행 화면을 다시 열어 입력해야 한다면 screen이나 tmux가 적합합니다.

screen은 어떤 상황에서 사용하나요?

GNU Screen은 한 터미널을 여러 프로세스가 사용하는 가상 터미널로 다중화합니다. 각 창의 프로그램은 화면에 보이지 않거나 전체 세션이 분리된 동안에도 계속 실행됩니다. 자세한 동작과 전체 명령은 GNU Screen 공식 설명서에서 확인할 수 있습니다.

  • SSH로 접속한 서버에서 컴파일, 데이터 처리, 백업처럼 오래 걸리는 작업을 실행할 때
  • 작업 화면을 분리한 뒤 다른 컴퓨터에서 다시 접속해야 할 때
  • 하나의 SSH 연결 안에서 셸, 로그 감시, 편집기 등 여러 터미널 창을 운영할 때
  • 실행 중인 대화형 프로그램의 화면을 나중에 그대로 확인해야 할 때

screen 세션은 서버 재부팅을 견디지 못하며, 프로그램 실패를 감지해 자동으로 재시작하지도 않습니다. 상시 서비스에는 systemd 같은 서비스 관리자를 사용하세요.

설치하고 첫 세션 시작하기

screen 설치하기

배포판에 따라 패키지 관리자로 설치합니다. 관리자 권한이 필요할 수 있습니다.

sudo apt update
sudo apt install screen
sudo dnf install screen
sudo pacman -S screen

설치 여부와 버전은 다음과 같이 확인합니다.

screen --version

이름을 붙여 세션 만들기

-S 옵션으로 세션 이름을 정하면 여러 작업을 구분하기 쉽습니다. 이름에는 작업 목적이 드러나는 짧은 문자열을 사용하세요.

screen -S backup

새로운 셸 화면이 열리면 그 안에서 평소처럼 명령을 실행합니다. 현재 셸이 Screen 안에 있는지는 환경 변수로 확인할 수 있습니다.

printf '%s\n' "$STY"

명령과 함께 세션 시작하기

세션을 만들면서 실행할 프로그램을 바로 지정할 수도 있습니다.

screen -S backup ./backup.sh

지정한 프로그램이 끝나고 세션 안에 다른 창이 없으면 Screen 세션도 종료될 수 있습니다. 작업이 끝난 뒤 결과를 화면에서 확인해야 한다면 먼저 셸 세션을 만들고 그 안에서 명령을 실행하는 방식이 더 편리합니다.

자주 사용하는 Screen 단축키

Screen 명령은 기본적으로 Ctrl+A를 누른 뒤 다음 키를 누르는 2단계 방식입니다. 아래의 Ctrl+A, D는 두 키를 동시에 누르는 것이 아니라 Ctrl+A를 놓은 뒤 D를 누른다는 뜻입니다.

단축키 기능 설명
Ctrl+A, D 세션 분리 프로그램을 유지한 채 현재 터미널에서 빠져나옵니다.
Ctrl+A, C 새 창 생성 현재 세션 안에 새 셸 창을 만듭니다.
Ctrl+A, N 다음 창 다음 가상 터미널 창으로 이동합니다.
Ctrl+A, P 이전 창 이전 가상 터미널 창으로 이동합니다.
Ctrl+A, " 창 목록 목록에서 이동할 창을 선택합니다.
Ctrl+A, A 창 이름 변경 현재 창에 알아보기 쉬운 제목을 붙입니다.
Ctrl+A, [ 복사·스크롤 모드 이전 출력을 탐색하거나 텍스트를 복사합니다.
Ctrl+A, H 로그 기록 전환 현재 창의 출력을 로그 파일에 기록하거나 중지합니다.
Ctrl+A, K 현재 창 종료 확인 후 현재 가상 창을 제거합니다.
Ctrl+A, ? 도움말 현재 키 바인딩 목록을 표시합니다.

프로그램 자체에 Ctrl+A를 보내야 한다면 Ctrl+A 다음 A를 사용합니다. 단축키는 .screenrc 설정에 따라 달라질 수 있습니다.

세션 분리하고 다시 연결하기

작업을 유지한 채 분리하기

Screen 세션 안에서 Ctrl+A 다음 D를 누르면 세션이 분리됩니다. 분리 후에는 SSH 연결을 종료해도 세션 안의 프로그램이 계속 실행됩니다.

터미널 연결이 예기치 않게 끊긴 경우에도 기본 autodetach 설정이 활성화되어 있다면 세션은 자동으로 분리됩니다.

세션 목록 확인하기

screen -ls

출력에는 세션 식별자와 Detached, Attached 같은 상태가 나타납니다. 여러 세션이 있다면 이름이나 전체 식별자를 지정해 연결해야 합니다.

분리된 세션에 다시 연결하기

screen -r backup

세션이 다른 터미널에 연결된 상태라면 먼저 목록을 확인하세요. 이전 연결을 분리하고 현재 터미널에 붙이려는 의도가 확실할 때 다음 형태를 사용합니다.

screen -d -r backup

-d -r은 다른 사용자의 정상적인 작업 화면을 끊을 수 있으므로 공유 계정이나 공동 운영 환경에서는 주의해야 합니다.

한 세션에서 여러 창 사용하기

창을 만들고 이름 붙이기

Ctrl+A, C로 새 창을 만든 뒤 Ctrl+A, A로 이름을 붙일 수 있습니다. 예를 들어 첫 창은 작업 실행, 두 번째 창은 로그 확인, 세 번째 창은 시스템 상태 확인에 사용할 수 있습니다.

창 사이 이동하기

Ctrl+A, N과 Ctrl+A, P로 다음·이전 창으로 이동합니다. 창이 많다면 Ctrl+A, "로 목록을 연 뒤 원하는 창을 선택하는 편이 빠릅니다.

창과 세션을 올바르게 종료하기

현재 셸에서 exit를 실행하면 해당 창이 종료됩니다. 마지막 창까지 종료되면 Screen 세션도 끝납니다.

exit

세션을 단순히 분리하려는 경우에는 exit가 아니라 Ctrl+A, D를 사용해야 합니다. 실행 중인 프로그램이 있는 창을 강제로 없애면 작업 결과가 손상될 수 있습니다.

스크롤과 로그 기록 활용하기

이전 출력 탐색하기

Ctrl+A, [를 누르면 복사·스크롤 모드로 들어갑니다. 방향키, Page Up, Page Down으로 이전 출력을 살펴보고 Esc로 빠져나올 수 있습니다. 보존되는 줄 수는 설정과 -h 옵션의 영향을 받습니다.

screen -h 10000 -S analysis

창 출력을 파일에 기록하기

Ctrl+A, H를 누르면 현재 창의 출력 로그 기록을 켜거나 끕니다. 기본 로그 파일명은 일반적으로 screenlog.0이며, 새 세션을 시작할 때 자동 기록을 켤 수도 있습니다.

screen -L -Logfile backup-screen.log -S backup

로그에는 화면에 출력된 비밀번호, 토큰, 개인정보가 포함될 수 있습니다. 저장 위치와 파일 권한을 확인하고, 장기 작업에서는 로그가 무제한으로 커지지 않도록 별도의 보관 정책을 마련하세요.

문제 상황과 보안 주의사항

세션이 Attached 상태로 남아 있을 때

네트워크가 끊긴 직후 세션이 Attached로 남을 수 있습니다. 먼저 실제로 다른 터미널에서 사용 중인지 확인한 뒤 screen -d -r 세션이름으로 이전 표시를 분리하고 현재 터미널에 연결합니다.

Dead 또는 접근할 수 없는 세션 항목은 실행 중인 프로세스가 없는지 충분히 확인한 뒤 screen -wipe로 정리할 수 있습니다.

같은 계정의 세션 접근 권한

Screen 세션은 운영체제 사용자 계정의 권한을 따릅니다. 같은 계정을 여러 사람이 공유하면 다른 사람이 세션에 재접속할 수 있으므로 계정 공유를 피하고 SSH 키와 계정 권한을 분리하세요. 세션 안에 관리자 셸이나 민감한 화면을 열어 둔 채 자리를 비우지 않는 것도 중요합니다.

screen, nohup, tmux, systemd 비교

도구 적합한 작업 핵심 특징
screen 다시 접속할 대화형 터미널 작업 세션 분리·재접속과 다중 창을 지원합니다.
tmux 대화형 작업과 복잡한 화면 분할 창과 패널 관리, 사용자 설정 기능이 풍부합니다.
nohup 간단한 비대화형 일괄 작업 SIGHUP을 무시하지만 터미널 화면을 복원하지 않습니다.
systemd 상시 실행해야 하는 서비스 부팅 연동, 실패 시 재시작, 의존성과 로그 관리를 구성할 수 있습니다.

비대화형 작업을 터미널 종료 후에도 실행하는 방법은 nohup 명령어 사용법에서 확인할 수 있습니다.

자주 묻는 질문

SSH 연결이 끊겨도 작업이 계속되나요?

Screen의 자동 분리가 정상적으로 동작하고 서버가 계속 실행 중이라면 세션 안의 프로그램도 유지됩니다. 다만 서버 재부팅, 프로세스 자체의 오류, 관리자에 의한 종료까지 막아 주는 것은 아닙니다.

screen -r에서 세션이 여러 개라고 나오면 어떻게 하나요?

screen -ls로 목록을 확인한 뒤 screen -r backup처럼 세션 이름이나 전체 식별자를 지정하세요. 의미 있는 이름을 붙여 만들면 선택 실수를 줄일 수 있습니다.

Ctrl+A가 프로그램 단축키와 충돌하면 어떻게 하나요?

Ctrl+A 다음 A를 눌러 프로그램에 문자 Ctrl+A를 보낼 수 있습니다. Screen의 명령 키 자체를 바꾸려면 -e 옵션이나 .screenrc의 설정을 사용할 수 있지만, 팀에서 공유하는 문서와 단축키도 함께 맞춰야 합니다.

재부팅 후에도 Screen 세션을 복원할 수 있나요?

아니요. Screen은 실행 중인 시스템의 프로세스와 가상 터미널을 유지할 뿐, 재부팅 후 세션과 프로세스를 자동 복원하지 않습니다. 재부팅 후 자동 시작이 필요하면 서비스를 systemd로 구성하거나 작업 특성에 맞는 스케줄러를 사용하세요.

정리

screen -S 이름으로 세션을 만들고, Ctrl+A, D로 분리한 뒤 screen -r 이름으로 다시 연결하는 것이 기본 사용법입니다. 여러 창과 로그 기록 기능까지 활용하면 불안정한 원격 연결에서도 대화형 작업을 체계적으로 이어 갈 수 있습니다.

다만 Screen은 서비스 감시 도구가 아닙니다. 재부팅 연동이나 자동 복구가 필요한 프로그램은 서비스 관리자로 운영하고, Screen은 사람이 다시 접속해 조작해야 하는 터미널 작업에 사용하세요.

같은 카테고리의 다른 글
Linux / 명령어 / host - 도메인과 IP 주소의 DNS 정보 간단히 조회

Linux / 명령어 / host - 도메인과 IP 주소의 DNS 정보 간단히 조회

Linux host 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux xz 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / zip - 여러 파일을 ZIP 아카이브로 묶기

Linux / 명령어 / zip - 여러 파일을 ZIP 아카이브로 묶기

Linux zip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux / 명령어 / apt-get - APT 패키지 작업을 스크립트와 명령행에서 실행

Linux apt-get 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux / 명령어 / stat - 파일 정보와 메타데이터 확인

Linux stat 명령어로 파일 크기, 권한, 소유자, inode와 타임스탬프를 확인하는 방법을 설명합니다. atime·mtime·ctime·Birth의 차이와 출력 형식, 파일 시스템 조회법도 정리합니다.

Linux / 명령어 / cut - 행에서 문자와 필드 추출

Linux / 명령어 / cut - 행에서 문자와 필드 추출

Linux cut 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

리눅스는 1991년 시작된 커널 프로젝트에서 서버·클라우드·모바일을 떠받치는 기반 기술로 성장했습니다. UNIX와 GNU의 배경부터 배포판과 공동 개발 생태계의 확장까지 핵심 연표로 정리합니다.

Linux / 명령어 / watch - 명령 결과를 주기적으로 반복 확인

Linux / 명령어 / watch - 명령 결과를 주기적으로 반복 확인

Linux watch 명령어로 명령 결과를 일정 간격으로 반복 확인하는 방법을 설명합니다. -n, -d, -g, -p 옵션과 파이프·따옴표 사용법, 메모리·디스크·프로세스 모니터링 예제를 정리합니다.

Linux / 명령어 / nice - 새 명령의 CPU 우선순위 조정

Linux / 명령어 / nice - 새 명령의 CPU 우선순위 조정

Linux nice 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux / 명령어 / column - 텍스트를 읽기 좋은 표 형태로 정렬

Linux column 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.