터미널 환경에서 개발하는 팀에서 일을 하다보면 "Terminal multiplexer"라는 종류의 소프트웨어를 자유롭게 사용하는 사람들을 보게 된다. 화려하게 창을 분할하고 윈도우를 넘나들면서 명령을 치는 것을 보면 넋이 나가게 된다.
"tmux"라는 소프트웨어는 이런 "Terminal multiplexer" 소프트웨어 중 하나다. 잘 사용하면 고수의 향기를 내뿜기 좋은 소프트웨어이며 생산성도 매우 높아지기 때문에 터미널에서 개발하는 개발자들이라면 한번쯤은 사용해보길 권한다.
tmux 설치
누군가 고수의 향기는 맥북에서 나온다고 했다. 맥에서는 brew를 이용해 간편하게 설치할 수 있다.
$ brew install tmux
우분투 리눅스에서는
$ sudo apt-get install tmux
명령을 통해서 간편하게 설치된다.
실행은
$ tmux
간단하게 tmux 라고 명령을 입력하기만하면 된다.
tmux 용어
tmux 에서 사용하는 용어들을 알아보자
session(세션) : tmux가 관리하는 가장 큰 실행 단위다. tmux는 세션에 attach/detach 할 수 있다. tmux가 detach 한 세션은 종료되지 않고 백그라운드에서 실행을 계속 할 수 있다. 세션은 여러 윈도우(Window)로 구성된다.
window(윈도우) : 사용자가 보는 터미널 화면, 세션에서 여러 개의 윈도우가 탭처럼 존재한다. 세션에서 윈도우를 전환하면 새로운 윈도우로 화면이 전환된다.
pane (팬) : 하나의 윈도우를 분할한 단위. 윈도우 하나를 여러번 분할해서 여러개의 팬을 갖게 할 수 있다. 가로 혹은 세로로 화면을 분할해가면서 팬을 생성한다. 윈도우를 전환하면 팬 구성도 새로운 윈도우의 구성으로 전환된다.
tmux 를 실행시켜보면
이런 화면이 나온다. 위 그림은 세션 하나에서 두 개의 윈도우를 생성한 화면이다. 마치 탭처럼 두 개의 윈도우가 생성되어 있는 것을 볼 수 있다. 현재는 1번 윈도우가 활성화되어 있으며, 0번 윈도우로 전환하면 1번 윈도우의 화면은 백그라운드로 전환된다.
하나의 윈도우는 여러개의 팬(Pane)으로 분할해서 사용할 수 있다. 각각의 팬은 별도의 터미널처럼 동작할 수 있다. 즉, 1번 팬에서 vi를 열어서 소스코드를 보는 동시에 2번 팬에서 컴파일을 하고, 3번 팬에서 로그를 열어볼 수 있다.
Session 관련 tmux 명령어
세션과 관련된 tmux 명령어들을 알아보자.
# 세션 생성 (이름은 숫자로 생성됨)
$ tmux
# 이름을 지정하여 세션 생성
$ tmux new -s <session_name>
$ tmux new-session -s <session_name>
# 세션 이름 수정
[Ctrl] + b, $
# 세션 detach
[Ctrl] + b, d
# 세션 리스트보기
$ tmux ls
# 세션 attach
$ tmux attach -t <session number 혹은 session name>
# 세션 종료, 세션의 마지막 윈도우, 마지막 팬에서 실행
$ exit
# 세션 종료, 세션 밖에서 실행
$ tmux kill-session -t session_name
Window 관련 tmux 명령어
윈도우와 관련된 tmux 명령어들을 알아보자
# 윈도우 생성
[Ctrl] + b, c
# 세션 생성과 함께 윈도우 생성
$ tmux new -s <session-name> -n <window-name>
# 윈도우 이름 변경
[Ctrl] + b, ,
# 윈도우 종료
[Ctrl] + b, &
[Ctrl] + d
# 다음 윈도우(Next Window)로 이동
[Ctrl] + b, n
# 이전 윈도우(Previous Window)로 이동
[Ctrl] + b, p
# 마지막 윈도우(Last Window)로 이동
[Ctrl] + b, l
# 특정 윈도우로 이동 (몇 번째 윈도우인지)
[Ctrl] + b, 0-9
# 특정 윈도우로 이동 (이름으로 이동)
[Ctrl] + b, f
# 윈도우 리스트 보기
[Ctrl] + b, w
Pane 관련 tmux 명령어
팬 관련 tmux 명령어를 알아보자
# 세로 화면 분할
[Ctrl] + b, %
# 가로 화면 분할
[Ctrl] + b, "
# 팬 이동 - 화면에 나오는 숫자로 이동
[Ctrl] + b, q
# 팬 이동 - 순서대로 이동
[Ctrl] + b, o
# 팬 이동 - 방향키로 이동
[Ctrl] + b, <방향키>
# 팬 삭제
[Ctrl] + d
[Ctrl] + b, x
# 팬 사이즈 조절 - 현재 포커스된 팬 전체화면(한번 더 실행하면 윈상복구)
[Ctrl] + b, z
# 팬 사이즈 조절 [Ctrl] + b 를 누른 후 :
[Ctrl] + b, :
resize-pane -L <Size> or -R <Size> or -U <Size> -D <Size>
# 팬 레이아웃 변경 (다양한 레이아웃으로 자동 전환)
[Ctrl] + b, spacebar
단축키 관련 명령
지금까지 알아봤던 단축키들은 기본 설정 값이다. tmux는 사용자가 자신에게 맞는 키 매핑을 커스터마이징해서 사용할 수 있게 명령을 제공한다.
# 단축키 목록
$ [Ctrl] + b, ?
# 키 바인딩 및 언바인딩
[Ctrl] + b, :
bind-key [-cnr] [-t key-table] key command [arguments]
unbind-key [-acn] [-t key-table] key
# 옵션 설정 - set-option
[Ctrl] + b, :
set -g <option-name> <option-value>
# 옵션 설정 - set-window-option
[Ctrl] + b, :
setw -g <option-name> <option-value>
# 열려있는 모든 팬에 동시 입력하기
[Ctrl] + b, :
setw synchronize-panes on
옵션과 관련해서 예제를 하나 들면,
[Ctrl] + b, :
set -g status-bg white
이렇게 실행하면
바닥에 있는 상태바의 색이 변경되었다.
[Ctrl] + b, :
setw -g window-status-current-bg red
이렇게 실행하면
현재 활성화된 윈도우의 이름이 빨간색으로 마킹되어 표현된다. tmux 에서 제공하는 다양한 옵션을 이 명령어로 바꿔가면서 자신만의 실행 환경을 커스터마이징 할 수 있다.
스크롤링
tmux에 뿌려진 화면을 위로 스크롤 하고 싶을 때가 있다.
# Copy 모드로 들어가기
[Ctrl] + b, [
# 빠져나오기
[ESC]
q
copy 모드로 진입하면 마우스 스크롤이나 pageUp, pageDown, 화살표 키를 사용해 화면을 자유롭게 오갈 수 있다. Copy 모드가 아닌 일반 모드에서 화살표를 이용하면 이전 명령어가 선택된다.
tmux를 잘 활용하면 터미널을 이용한 작업의 생산성이 몇 배는 높아진다. 리눅스에서 터미널을 자주 만지는 개발자라면 tmux 같은 터미널 멀티플렉서를 잘 쓸 수 있게 익숙해지도록 하자.
댓글