Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

TTY 멀티플랙서 tmux

tmux여러개의 터미널을 실행할 수 있는 TTY1 멀티플렉서 입니다. 일반적으로는 screen이라는 도구를 이 용도로 많이 사용한 것 같은데(저는 써보지 않아서...) 몇가지 개량된 tmux를 얼마전에 알게 되어 사용하려고 하고 있습니다.

GUI가 대다수이고 개발을 하면 좋은 UI에 대해서 고민하게 되면서도 아이러니하게 손은 터미널에 점점 익숙해 지고 있습니다. 저는 Mac OS의 iTerm2를 상당히 좋아합니다. 윈도우즈에 있는 터미널은 터미널축에 끼지도 못할정도로 빈약해서 잘 쓰지 않지만 리눅스의 터미널에 비해서도 iTerm2은 깔끔하고 사용이 편하기 때문에 자주 쓰고 있습니다. 터미널을 쓰다보면 탭을 여러개 띄어서 이런 저런 작업을 하게 되는데 tmux나 screen은 이렇게 터미널프로그램의 탭을 여러개 뛰우는 대신에 하나의 터미널내부에서 여러개를 열어서 전환하면서 사용하는 툴입니다. 특히 서버같은 경우 tmux를 살려준채로 빠져만 나왔다가 다시 붙으면 기존의 작업하던 환경이 그대로 남아있기 때문에 많이 쓰는듯 합니다. 한 tmux를 열어서 여러명이 접속해서 같이 조작할 수도 있기 때문에 얼마전에는 스터디에서 코드를 보는데 사용했었습니다.

Hawk Host블로그에 TMUX ? The Terminal Multiplexer(Part 1, Part 2)라는 좋은 튜토리얼이 있어서 참고해서 정리합니다.



tmux가 screen보다 좋은 이유

  • 명확한 클라이언트/서버 모델을 가지고 있습니다.(각 윈도우는 유연한 클라이언트로 다른 세션에 자유롭게 붙거나 떨어질 수 있습니다.)
  • 문서가 잘 되어있고 일관된 명령어를 가지고 있습니다.(설정파일인 .tmux.conf에서도 동일한 명령어를 사용합니다.)
  • 스크립트를 쉽게 짤 수 있습니다.
  • 다중 붙혀넣기 버퍼를 가지고 있습니다.
  • Vi와 Emacs 키바인딩을 지원합니다.
  • 상태바에 대한 지원을 합니다.


tmux 설치하기
Ubuntu라면 apt-get을 이용해서 간단히 설치할 수 있습니다.

sudo apt-get install tmux

OSX라면 저같은 경우는 이미 설치가 되어있는데 어디서 설치되었는지는 잘 모르겠습니다. 다른 개발도구처런 XCode에 포함되어있는게 아닐까 추측만 합니다. 그렇지 않으면 Homebrew를 통해서 간단히 설치할 수 있습니다.

brew install tmux



tmux 사용하기
사용은 간단하게 tmux명령어를 입력하면 새로운 세션과 윈도우가 생성되면서 아래처럼 tmux로 접속을 합니다.

tmux 접속화면

tmux 세션으로 새로운 터미널이 열렸고 아래에는 상태바가 표시됩니다. 상태바에 0:bash* 라고 되어 있는 부분이 현재 사용중인 윈도우입니다. tmux의 단축키에 대한 프리픽스는 Ctrl-b 이기 때문에 Ctrl-b c 라고 입력하면 새로운 윈도우가 열립니다. 단축키대신에 Ctrl-b : 라고 입력하면 프롬프트를 사용할 수 있기 때문에 Ctrl-b c 대신에 Ctrl-b : new-window 라고 입력하면 새 윈도우가 열립니다.

tmux 새창을 연 화면

상태바에 새윈도우가 열려서 1:bash*라는 부분이 추가된 것을 볼 수 있습니다. 윈도우가 0,1 두개가 생긴것이고 *표시가 있는 것이 현재 윈도우입니다. Ctrl-b d를 입력하면 tmux클라이언트에서 떨어져나오게(detach) 됩니다.


$ tmux list-window
0: bash [67x14] [layout cc5e,67x14,0,0]
1: bash [67x14] [layout cc5e,67x14,0,0] (active)
$ tmux attach

이제 기존의 터미널에서 tmux list-window 를 입력하면 tmux로 열린 세션을 볼 수 있고 열린 세션이 없을 경우 no sessions라고 나오게 됩니다. 다시 tmux클라이언트에 붙으려면 tmux attach라고 입력하면 됩니다.

  • Ctrl-b c : 새창을 생성합니다.
  • Ctrl-b d : 현재 클라이언트에서 떨어집니다.
  • Ctrl-b l : 이전에 선택한 윈도우로 이동합니다.
  • Ctrl-b n : 다음 윈도우로 이동합니다.
  • Ctrl-b p : 이전 윈도우로 이동합니다.
  • Ctrl-b w : 윈도우의 리스트를 보여주고 번호를 입력하면 이동합니다.
  • Ctrl-b 윈도우번호 : 해당 윈도우로 이동합니다.
  • Ctrl-b & : 현재 윈도우를 종료합니다.
  • Ctrl-b , : 현재 윈도우의 이름을 바꿉니다.

위 명령어로 윈도우간에 이동을 할 수 있습니다. Ctrl-b ,를 입력하면 상태바에 프롬프트가 나타나게 되고 이름을 입력하면 위에 표시된 bash대신에 원하는 이름으로 바꿀 수 있습니다. 종료하려면 일반 터미널과 동일하게 exit를 입력하면 됩니다.



팬(pane) 사용하기
tmux는 윈도우뿐만 아니라 윈도우를 분할하는 팬(pane)기능도 지원합니다.

  • Ctrl-b % : 세로로 2개의 팬으로 나눕니다.
  • Ctrl-b " : 가로로 2개의 팬으로 나눕니다.
  • Ctrl-b q : 팬 번호를 보여준다.(팬사이를 이동하는데 사용된다.)

Ctrl-b %를 입력하면 아래처럼 화면을 2개의 팬으로 나누어 줍니다.

tmux를 2개의 팬으로 분리한 화면

Ctrl-b q를 입력하면 각 팬의 번호를 보여줍니다.

tmux의 팬 번호를 확인한 화면

단축키를 이용해서 팬간의 전환을 할 수 있습니다.

  • Ctrl-b o : 다음 팬으로 이동합니다.
  • Ctrl-b { : 왼쪽 팬으로 이동합니다.
  • Ctrl-b } : 왼쪽 팬으로 이동합니다.
  • Ctrl-b 방향키 : 방향키 위치의 팬으로 이동합니다.
  • Ctrl-b <alt>-방향키 : 현재 팬의 사이즈를 조정합니다.

tmux를 팬을 배치하는 여러가지 레이아웃(가로, 세로 등등)가지고 있는데 아래 단축키로 현재의 팬들을 레이아웃에 따라 순차적으로 바꾸어줍니다.

  • Ctrl-b <스페이스> : 팬의 레이아웃 변경

레이아웃의 변경의 아래 그림을 보면 이해하기가 쉽습니다.

팬의 격자 레이아웃

팬의 세로로 나눈 레이아웃

펜의 레이아웃



설정파일 수정하기
~/.tmux.conf를 수정함으로써 기본적인 동작에 대한 설정을 변경할 수 있습니다.

set-option -g prefix C-a

예를 들어 위와 같은 명령어를 두면 기본 프리픽스인 Ctrl-b대신에 Ctrl-a를 사용할 수 있습니다.

unbind %?bind | split-window -h?bind ? split-window -v

위와같은 명령어룰 두면 윈도우를 팬으로 분리하는 Ctrl-b %Ctrl-b " 대신에 Ctrl-b |Ctrl-b - 를 사용할 수 있습니다.

bind-key C-a last-window

지원하지 않는 단축키는 위처럼 bind-key를 통해서 단축키와 명령어를 연결할 수 있습니다. 앞에서 프리픽스를 Ctrl-a로 설정했다면 위의 설정을 하면 Ctrl-a를 두번 입력해 주어야 합니다. 이 명령어는 마지막에 사용했던 윈도우로 이동합니다.



상태바 수정하기
상태바에 대한 스타일을 수정할 수도 있습니다. 기존의 녹색상태바는 현재 사용중인 윈도우의 표시가 잘 눈에 띄지 않습니다.

# Set status bar
set -g status-bg black
set -g status-fg white
set -g status-left '#[fg=green]#H'

# Highlight active window
set-window-option -g window-status-current-bg red

명령어를 보면 상태바의 백그라운드는 검정색으로 폰트색은 흰색으로 설정하고 #[fg=green]#H부분은 상태바의 왼쪽의 녹색으로 호스트명을 보여주도록 한 것입니다. 마지막 라인은 사용중인 윈도우의 배경은 빨간색으로 설정해 준 것입니다. 이렇게 설정하면 아래 그림처럼 변경됩니다.

tmux의 상태바 스타일을 바꾼 화면

이제 상태바의 우측에도 좀더 유용한 정보를 표시해 보겠습니다.

set -g status-right ‘#[fg=yellow]#(uptime | cut -d “,” -f 2-)’

위 명령어는 상태바의 우측에 노란색으로 uptime 명령어를 실행한 결과를 콤마(,)로 분리해서 두번째부터 모두 보여주라는 명령어입니다. 이제 tmux에 들어가면 아래처럼 현재 PC의 접속 사용자수와 PC의 상태가 나타나는 것을 볼 수 있습니다.

tmux 상태바에 추가정보를 표시한 화면



단축키의 리스트를 모두 보려면 Ctrl-b ?를 사용합니다. 더 자세한 내용은 tmux의 man페이지를 참고하면 됩니다. iTerm2의 탭기능이나 팬기능을 잘 쓰고 있었는데 tmux에 익숙해 지면 UNIX기반에서는 어디서나 편리하게 사용할 수 있을 것 같습니다.


  1. TTY는 Tele Type의 약자이고 보통 콘솔이나 터미널을 이야기 합니다. [Back]
2011/09/30 00:46 2011/09/30 00:46