오늘은 리눅스 사용자들이 꼭 알아둬야 할 screen 사용법에 대해 이야기해보려고 합니다. screen은 터미널 창을 분할하여 여러 작업을 동시에 처리할 수 있게 해주는 유용한 도구입니다. 이 글에서는 스크린의 설치부터 기본 사용법, 유용한 단축키 까지 알려드리겠습니다. 리눅스를 사용하는 모든 분들께 도움이 되는 정보가 될 것입니다. 함께 살펴보시죠!
스크린(Screen) 설치
아마도 우분투를 이용하고 있다면 이미 설치가 되어 있을 겁니다. 그래도 혹시 없다면 아래 명령어로 쉽게 설치가 가능합니다.
$ apt update
$ apt install screen설치 확인
$ which screen# Output
/usr/bin/screen스크린(Screen) 세션 시작
세션의 이름을 지정하여 스크린 시작, 예를 들어 ‘screen -S learn-screen’ 이렇게 입력하여 시작하게 되면 나중에 작업 스크린 세션 구분이 쉬워 집니다.
$ screen -S [세션이름]또는 screen 명령어를 통해 빠르게 실행
$ screenGNU Screen version 4.09.00 (GNU) 30-Jan-22
Copyright (c) 2018-2020 Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2015-2017 Juergen Weigert, Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2010-2014 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008-2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury
Copyright (c) 1993-2007 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program (see the file COPYING); if not, see https://www.gnu.org/licenses/, or
contact Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA.
Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to screen-devel@gnu.org
Capabilities:
+copy +remote-detach +power-detach +multi-attach +multi-user +font +color-256 +utf8 +rxvt +builtin-telnet
                       [Press Space or Return to end.]
위와 같은 화면이 보이면 정상적으로 실행된 것으로, enter 를 누르고 ctrl + a, v 키를 누르면, 아래와 같이 버전을 확인해 볼 수 있습니다.
# Output
screen 4.09.00 (GNU) 30-Jan-22스크린 내부 화면을 통한 단축키 확인은 ctrl + a , ? 모든 명령어는 ctrl + a를 누르면 확인할수 있습니다. 여기서 대소문자 구분에 주의해야 합니다.
Screen key bindings, page 1 of 1.
Command key:  ^A   Literal ^A:  a
break       ^B b       fit         F          lastmsg     ^M m       number      N          redisplay   ^L l       suspend     ^Z z       writebuf    >         
clear       C          flow        ^F f       license     ,          only        Q          remove      X          time        ^T t       xoff        ^S s      
colon       :          focus       ^I         lockscreen  ^X x       other       ^A         removebuf   =          title       A          xon         ^Q q      
copy        ^[ [       hardcopy    h          log         H          pow_break   B          reset       Z          vbell       ^G        
detach      ^D d       help        ?          login       L          pow_detach  D          screen      ^C c       version     v         
digraph     ^V         history     { }        meta        a          prev        ^H ^P p ^? select      '          width       W         
displays    *          info        i          monitor     M          quit        \          silence     _          windows     ^W w      
dumptermcap .          kill        K k        next        ^@ ^N sp n readbuf     <          split       S          wrap        ^R r      
^]   paste .
"    windowlist -b
-    select -
0    select 0
1    select 1
2    select 2
3    select 3
4    select 4
5    select 5
6    select 6
7    select 7
8    select 8
9    select 9
I    login on
O    login off
]    paste .
|    split -v
:kB: focus prev
스크린의 진짜 활용은 작업을 계속 유지하며, 다른 작업을 계속 수행을 할 수 있다는 점입니다.
예를 들어 top 또는 컴파일 작업, 무언가 화면에서 대기해야 하는 작업들을 계속 유지하며, 다른 작업을 계속 이어갈수 있습니다. 세션 안에서 여러 가상 화면을 만듦으로서 가능하며, 세션 도 여러 개 연결이 가능합니다. 세션1- 화면여러개, 세션2 -화면 여러개 이렇게 생성이 가능합니다. 일단 세션 1에서 화면을 관리하는 방법에 대해 보겠습니다.
스크린(Screen) 세션 내 화면 관리
가상 화면을  추가하는 단축키는 ctrl + a, c 입니다. 이렇게 몇 번 반복해 보세요. 
ctrl + a, c 통해 추가한 화면을 목록으로 보려면, ctrl + a, " 누르면 됩니다. 또는 화면 간 전환 단축키는 ctrl + a, p 전 화면 전환, ctrl + a, n 은 다음 화면 으로 전환 하는 식으로 스크린 간 이동을  할 수 있습니다. 현재 창의 위치를 알고 싶다면, ctrl + a, w 를 누르면 현재 창 위치를 아래와 같이 확인 할 수 있습니다. 현재는 3*번 창 이네요.
# Output
0$ bash  1$ bash  2-$ bash  3*$ bashctrl + a , 0 (스크린 숫자)을 누르면 바로 원하는 스크린으로 이동이 가능합니다.
근데 좀 구분하기가 힘듭니다. 화면에 이름을 부여하는 방법은 ctrl + a, A 입니다.
# Output
Set window's title to: screen-3ctrl + a, " 눌러서 보면 제가 지정한 screen-3 이 보이네요.
# Output
Num Name Flags
0 bash $
1 bash $
2 bash $
3 screen-3현재 창을 제거하려면, ctrl + a, k 를 누릅니다. 또는 exit 입력 (확인 없이 바로 제거)
# Output
Really kill this window [y/n]모든 화면을 제거하려면, ctrl + a, \ 를 누릅니다. (세션도 삭제됨)
# Output
Really quit and kill all your windows [y/n]화면 다중 분할 (수평, 수직)
화면을 다중으로 분할 할 수가 있습니다. 수평 분할은 ctrl + a, S 를 누르면 화면이 나뉘고 하단에 추가된 블랭크 화면으로 넘어가서 ctrl + a, tab 누른 후, ctrl + a, c 로 화면을 만듭니다. 수직 분할은 ctrl + a, | 누르면 세로로 화면이 나뉩니다. 현재 보이는 창을 없애려면 ctrl + a, X 를, 현재 창을 제외한 모든 창을 제거하려면, ctrl + a, Q 를 누릅니다.
문자 복사, 붙여넣기
ctrl + a, [ 복사 시작, 화살표 키나 HJKL을 통해 원하는 곳으로 가서 블럭 지정 enter로 마무리, ctrl + a, ] 붙여 넣기
명령어 실행 완료 및 작업완료 벨 알림, 비 활동 알림 지정
nano 에디터로 .screenrc 파일을 편집하여, 특정 작업을 지시하고 작업이 끝나면 벨 알림 받기
inactivity: 특정 시간 동안 아무런 활동이 없을 때 알림을 줍니다. 
(예: 긴 작업이 중단될 때)
bell_msg: 터미널 벨 문자가 출력될 때 알림을 줍니다. 
(예: 명령어 실행 완료 시)
nano ~/.screenrc# 활동이 멈췄을 때 알림
inactivity "작업 완료: %t"
# 벨 알림 메시지 설정
bell_msg "벨 발생: %t"
# 비활동 감지 시간 설정 (15분 동안 비활동 감지)
idle 900   '%t'는 현재 활성화된 screen 창의 제목을 나타냄. 스크린창 제목 설정 방법 : ctrl + a, A
비활동 알림 설정은 ctrl + a, _ 를 누르면 30초간 비활동시 알림
예시 작업을 통해 봅시다.
먼저, ctrl + a, M 을 눌러 screen에서 벨 모니터링을 활성화합니다. 
# Output
Window 1 (bash) is now being monitored for all activity. 여기서는 ping 명령어 실행 후 echo를 사용하여 벨 문자를 출력해 보겠습니다.
ping -c 30 www.google.com; echo -e '\a'# Output
Bell in window 1이 설정을 사용하면 ping 명령어 실행이 끝난 후 screen이 벨 알림을 통해 사용자에게 알려줍니다. 이 방법은 ping 외에도  다른 명령어에도 적용할 수 있으며, 작업 완료 시 시각적 또는 청각 적 피드백으로 알림을 받습니다.
로그생성
ctrl + a, H 누르면 화면 로그를 생성할 수 있습니다.
# Output
Creating logfile "screenlog.1".스크린(Screen)세션 관리
현재 세션을 분리하려면, ctrl + a, d 를 누릅니다. 분리된 세션은 백그라운드 에서 계속 실행됩니다.
# Output
[detached from 222270.pts-0.noxwon]분리된 세션 목록을 보려면, 명령어 ‘screen -ls’ 를 입력합니다.
screen -ls# Output
There are screens on:
	222270.pts-0.noxwon	(11/12/2023 09:30:47 AM)	(Detached)
	221427.pts-0.noxwon	(11/12/2023 08:56:21 AM)	(Detached)
	203222.screen-lesson	(11/11/2023 08:29:39 PM)	(Detached)
	199826.pts-0.noxwon	(11/11/2023 06:04:04 PM)	(Detached)
4 Sockets in /run/screen/S-root.원하는 세션으로 돌아가려면, ‘screen -r [세션명]’ 또는 ‘screen -r [숫자만]’, 세션이 하나일때는 그냥 ‘screen -r’
screen -r 203222.screen-lesson
screen -r 203222세션을 완전히 제거하려면, ‘screen -S [세션 ID나 이름] -X quit’
screen -S 203222.screen-lesson -X quit 
			 
										 
										 
										 
										 
							 
				 
				