오늘은 리눅스 사용자들이 꼭 알아둬야 할 screen 사용법에 대해 이야기해보려고 합니다. screen은 터미널 창을 분할하여 여러 작업을 동시에 처리할 수 있게 해주는 유용한 도구입니다. 이 글에서는 스크린의 설치부터 기본 사용법, 유용한 단축키 까지 알려드리겠습니다. 리눅스를 사용하는 모든 분들께 도움이 되는 정보가 될 것입니다. 함께 살펴보시죠!
스크린(Screen) 설치
아마도 우분투를 이용하고 있다면 이미 설치가 되어 있을 겁니다. 그래도 혹시 없다면 아래 명령어로 쉽게 설치가 가능합니다.
$ apt update
$ apt install screen
설치 확인
$ which screen
# Output
/usr/bin/screen
스크린(Screen) 세션 시작
세션의 이름을 지정하여 스크린 시작, 예를 들어 ‘screen -S learn-screen’ 이렇게 입력하여 시작하게 되면 나중에 작업 스크린 세션 구분이 쉬워 집니다.
$ screen -S [세션이름]
또는 screen 명령어를 통해 빠르게 실행
$ screen
GNU 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*$ bash
ctrl + a , 0 (스크린 숫자)을 누르면 바로 원하는 스크린으로 이동이 가능합니다.
근데 좀 구분하기가 힘듭니다. 화면에 이름을 부여하는 방법은 ctrl + a, A 입니다.
# Output
Set window's title to: screen-3
ctrl + 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