테스트 환경
* Rocky(RHEL) Linux 8 / 9, CentOS(RHEL) 7
* bash shell
'PC(Notebook) 또는 VDI -> Gateway 서버 -> Linux Server 접속' 환경에서 Gateway 서버에 아래와 같이 screen 설정을 적용하여 사용하면
PC에서 Gateway 서버를 여러번 접속하지 않고 다수의 Linux 서버를 접속할 수 있다.
그 외 일반 적인 환경에서도 이 포스트에서 설명하는 데로 screen을 사용하면 편리한 멀티 터미널 환경을 사용할 수 있다.
.screenrc 적용 (screen 패키지 설치)
curl -k -s https://mapoo.net/downfiles/Linux/screen/screen-setup.sh | bash -s
-> root 계정에서 위 명령 라인 복붙하기
screen 멀티 세션 생성 / 사용 방법
1. screen multi-tab 생성
1) screen 터미널 만들기
screen
또는 세션명을 지정하여 만들기
screen -S my-screen (또는 screen -R my-screen)
2) 4개의 multi-tab 터미널 만들기
Ctrl + a + c
Ctrl + a + c
Ctrl + a + c
Ctrl + a + c
2. multi-tab 터미널 넘나들기
Ctrl + a + a (최근 2개 창만)
F1 ~ F4 (또는 Ctrl + a + 1 ~ 4)
(최대 9개 창까지 가능)
-------------------- Screen 사용 설명 ----------------------
# screen session dettach
Ctrl + a + d
# screen session list 확인
screen -ls
(또는 ps aux | grep SCREEN)
# screen session이 한 개일 경우 dettached된 session에 reattach
screen -r
# screen session의 PID(Process ID)로 reattach
screen -r PID
# screen session 생성 (이름 중복 가능)
screen -S my-screen
(my-screen이 있을 경우 PID를 다르게 하여 같은 이름으로 생성됨)
# vi 모드로 진입하여 buffer 쌓인 출력 결과 확인
Ctrl + a + Esc
.screenrc 의 내용 (참고)
위에서 받은 screenrc 파일의 내용이 아래와 같다.
# tab-completion flash in heading bar
vbell off
# keep scrollback n lines (with Ctrl + a + Esc)
defscrollback 100000
# Doesn't fix scrollback problem on xterm because if you scroll back
# all you see is the other terminals history.
termcapinfo xterm* ti@:te@
# Don't display the copyright page
startup_message off
# caption and hardstatus
caption always '%{= w}%= %{y}< %H > %m-%d %D'
hardstatus on
hardstatus alwayslastline
hardstatus string "%{= w}%-w%{wk}%n*%t%{-}%+w"
# Start window numbering at 1
bind c screen 1
bind ^c screen 1
bind 0 select 10
screen 1
# Bind Current/Previous/Next Windows key
bindkey -k k1 select 1
bindkey -k k2 select 2
bindkey -k k3 select 3
bindkey -k k4 select 4
bindkey -k k5 select 5
bindkey -k k6 select 6
bindkey -k k7 select 7
bindkey -k k8 select 8
bindkey -k k9 select 9
참조: https://softpanorama.org/Utilities/Screen/screenrc_examples.shtml
https://www.gnu.org/software/screen/manual/screen.html (# weekday name)
bash-prompt-screen 의 내용 (참고)
printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD##*/}"
.screenrc의 hardstatus (%t)에 의해 기본적으로 user@hostname pwd(디렉토리 full path) 형태로 screen 터미널의 타이틀 만들어짐.
pwd 부분을 full path로 표기 하지 않는 printf 명령 구문이 포함된 bash-prompt-screen 파일을 /etc/sysconfig 에 위치 시켜 screen 터미널이 생성될 때 /etc/bashrc의 if [ "$PS1" ]; then 조건문의 screen*) case 조건에 의해 해당 bash-prompt-screen 파일이 실행되도록 함.
screen-setup.sh 내용 (참고)
#!/bin/bash
which screen &> /dev/null
if [ $? = 1 ]; then
MAJOR=$(rpm --eval %rhel)
if [ "$MAJOR" = "9" ]; then
dnf install -y --disablerepo=* https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/Packages/s/screen-4.8.0-6.el9.x86_64.rpm
elif [ "$MAJOR" = "8" ]; then
dnf install -y --disablerepo=* https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/s/screen-4.6.2-12.el8.x86_64.rpm
else
yum install -y screen
fi
fi
if [ -e ~/.screenrc ]; then
mv -f ~/.screenrc ~/.screenrc_bak;
fi
if [ -e /etc/sysconfig/bash-prompt-screen ]; then
mv -f /etc/sysconfig/bash-prompt-screen /etc/sysconfig/bash-prompt-screen_bak;
fi
curl -k -s https://mapoo.net/downfiles/Linux/screen/screenrc -o ~/.screenrc
curl -k -s https://mapoo.net/downfiles/Linux/screen/bash-prompt-screen -o /etc/sysconfig/bash-prompt-screen
chmod +x /etc/sysconfig/bash-prompt-screen
적용 시 화면
이 포스트에서 제공되는 .screenrc로 설정 후 screen을 여러개 띄우면 아래와 같이 표시되는 것을 볼 수 있다.

- screen 실행 후 Ctrl + a + c 키를 3번 눌로 3개의 세션을 추가로 생성한 모습이다.
(F1 ~ F3 키 또는 Ctrl + a + 1 ~ 3 키를 눌러 세션 탭을 넘나들 수 있음) - 우측 윗열 (caption)에는 마스터 screen 세션의 호스트명과 현재 날짜 정보가 표시됨
- (초까지 포함하는 시간 정보도 표시할 수 있지만 초/분이 변화할 때 스크롤 락이 안되는 현상이 발생함. 따라서 날짜/요일만 표기하게 적용.)
- 좌측 아래열 (hardstatus)에는 생성된 각각의 screen 세션 터미널이 보이고, 현재 지정된 터미널 세션이 하얀색 배경으로 표시됨
- 기본적으로는 screen의 첫번째 세션 터미널은 0부터 표기되지만 1로 변경 적용함. (F1 ~ F9 키에 직관적으로 맵핑하기 위함)
- Ctrl + a + Esc 키를 눌러 vi 모드로 진입 가능. 진입 후 / 또는 ? 키를 입력하고 단어 찾기 등을 할 수 있음. defscrollback 100000 설정에 의해 10만 라인까지 버퍼에 기록됨.