터미널 멀티플렉서 tmux를 배워보자


tmux는 터미널 화면을 여러개로 분할하고, 세션을 생성하여 attach/detach를 자유롭게 할 수 있는 터미널 멀티플렉서이다. Vim과 tmux를 함께 사용하는 동영상 을 계기로 tmux를 알게 되었는데, 좋은 영상이니 한 번쯤 보는 것을 추천한다. 초중반엔 Vim 튜토리얼, 후반엔 tmux 소개와 사용법을 설명한다.

이전에 Vim을 IDE처럼 만드는걸 포스팅 했었는데 Vim만으로는 부족했던 부분을 tmux가 채워줄 수 있을 것 같다. GUI 작업 환경을 별로 좋아하지 않아서 대부분의 작업을 터미널에서 하는 편인데 이걸 이제 알았다는게 아쉬울 정도로 좋다. 아직은 배우는 중이라 제대로 쓰고 있는 것 같지는 않지만 그럼에도 불구하고 굉장히 만족스럽게 사용하고 있다.

tmux는 Vim과 마찬가지로 커스텀이 매우 자유로워서 많은 플러그인들이 이미 만들어져 있고 설치하기도 쉽다. 상태바에 현재 배터리 용량이나 CPU 사용율을 표시할 수도 있고 위의 동영상을 보면 애플 뮤직과 연동해서 현재 실행되는 음악의 제목을 표시하기도 한다. 이렇게 플러그인을 찾아서, 혹은 만들어서 하나 둘 씩 붙여가는게 나름 재미있다.

사용법을 소개하기 전에 tmux를 사용하면 어떤 것을 할 수 있는지 알아보자. 먼저 tmux의 기본 기능은 화면 분할이다. 하나의 터미널 화면을 여러 개의 터미널로 쪼갤 수 있고 쪼개진 화면의 크기를 자유자재로 조절할 수 있어서 나만의 레이아웃을 만들 수도 있다. tmux를 사용하지 않았을 땐 여러 개의 터미널 탭을 켜놓고 이리저리 왔다갔다 했었지만 이젠 하나의 화면에서 모두 처리할 수 있다.

또 다른 장점은 터미널을 세션으로 관리할 수 있다는 것이다. 터미널 환경을 하나의 세션으로 분리시켜서 언제든 attach/detach 할 수 있다. 하나의 분리된 세션이기 때문에 detach 되어도 백그라운드에서 계속 실행된다. 그리고 세션은 모두에게 공유되기 때문에 2명이 1개의 세션에 attach 해서 페어프로그래밍 하기에도 아주 좋다. 혼자 사용한다면 각 프로젝트별로 세션을 나누어서 작업 환경을 분리하기도 좋다.

하지만 무엇보다도 터미널에서 간지가 난다는 것이 가장 큰 장점이다.

설치 방법

OS X의 Homebrew로 설치한다.

brew install tmux

설치가 완료되면 tmux -V를 실행시켜 보자. 제대로 출력되면 성공이지만 이런 에러가 뜰 수도 있다.

dyld: Library not loaded: /usr/local/lib/libevent-2.0.5.dylib
...
Trace/BPT trap: 5

이 문제는 아마도 설치되어 있는 libevent 라이브러리와 tmux가 필요로 하는 libevent의 버전이 달라서 생기는 문제인 것 같다. 해결 방법은 기존에 설치되어 있는 libevent를 제거하고 tmux를 설치하는 것이다. tmux를 설치할 때 올바른 버전의 libevent가 같이 설치되기 때문이다.

brew uninstall libevent
brew install tmux

용어 설명

본격적으로 사용법을 배우기 전에 몇 가지 용어를 알고 가야 한다.

Session

세션 실행

# 세션 생성(이름은 숫자로 정해짐)
$ tmux

or

# 세션 생성하며 이름 지정
$ tmux new -s session_name
$ tmux new-session -s session_name

세션 종료

# 세션 안의 마지막 팬에서 실행
$ exit

or

# 세션 바깥에서 특정 세션을 종료
$ tmux kill-session -t session_name

세션 attach

# 특정 세션으로 진입하기
$ tmux attach -t session_name

세션 detach

# 세션 빠져나오기
# 세션 안에서 실행
<prefix> + d

세션 목록 보기

$ tmux ls

Window

윈도우와 관련된 명령어 & 단축키는 모두 세션 안에서 실행해야 한다.

윈도우 생성

<prefix> + c

윈도우 이름 변경

<prefix> + ,

이전, 다음 윈도우 이동

# 다음 윈도우
<prefix> + n

# 이전 윈도우
<prefix> + p

모든 윈도우 리스트 보기

<prefix> + w

Pane

세로로 윈도우 분할

<prefix> + %

가로로 윈도우 분할

<prefix> + "

팬 이동

<prefix> + q + 숫자

or

<prefix> + q + 방향키

# 특정 팬을 전체화면으로 전환
# 한번 더 누르면 원상태 복구
<prefix> + z

마치며

이번 포스팅에서는 간단한 tmux 사용법을 알아봤다. 이제 세션, 윈도우, 팬을 자유롭게 생성하고 종료할 수 있을 것이다. 다음에는 tmux에 플러그인을 설치하고 설정파일을 커스텀하는 것을 배워보자.