테스트 환경
* 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만 라인까지 버퍼에 기록됨.

screen multi-tab

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다