리눅스 환경에서 tmux는 screen과 같은 터미널 멀티플렉서로, 많은 사용자들의 지지를 받고 있습니다. 이 둘을 비교하여 tmux가 정말로 더 나은 선택인지, 아니면 단순히 기존에 익숙한 것을 선호하는 것인지에 대해 자세히 알아보겠습니다.
터미널 멀티플렉서란 무엇인가?
tmux와 screen은 모두 터미널 멀티플렉서입니다. 이는 단일 터미널 창 내에서 여러 개의 독립적인 창을 생성하고, 필요에 따라 창 사이를 자유롭게 이동할 수 있게 해줍니다. 각 창은 별도의 명령줄 인터페이스를 제공하며, 창을 분할하여 여러 작업을 동시에 모니터링할 수도 있습니다.
특히 세션을 분리하여 백그라운드에서 실행할 수 있다는 점은 매우 유용합니다. 세션을 시작한 터미널 창을 닫더라도, 세션은 계속 실행되며, 나중에 다른 터미널 창에서 해당 세션에 다시 접속하여 작업을 이어나갈 수 있습니다. 이러한 기능은 SSH 연결을 통해 원격 서버에서 작업할 때 특히 편리합니다.
예를 들어, 한 컴퓨터에서 작업을 시작하고 세션을 분리한 후 집에서 다른 컴퓨터로 접속하여 이전에 작업하던 세션을 다시 연결할 수 있습니다. 이는 매우 효율적인 작업 흐름을 가능하게 합니다.
Screen 명령어의 특징
screen 명령어 역시 터미널 멀티플렉서로서 다양한 옵션을 제공합니다. screen 명령어에 대한 자세한 내용은 관련 문서를 참고하시기 바랍니다.
여기서는 tmux에 집중하여 설명하며, 필요한 경우 screen이 동일한 기능을 어떻게 처리하는지에 대해서도 언급하겠습니다.
screen 명령어 사용 시 불편했던 점 한 가지를 중점적으로 다루면서 tmux가 왜 더 나은 선택인지 살펴보겠습니다.
tmux 설치하기
일반적으로 screen은 대부분의 리눅스 배포판에 기본적으로 설치되어 있지만, tmux는 그렇지 않습니다. Ubuntu 환경에서 tmux를 설치하려면 다음 명령어를 사용하세요.
sudo apt-get install tmux

Manjaro에서는 pacman을 사용할 수 있습니다.
sudo pacman -Sy tmux

Fedora 31에는 tmux가 이미 설치되어 있을 수 있습니다.
tmux 세션 시작하기
tmux를 시작하려면 터미널에 tmux를 입력하고 Enter 키를 누르세요.
tmux

tmux 세션에 들어가면 터미널 창 하단에 상태 표시줄이 나타납니다.

상태 표시줄의 오른쪽에는 호스트 이름, 시간 및 날짜가 표시됩니다. 왼쪽에는 다음과 같은 세션 관련 정보가 표시됩니다.
- [0]: 현재 세션 이름입니다. 기본적으로 0부터 시작하여 숫자가 매겨집니다. 세션에 의미 있는 이름을 지정하는 방법은 아래에서 다루겠습니다.
- 0:bash*: 0은 현재 세션의 첫 번째 창임을 나타냅니다. 이 창에서 실행 중인 유일한 프로세스는
bash입니다. 프로그램을 실행하면 해당 프로그램의 이름이 여기에 표시됩니다. 별표(*)는 현재 보고 있는 창임을 의미합니다.
tmux 세션에서 새 창을 만들 때마다 창 번호와 해당 창에서 실행 중인 프로그램 이름이 상태 표시줄에 추가됩니다.
반면 screen 명령어는 상태 표시줄을 제공하지 않습니다. 따라서 현재 어떤 창에서 작업 중인지 확인하려면 어느 정도의 주의가 필요합니다. tmux의 상태 표시줄은 현재 작업 상황을 명확하게 보여준다는 점에서 큰 차이점입니다.
screen은 터미널 창에 상태 표시줄을 추가하지 않으므로, 창을 확장하지 않고 사용할 때 한 줄의 공간을 절약할 수 있다는 장점이 있습니다. 하지만 멀티플렉서를 사용하는 경우 일반적으로 터미널 창을 확장해서 사용하므로 이 한 줄의 차이는 크게 중요하지 않습니다.
tmux에 명령을 내릴 때는 먼저 Ctrl+B를 눌러 tmux의 주의를 끌어야 합니다. 그 후 빠르게 다음 키를 눌러 명령을 실행합니다. 명령어는 문자, 숫자, 구두점 또는 화살표 키를 사용하여 제공할 수 있습니다.
screen에서는 Ctrl+A를 사용하여 주의를 끈다는 점만 제외하면 동일한 방식입니다.
창을 닫으려면 Ctrl+B를 누른 다음 빠르게 X를 누릅니다. 상태 표시줄이 황색으로 바뀌면서 창을 종료할 것인지 확인하는 메시지가 표시됩니다.

창을 닫으려면 Y를 누르고, 마음이 바뀌면 N을 누릅니다. Enter 키를 누를 필요 없이 Y 또는 N 키만으로 선택을 완료할 수 있습니다.

Y를 누르면 창이 닫히고, 해당 세션의 유일한 창이었으므로 세션도 종료됩니다. tmux 세션이 닫히면 tmux를 시작한 명령줄로 돌아갑니다.
명명된 tmux 세션 시작
여러 개의 tmux 세션을 정기적으로 시작하는 경우, 각 세션에 의미 있는 이름을 지정하는 기능이 매우 유용합니다. screen에서도 세션 이름을 지정할 수 있지만, 세션 창에는 해당 이름이 표시되지 않습니다.
tmux new -s geek-1

세션 이름과 함께 tmux를 시작하려면 new (새 세션) 명령과 -s (세션 이름) 옵션을 사용합니다. 위의 예에서는 세션 이름을 "geek-1"로 설정했습니다.
tmux 세션이 로드되면 상태 표시줄의 가장 왼쪽 부분에 “geek-1″이 표시됩니다.
tmux 세션에 추가 창 만들기
현재 세션에 새 창을 만들려면 Ctrl+B를 누른 다음 C 키를 누릅니다. 현재 세션에 빈 터미널 창이 새로 나타납니다. 이 새 창에서 dmesg 명령어를 실행해 보겠습니다.
dmesg -w

-w (팔로우) 옵션을 사용합니다:

이제 세션에 두 개의 창이 있습니다. 하나는 top을 실행 중이고 다른 하나는 dmesg를 실행 중입니다. 그러나 한 번에 하나의 창만 볼 수 있습니다.
상태 표시줄 왼쪽을 보면 여전히 “geek-1” tmux 세션에 있으며, 0번 창은 top이 실행 중이고 1번 창은 dmesg가 실행 중임을 알 수 있습니다. 별표(*)는 현재 보고 있는 창을 나타냅니다.
창 사이를 이동하려면 Ctrl+B를 누른 다음 다음 키 중 하나를 누르세요:
- N: 다음 창을 표시합니다.
- P: 이전 창을 표시합니다.

- 0 ~ 9: 해당 번호의 창을 표시합니다.
창 목록에서 직접 창을 선택할 수도 있습니다. Ctrl+B를 누른 다음 W를 누르면 창 목록이 나타납니다.
tmux 창 목록에서 선택하기
창 목록에서 강조 표시된 줄을 이동하려면 위쪽 또는 아래쪽 화살표 키, Home 키 또는 End 키를 사용합니다. 디스플레이 하단에는 강조 표시된 창의 내용을 미리 볼 수 있는 미리보기 영역이 표시됩니다.
Enter 키를 누르면 강조 표시된 창으로 이동하고, Esc 키를 누르면 창 목록에서 빠져나와 현재 창을 유지합니다.
세션 분리 및 연결하기

Ctrl+B를 누른 다음 D를 누르면 현재 세션이 분리됩니다. 세션은 백그라운드에서 계속 실행되지만, 화면에서 볼 수 없고 상호 작용할 수도 없습니다.
세션을 시작하고, 실행 중인 프로세스가 있을 때 Ctrl+B를 누른 다음 D를 누르면 세션이 숨겨지고 백그라운드 세션이 됩니다.
원래 터미널 창으로 돌아오면, tmux로부터 세션이 분리되었다는 메시지를 확인할 수 있습니다. 메시지에는 분리된 세션 이름도 함께 표시됩니다. 이 세션 이름은 분리된 세션에 다시 연결할 때 사용됩니다.
tmux attach-session -t geek-1

분리된 세션에 다시 연결하려면, attach-session 명령어와 -t (대상 세션) 옵션을 사용합니다. 또한 연결할 세션의 이름을 지정해야 합니다.

세션에 다시 연결되면, 이전과 동일한 상태로 화면에 나타납니다.
백그라운드에서 실행되는 프로세스
세션을 분리하기 전에 실행했던 장기 실행 프로세스는 세션을 다시 연결할 때까지 백그라운드에서 계속 실행됩니다.
screen도 이러한 기능을 제공하지만, tmux만큼 직관적이지는 않습니다.
다중 세션 처리하기
tmux new -s geek-2

새로운 터미널 창을 열고 “geek-2″라는 새로운 tmux 세션을 시작해 보겠습니다.
dmesg -w


새로운 세션에서 dmesg를 시작합니다.
이제 원래의 “geek-1” tmux 세션과 “geek-2″라는 새로운 세션이 존재합니다.

상태 표시줄은 현재 세션이 “geek-2″이며, dmesg를 실행 중인 창이 하나 있음을 보여줍니다.

Ctrl+B를 누른 다음 D를 눌러 해당 세션을 분리합니다.
“geek-1” tmux 세션으로 돌아가서, Ctrl+B를 누른 다음 S를 눌러 tmux 세션 목록을 확인합니다.

이것은 세션 목록입니다. 이전에 본 유사한 디스플레이는 단일 세션의 창 목록이었습니다.

위쪽 및 아래쪽 화살표, Home 및 End 키를 사용하여 노란색 강조 표시줄을 이동할 수 있습니다. 하단 영역에는 강조 표시된 세션의 내용 미리보기가 표시됩니다.
오른쪽 화살표 키를 누르면 강조 표시된 세션의 창 목록이 표시됩니다.
Enter 키를 누르면 강조 표시된 세션 또는 창으로 이동하고, Esc 키를 누르면 세션을 변경하지 않고 세션 목록을 종료합니다. 새 세션을 선택하면 현재 세션이 분리되고 선택한 세션이 연결됩니다.
세션 동시 연결
이 작업을 수행하기 전에 “geek-2” 세션을 분리했습니다. 그러나 원래 터미널 창에서 여전히 연결된 세션에서 이 작업을 수행할 수 있습니다. 그렇게 하면 두 tmux 세션 모두에서 동시에 변경 사항이 나타납니다.
screen 명령어 또한 유사한 명령어를 통해 이 작업을 수행할 수 있습니다.
창 분할 사용하기

Ctrl+B를 누른 다음 큰따옴표 (“)를 누르면 현재 창이 가로로 두 개의 창으로 분할됩니다.
이는 현재 창에만 영향을 미칩니다. 세션의 다른 부분은 변경되지 않습니다. 이 세션의 창 목록을 확인하기 위해 상단 창에서 tmux ls 명령어를 사용했습니다. 두 개의 창이 있으며, 상태 표시줄은 우리가 1번 창에 있음을 알려줍니다. Ctrl+B를 누른 다음 0 (숫자 0)을 눌러 0번 창으로 이동하면 이전과 동일한 내용을 확인할 수 있습니다.
이것은 단순히 한 창에 두 개의 보기를 표시하는 것이 아니라, 두 개의 독립적인 명령줄 인터페이스를 제공합니다. 각 창은 별도의 쉘 환경에서 동작합니다. 각 창에서 다른 명령을 실행하여 이를 확인할 수 있습니다.
아래 명령어를 입력해 보세요:
uname -a

ls -hl

한 창에서 다른 창으로 이동하려면 Ctrl+B를 누른 다음 위쪽, 아래쪽, 왼쪽 또는 오른쪽 화살표 키를 누릅니다.

Ctrl+B를 누른 다음 백분율 기호 (%)를 누르면 현재 창이 세로로 분할됩니다.