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/tmuxCatppuccin Mocha 테마
tmux-cpu상태바에 CPU/메모리 사용률 표시
tmux-battery상태바에 배터리 잔량 표시
tmux-resurrectPrefix Ctrl-s로 세션 저장, Prefix Ctrl-r로 복원
tmux-continuum15분마다 자동 저장, 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

정리

기능설정
PrefixCtrl+Space (+ Ctrl+b)
패널 이동Prefix h/j/k/l
복사 모드vi 스타일 (v 선택, y 복사)
테마Catppuccin Mocha
상태바세션, 디렉토리, Git, CPU, RAM, 배터리, 시간
세션 복원resurrect + continuum (자동)
파일 탐색Prefix Tab (yazi)
설정 리로드Prefix r

tmux는 터미널에서 작업하는 시간이 길수록 효과가 크다. 특히 원격 서버 작업이 많다면 세션 유지와 다중 접속 자동화만으로도 생산성이 크게 올라간다.