tmux란?
tmux(Terminal Multiplexer)는 하나의 터미널 안에서 여러 셸 세션을 관리할 수 있는 도구다.
왜 쓰는가?
- 화면 분할: 하나의 터미널을 여러 패널로 나눠서 동시에 작업
- 세션 유지: SSH 연결이 끊어져도 작업이 계속 유지됨
- 원격 작업: 서버에서 tmux를 띄워두면 언제든 다시 붙을 수 있음 (detach/attach)
- 자동화: 스크립트로 복잡한 윈도우/패널 레이아웃을 한 번에 구성
설치
# macOS
brew install tmux
# Rocky Linux / CentOS
dnf install -y tmux
# Ubuntu / Debian
apt install -y tmux
기본 개념
tmux
├── Session (세션)
│ ├── Window 1 (윈도우 = 탭)
│ │ ├── Pane 1 (패널 = 분할 영역)
│ │ └── Pane 2
│ └── Window 2
│ └── Pane 1
└── Session 2
└── ...
- Session: 독립적인 작업 단위. 프로젝트별로 세션을 만들면 좋다
- Window: 세션 안의 탭. 화면 전체를 차지
- Pane: 윈도우를 분할한 패널. 여러 셸을 동시에 볼 수 있다
필수 단축키
tmux의 모든 단축키는 Prefix 키를 먼저 누른 뒤 명령키를 누른다.
나는 Prefix를 Ctrl+Space로 설정했다 (기본값 Ctrl+b도 유지).
세션
| 키 | 동작 |
|---|---|
tmux new -s 이름 | 새 세션 생성 |
Prefix d | 세션에서 분리 (detach) |
tmux attach -t 이름 | 세션에 다시 붙기 |
tmux ls | 세션 목록 |
tmux kill-session -t 이름 | 세션 삭제 |
윈도우
| 키 | 동작 |
|---|---|
Prefix c | 새 윈도우 |
Prefix n / Prefix p | 다음/이전 윈도우 |
Prefix 숫자 | 해당 번호 윈도우로 이동 |
Prefix , | 윈도우 이름 변경 |
Prefix & | 윈도우 닫기 |
패널
| 키 | 동작 |
|---|---|
Prefix % | 세로 분할 |
Prefix " | 가로 분할 |
Prefix h/j/k/l | 패널 이동 (내 설정) |
Prefix x | 패널 닫기 |
Prefix z | 패널 풀스크린 토글 (zoom) |
Prefix Space | 레이아웃 순환 |
Prefix z는 유용하다. 패널 하나를 전체화면으로 확대했다가 다시 원래 크기로 되돌릴 수 있다.
나의 tmux.conf 전체 설정
Prefix 키
# Ctrl+Space를 메인 Prefix로, Ctrl+b도 유지
set -g prefix C-Space
set -g prefix2 C-b
bind C-Space send-prefix
기본 Ctrl+b는 손이 불편하다. Ctrl+Space가 훨씬 자연스럽다.
기본 옵션
# 히스토리 50000줄 유지
set-option -g history-limit 50000
# 분할 시 현재 경로 유지
bind % split-window -h -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
# 트루컬러 지원
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# 윈도우 이름 자동 변경 끄기
set -g automatic-rename off
# 마우스 지원
set -g mouse on
# 스크롤 여유
set -g allow-passthrough on
패널 테두리 커스터마이징
# 패널 상단에 인덱스와 명령어 표시
set -g pane-border-format " #{pane_index} #{pane_current_command} "
set -g pane-border-status top
set -g pane-border-lines double
# 활성 패널 강조 (파란색)
set -g pane-active-border-style "fg=#89b4fa"
set -g pane-border-style "fg=#585b70"
# 활성/비활성 윈도우 배경색 차이
set -g window-active-style "bg=#1e1e2e"
set -g window-style "bg=#11111b"
비활성 패널의 배경을 약간 어둡게 하면 현재 작업 중인 패널이 바로 눈에 들어온다.
vi 복사 모드
setw -g mode-keys vi
# v로 선택 시작, y로 복사 (시스템 클립보드에)
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
# 마우스 드래그로 선택 시 클립보드에 복사
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear "pbcopy"
Prefix [로 복사 모드에 진입하면 Vim처럼 v로 선택, y로 복사할 수 있다. pbcopy로 macOS 클립보드에 바로 들어간다.
마우스 더블클릭으로 단어 선택
# 단어 구분자에서 -./?를 제외 (URL, 경로를 한 덩어리로 선택)
set -g word-separators " =()[]{};,!@#$%^&*+|<>\"'"
# 더블클릭으로 단어 선택
bind -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word
bind -n DoubleClick1Pane select-pane \; copy-mode -M \; send-keys -X select-word
마우스 스크롤 속도
# 기본 3줄 → 5줄씩 스크롤
bind-key -T copy-mode-vi WheelUpPane send-keys -X -N 5 scroll-up
bind-key -T copy-mode-vi WheelDownPane send-keys -X -N 5 scroll-down
패널 이동 (hjkl)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind L last-window # 마지막 윈도우로 이동
bind r source-file ~/.tmux.conf \; display "Reloaded!"
Neovim과 동일한 hjkl 방향키를 사용한다. Prefix r로 설정 리로드.
yazi 파일 탐색기 연동
# Prefix + Tab: 오른쪽 50% 분할에서 yazi 실행
bind Tab split-window -h -l 50% -c "#{pane_current_path}" "yazi"
yazi는 터미널 파일 관리자다. Prefix Tab으로 현재 디렉토리에서 바로 열 수 있다.
플러그인
TPM (Tmux Plugin Manager)
# 설치
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
tmux 실행 후 Prefix + I(대문자)로 플러그인을 설치한다.
사용 중인 플러그인
set -g @plugin 'tmux-plugins/tpm' # 플러그인 매니저
set -g @plugin 'catppuccin/tmux' # 테마
set -g @plugin 'tmux-plugins/tmux-cpu' # CPU 사용률
set -g @plugin 'tmux-plugins/tmux-battery' # 배터리 표시
set -g @plugin 'tmux-plugins/tmux-resurrect' # 세션 저장/복원
set -g @plugin 'tmux-plugins/tmux-continuum' # 자동 저장/복원
| 플러그인 | 역할 |
|---|---|
| catppuccin/tmux | Catppuccin Mocha 테마 |
| tmux-cpu | 상태바에 CPU/메모리 사용률 표시 |
| tmux-battery | 상태바에 배터리 잔량 표시 |
| tmux-resurrect | Prefix Ctrl-s로 세션 저장, Prefix Ctrl-r로 복원 |
| tmux-continuum | 15분마다 자동 저장, tmux 시작 시 자동 복원 |
tmux-resurrect + continuum
set -g @continuum-restore 'on' # tmux 시작 시 자동 복원
set -g @continuum-save-interval '15' # 15분마다 자동 저장
이 조합 덕분에 시스템을 재시작해도 tmux 세션이 그대로 살아난다. 윈도우 레이아웃, 패널 구성, 작업 디렉토리까지 복원된다.
Catppuccin 테마 + 상태바
set -g @catppuccin_flavor 'mocha'
set -g @catppuccin_window_status_style 'rounded'
상태바 구성
왼쪽: 세션 이름
set -g status-left "#{E:@catppuccin_status_session}"
오른쪽: 디렉토리 → Git 브랜치 → CPU → 메모리 → 배터리 → 시간
set -g status-right "#{E:@catppuccin_status_directory}"
set -ag status-right " #(cd #{pane_current_path}; git rev-parse --abbrev-ref HEAD 2>/dev/null || echo '-') "
set -ag status-right " #{cpu_percentage} "
set -ag status-right " #{ram_percentage} "
set -ag status-right " #{battery_icon} #{battery_percentage} "
set -ag status-right "#{E:@catppuccin_status_date_time}"
상태바에 Git 브랜치가 표시되어서 어떤 브랜치에서 작업 중인지 바로 알 수 있다.
실전 활용: 다중 서버 접속 자동화
tmux의 진짜 힘은 스크립트로 레이아웃을 자동 구성할 수 있다는 점이다.
예를 들어 운영 서버 여러 대에 동시에 접속하는 스크립트를 만들 수 있다:
#!/bin/bash
SESSION="my-servers"
# 이미 세션이 있으면 재사용
tmux has-session -t $SESSION 2>/dev/null && {
tmux attach -t $SESSION
exit 0
}
# 윈도우 1: 전체 서버 모니터링 (tiled 레이아웃)
tmux new-session -d -s $SESSION -n "all" "ssh server1"
tmux split-window -t $SESSION:1 "ssh server2"
tmux split-window -t $SESSION:1 "ssh server3"
tmux split-window -t $SESSION:1 "ssh server4"
tmux select-layout -t $SESSION:1 tiled
# 윈도우 2: DB 서버만
tmux new-window -t $SESSION -n "db" "ssh db-primary"
tmux split-window -t $SESSION:2 -h "ssh db-replica"
tmux select-window -t $SESSION:1
tmux attach -t $SESSION
이 스크립트를 실행하면:
┌─────────────┬─────────────┐
│ server1 │ server2 │
├─────────────┼─────────────┤
│ server3 │ server4 │
└─────────────┴─────────────┘
이런 레이아웃이 한 번에 만들어진다. 나는 이 방식으로 환경별(beta/prod) x 리전별 서버 접속 스크립트를 만들어서 사용하고 있다.
synchronize-panes
모든 패널에 동일한 명령을 동시에 입력할 수도 있다:
# 동기화 모드 토글
Prefix :setw synchronize-panes on
이 상태에서 타이핑하면 모든 패널에 같은 명령이 입력된다. 여러 서버에 동시에 같은 작업을 할 때 유용하다.
설정 적용 방법
1. TPM 설치
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
2. tmux.conf 저장
위 설정 내용을 ~/.tmux.conf에 저장한다.
3. 플러그인 설치
tmux # tmux 실행
# Prefix + I (Shift+i) # 플러그인 설치
4. 설정 리로드
# tmux 안에서
Prefix r
# 또는 터미널에서
tmux source-file ~/.tmux.conf
5. yazi 설치 (선택)
# macOS
brew install yazi
# 기타: https://yazi-rs.github.io/docs/installation
정리
| 기능 | 설정 |
|---|---|
| Prefix | Ctrl+Space (+ Ctrl+b) |
| 패널 이동 | Prefix h/j/k/l |
| 복사 모드 | vi 스타일 (v 선택, y 복사) |
| 테마 | Catppuccin Mocha |
| 상태바 | 세션, 디렉토리, Git, CPU, RAM, 배터리, 시간 |
| 세션 복원 | resurrect + continuum (자동) |
| 파일 탐색 | Prefix Tab (yazi) |
| 설정 리로드 | Prefix r |
tmux는 터미널에서 작업하는 시간이 길수록 효과가 크다. 특히 원격 서버 작업이 많다면 세션 유지와 다중 접속 자동화만으로도 생산성이 크게 올라간다.