Linux의 화면 명령을 사용하는 방법

리눅스 screen 명령어를 사용하면 현재 실행 중인 터미널 애플리케이션을 백그라운드로 전환하고, 필요할 때 다시 전면으로 불러올 수 있습니다. 이 기능은 SSH 연결 상태에서도 유용하며, 화면 분할 기능을 통해 여러 작업을 동시에 효율적으로 관리할 수 있습니다.

Screen 명령어란 무엇인가?

Screen 명령어는 터미널 멀티플렉서의 일종으로, 다양한 옵션을 제공합니다. 이 명령어는 매우 광범위한 기능을 수행할 수 있으며, 매뉴얼 페이지가 4,100줄을 넘을 정도로 방대합니다.

screen 명령어를 사용하는 일반적인 상황은 다음과 같습니다.

  • 새 쉘 창을 생성하고 명령어를 실행한 후 창을 백그라운드로 이동(“분리”라고 함).
  • 프로세스 진행 상황을 확인하기 위해 창을 다시 전경으로 이동(“재연결”이라고 함).
  • 실수로 터미널 창을 닫아 장시간 실행되는 프로세스가 종료되는 것을 방지.
  • 하나의 screen 세션 내에서 여러 개의 창을 생성하고 다른 프로세스를 실행.
  • 창 사이를 쉽게 이동하며 진행 상황을 모니터링.
  • 터미널 창을 수직 또는 수평으로 분할하여 여러 창을 동시에 표시.
  • 원격 시스템에 연결하여 screen 세션을 시작하고 프로세스를 실행한 후 연결을 끊고 다시 연결해도 프로세스가 계속 실행됨.
  • 여러 SSH 연결 간에 screen 세션을 공유하여 두 사람이 실시간으로 같은 화면을 볼 수 있도록 함.

Screen 설치하기

우분투에 screen을 설치하려면 다음 명령어를 사용합니다.

sudo apt-get install screen

Manjaro에 screen을 설치하려면 다음 명령어를 사용합니다.

sudo pacman -Sy screen

Fedora에서는 다음 명령어를 사용합니다.

sudo dnf install screen

Screen 시작하기

screen을 시작하려면 터미널에 다음 명령어를 입력하고 Enter 키를 누릅니다.

screen

라이선스 정보 페이지가 나타납니다. 스페이스바를 눌러 다음 페이지를 읽거나, Enter 키를 눌러 명령 프롬프트로 돌아갈 수 있습니다.

명령 프롬프트로 돌아오면 아무 일도 일어나지 않은 것처럼 보일 수 있지만, 실제로는 다중화된 터미널 에뮬레이터 내에서 쉘을 실행하고 있는 것입니다. 이것의 유용성을 확인하기 위해, 시간이 오래 걸릴 프로세스를 시작해 보겠습니다. 최신 리눅스 커널 소스 코드를 다운로드하여 ‘latest_kernel.zip’ 파일로 저장합니다.

다음 명령어를 입력합니다:

curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip

다운로드가 시작되고 curl 출력으로 진행 상황이 표시됩니다.

이제 화면을 분리해야 합니다. Ctrl + A를 누르고, 그 키를 놓은 다음 d를 누릅니다.

다운로드 프로세스는 계속 실행 중이지만, 다운로드를 표시하던 창은 사라졌습니다. screen 세션을 시작했던 터미널 창으로 돌아가면, ‘23167.pts-0.wdzwdz’와 같은 레이블이 붙은 screen 창이 분리되었다는 메시지가 표시됩니다.

다시 연결하려면 창 이름 시작 부분의 번호가 필요합니다. 만약 잊어버렸다면, ‘-ls'(목록) 옵션을 사용하여 분리된 창 목록을 확인할 수 있습니다.

screen -ls

준비가 되면 ‘-r'(재연결) 옵션과 함께 재연결할 세션 번호를 사용합니다.

screen -r 23167

백그라운드에서 실행되던 창이 다시 터미널 창에 나타납니다.

만약 진행 중인 과정이라면 결국 완료될 것이고, 지속적인 프로세스라면 종료하고 싶을 것입니다. 프로세스가 완료되면 ‘exit’를 입력하여 screen을 종료할 수 있습니다. 혹은 Ctrl + A를 누른 다음 K를 눌러 강제로 창을 종료할 수도 있습니다.

다음 명령어를 입력합니다.

exit

창을 다시 연결하는 데 사용했던 명령어가 표시된 이전 터미널 창으로 돌아옵니다. 분리된 창이 하나뿐이었으므로 screen이 종료된다는 메시지가 나타납니다.

명명된 Screen 세션 사용

‘-S'(세션 이름) 옵션을 사용하여 screen 세션에 이름을 지정할 수 있습니다. 세션의 숫자 ID보다 기억하기 쉬운 이름을 사용하면 세션에 다시 연결하기가 더 편리합니다. ‘bigfile’이라는 이름으로 세션을 생성하려면 다음 명령어를 입력합니다.

screen -S bigfile

screen이 세션을 시작하면 명령 프롬프트가 있는 빈 창이 나타납니다. 장시간 실행되는 프로세스를 예시로 사용하기 위해 큰 파일을 다운로드해 보겠습니다.

다음 명령어를 입력합니다.

curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

다운로드가 시작되면 Ctrl+A를 누른 다음 D를 눌러 세션을 분리합니다. 분리된 세션의 세부 정보를 보려면 screen과 함께 ‘-ls'(list) 옵션을 사용하여 다음 명령어를 입력합니다.

screen -ls

숫자 식별자(23266) 뒤에 세션 이름(‘bigfile’)이 표시됩니다. 세션 이름을 포함하여 다음 명령어를 입력하여 다시 연결합니다.

screen -r bigfile

다운로드 창에 다시 연결되어, 긴 다운로드가 아직 진행 중임을 확인할 수 있습니다.

다운로드가 완료되면 ‘exit’를 입력하여 세션 창을 닫습니다.

다중 창에서 Screen 사용

지금까지는 분리된 창의 백그라운드에서 단일 프로세스를 실행하기 위해 screen을 사용했습니다. 하지만 screen은 훨씬 더 다양한 기능을 제공합니다. 이제 컴퓨터의 여러 측면을 모니터링할 수 있는 몇 가지 프로세스를 실행해 보겠습니다.

‘monitor’라는 이름으로 screen 세션을 시작하려면 다음 명령어를 입력합니다.

screen -S monitor

새 창 세션의 명령 프롬프트에서 ‘dmesg’를 시작하고 ‘-H'(사람이 읽을 수 있음) 및 ‘-w'(새 메시지 대기) 옵션을 사용합니다. 이는 커널 버퍼 메시지를 표시하며, 새로운 메시지가 나타날 때마다 출력됩니다.

다음 명령어를 입력합니다.

dmesg -H -w

기존 메시지가 나타납니다. ‘dmesg’가 새 메시지를 기다리고 있으므로, 명령 프롬프트로 돌아가지 않고 새 메시지가 도착하면 바로 표시됩니다.

다른 애플리케이션을 실행하기 위해 새 screen 창이 필요합니다. Ctrl+A를 누른 다음 C를 눌러 새 창을 생성합니다. ‘watch’ 명령어를 사용하여 ‘vmstat’을 반복적으로 실행하여 컴퓨터의 가상 메모리 사용량을 자주 업데이트하여 표시해 보겠습니다.

새 명령 프롬프트에서 다음 명령어를 입력합니다.

watch vmstat

‘vmstat’ 출력이 나타나고 2초마다 업데이트됩니다.

이제 두 개의 프로세스가 실행 중입니다. screen 창 사이를 이동하려면 Ctrl+A와 창 번호를 누릅니다. 처음 생성한 창은 창 0(0), 다음 창은 창 1 등으로 지정됩니다. 첫 번째 창(‘dmesg’ 창)으로 이동하려면 Ctrl+A와 0을 누릅니다.

Ctrl+A와 1을 누르면 ‘vmstat’ 창으로 돌아갑니다.

정말 편리합니다! Ctrl+A를 누른 다음 D를 눌러 이 세션에서 분리할 수 있습니다. 나중에 다시 연결할 수 있으며, 두 세션 모두 계속 실행됩니다. 다시 말하지만, 창 사이를 전환하려면 Ctrl+A와 전환하려는 창의 번호(0 또는 1)를 누릅니다.

다음 단계로 넘어가서, 하나의 창에서 두 개의 screen을 모두 표시해 보겠습니다. 이 단계를 유용하게 사용하려면 터미널 창 크기를 늘리는 것이 좋습니다. 예시에서는 스크린샷 크기로 제한되어 창이 조금 비좁아 보일 수 있습니다.

이 작업을 수행하려면 Ctrl+A를 누른 다음 Shift+S를 누릅니다 (대문자 “S” 필요).

그러면 창이 두 개의 “영역”으로 분할됩니다.

상단 영역에는 ‘vmstat’이 표시되고 하단 영역은 비어 있습니다. 아래 스크린샷에서 커서가 강조 표시되어 있습니다. 아래쪽 영역으로 이동하려면 Ctrl+A를 누른 다음 Tab 키를 누릅니다.

커서는 빈 공간인 아래쪽 영역으로 이동합니다. 이것은 쉘이 아니므로 아무것도 입력할 수 없습니다. 유용한 출력을 얻기 위해 Ctrl+A를 누른 다음 “0”을 눌러 이 영역에 ‘dmesg’ 창을 표시합니다.

이렇게 하면 하나의 분할된 창에서 두 개의 실시간 출력을 모두 볼 수 있습니다. Ctrl+A와 D를 눌러 창을 분리했다가 다시 연결하면 분할된 창 보기가 사라집니다. 하지만 다음 키보드 단축키를 사용하여 복원할 수 있습니다.

  • Ctrl+A, S: 창을 가로로 분할
  • Ctrl+A, Tab: 하위 영역으로 이동
  • Ctrl+A, 0: 하단 영역에 창 0을 표시

한 단계 더 나아갈 수 있습니다. 이제 아래쪽 창을 세로로 분할하고 디스플레이에 세 번째 프로세스를 추가해 보겠습니다. 커서가 아래쪽 영역에 있는 상태에서 Ctrl+A와 C를 눌러 쉘이 있는 새 창을 만듭니다. 아래쪽 영역에 새 창이 표시되고 명령 프롬프트가 제공됩니다.

다음으로 ‘df’ 명령어를 실행하여 파일 시스템 사용량을 확인합니다.

df

‘df’가 실행되는 것을 볼 때 Ctrl+A와 파이프 문자(|)를 누릅니다. 그러면 아래쪽 영역이 세로로 분할됩니다. Ctrl+A와 Tab을 눌러 새 영역으로 이동합니다. 다음으로 Ctrl+A와 0을 눌러 ‘dmesg’ 창을 표시합니다.

영역 간에 이동하고 수직 또는 수평 분할을 추가할 수 있습니다. 다음은 유용한 키 조합입니다.

  • Ctrl+A, Tab: 현재 영역과 이전 영역 사이를 이동
  • Ctrl+A, Q: 현재 영역을 제외한 모든 영역을 닫음
  • Ctrl+A, X: 현재 영역을 닫음

SSH를 통한 Screen 사용

screen을 사용하면 창 세션을 시작하고 분리하여 백그라운드에서 계속 실행하고, 로그오프하거나 다시 로그인한 후 세션을 다시 연결할 수 있습니다. 이는 원격 서버 작업 시 매우 유용합니다.

다른 컴퓨터에서 ssh 명령어를 사용하여 컴퓨터에 연결해 보겠습니다. 연결할 계정 이름과 원격 컴퓨터 주소를 제공해야 합니다.

예시에서는 다음 명령어를 입력합니다.

ssh [email protected]

원격 컴퓨터에서 인증하고 로그인한 후, 다음 명령어를 입력하여 ‘ssh-geek’이라는 screen 세션을 시작합니다.

screen -S ssh-geek

데모 목적으로 screen 창에서 ‘top’을 실행하지만, 장시간 또는 무한으로 실행되는 프로세스를 시작할 수도 있습니다.

다음 명령어를 입력합니다.

top

<img src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoYAAAA5CAIAAAAk632nAAALoklEQVR42u3ceVRTVwLH8ZeNhDULhn1RkE1ZDUIKsoWs7CCLrRWtiBRKsWrdaF2qQB0EVEpBsKgsskQ7Yxnn2E5XbXtqHW21naIy1NFqdah/98y/c28CIQwS4VhapvN75/OH8PJe8vI855t33w0MgwULFixYsGCZI4tKrQMAAIBZ8u9pLEgyzJbhkYdTwZsDAEgykgxIMgAAkgxIMpIMAP/3Sf75558vXb58+sw7xN+uXCE/TiPJJa6MnmHeCEqY5VepTFEptFqz3ygC3mAYPcu1+Bd9Im1SZMUCadMC2W92PpIDD5PjYpxKtb/wnjNqBkZutVfMaKv03NK9W0uykGQAgF85ySTD3X39JuTHuZBk9VNlC+a18VjkWfq5tgf8ZFnaWUxyvr8deaJuj99bknX5hVu7Pxm5+07TluLCfO10N9x0/PuHZ/fnIckAAL9ykk+fOWOeZHKt/JsnWSPfIubqufY1/ouLZWHlC6XtLHZjUBySPCPZW9ou//PKxQsXbt3867nzn35/t3MrkgwAMKeTbN5jo0cnOTkvzL1JwOnlCBq9wza7mCc5Ya2fy2F7QSeX3cfmnrCT7A2WpxqGndd48sjD2hbGGJ81JVzaS656RQHZxmu4+NBKF4d2Htknr13kuiVqNPAF/nZ9LIftscnGsWutNvk5Lyu9vV/ueJKdt4a4tvA5PVZ2tUHylLGj0iRFbHMVHuOxezlWRx09KmKS6O/lnh0M0+oXM2GkOsKpj2EOLk5a6SPQ0xZOcCBMaWmHBqnyhfW23F42r83Zv9TXnmzV7iNXWzwuS6vMk5wcsdeWpWfYR+bLMsZfc2H9hat3bpzcWTDNE7ym9erwpSMrNUWHvnr/FXI6UgqWZz+24vvPTgrkQM3ysQfklx4e+GDwzo0f73999eOju4t0Yxu+/KcH3w007zv9xefXb3079NWpxg2ZSDIAwKwlOdGvmUWawe6wFzXzSYrMkxz9qi23XexU4+W900vayiWrBLvktGrapW5dpDSjDVYWeXDJVk2Bxuvd4ANW5JHcVqlblZvkLQ4Jrd2OGLJV5B4+0+kh0+oSnw2QHuWx+tnWjSKBnuu+1pRkht0jsD8ktu6heRZvTDKOdcv22NBX1WUnaRAJSPv1HPHGBJVaFXSIYXpdwyddFgt2PqXKkfns8fasEdGPDn12UvJv4sUYpaUdklXKkFoeWcXqtJc02nD7WKzxJE95XBZXmZKsXFop5OgZTvMC8x6r1Kmb3r5LcvVZW8k0T3BZ9/DwhYPL1WNJnsF/jkdfJee89t5397/tqnlp1eqSzUcuXBsZbClNNyV5eOSfA/Xr0zQpacWN527f7tmRgyQDAMx