개발할 때 터미널 하나만으로 여러 작업을 동시에 관리하고, SSH 연결이 끊겨도 작업을 이어갈 수 있다면 얼마나 편할까요? tmux는 바로 그런 매직을 가능케 해 주는 터미널 다중화(Terminal Multiplexer) 도구예요. 아래 내용은 설치에서 시작해, 세션·창·패인 관리, Screen과의 비교, 복사·붙여넣기까지 모두 업데이트한 완전판입니다.
tmux란 무엇인가?
- 터미널 세션 관리: 세션(Session) → 창(Window) → 분할창(Pane)을 계층적으로 관리
- 세션 유지: SSH 연결이 끊겨도 백그라운드에서 세션이 살아 있으므로, 언제든 다시 붙여서 이어서 작업 가능
- 자동화 & 커스터마이징: 스크립트로 레이아웃을 미리 구성하거나,
~/.tmux.conf
에서 단축키·옵션을 내 맘대로 설정
설치하기
sudo apt update
sudo apt install tmux
설치 확인:
tmux -V
# 예: tmux 3.3a
세션(Session) 관리
기능 | 명령어/키 조합 |
---|---|
새 세션 시작 | tmux 또는 tmux new -s <세션명> |
세션 분리(detach) | Ctrl + b → d |
세션 재접속 | tmux attach (단축: tmux a ) |
tmux attach -t <세션명> (단축: tmux a -t <세션명> ) | |
세션 목록 보기 | tmux ls 또는 tmux list-sessions |
세션 종료 | tmux kill-session -t <세션명> |
모든 세션 종료 | tmux kill-server |
팁: 세션에 이름(-s
)을 붙이면 여러 세션을 쉽게 구분하고, tmux a -t <이름>
으로 바로 붙을 수 있어요.
창(Window) 관리
- 새 창 생성:
Ctrl + b
→c
- 창 이름 변경:
Ctrl + b
→,
- 다음/이전 창 이동:
Ctrl + b
→n
/p
- 인덱스로 바로 이동:
Ctrl + b
→ 숫자(0~9) - 창 닫기:
Ctrl + b
→&
→y
창마다 서비스나 프로젝트를 분리해 두면, 여러 터미널을 켜 놓은 것보다 훨씬 깔끔합니다.
분할창(Pane) 활용하기
한 창 안에서 화면을 분할해 여러 작업을 동시에 볼 수 있어요.
- 수평 분할:
Ctrl + b
→"
- 수직 분할:
Ctrl + b
→%
- 패인 이동:
Ctrl + b
→ 방향키(← ↑ → ↓)
분할창 닫기
- 현재 패인만 닫기:
Ctrl + b → x → y
- 현재 패인만 남기고 전부 닫기:
Ctrl + b → :kill-pane -a
복사·붙여넣기 (Copy & Paste)
tmux는 기본적으로 자체 버퍼를 쓰기 때문에, 복사 모드도 약간 설정이 필요합니다.
mode-keys 확인
tmux show-options -gw mode-keys
mode-keys emacs
(기본)mode-keys vi
Emacs 모드
- 복사 모드 진입:
Ctrl + b
→[
- 선택 시작:
Ctrl + Space
- 영역 확장: 방향키
- 복사 완료:
- 기본:
Alt + w
(또는Esc
→w
) - Enter 키로 복사하려면
~/.tmux.conf
에 아래 추가
bind-key -T copy-mode Enter send -X copy-selection-and-cancel
- 기본:
- 붙여넣기:
Ctrl + b
→]
Vi 모드 (선택 범위: Space)
set-option -g mode-keys vi
Ctrl + b
→[
Space
(선택 시작)- 방향키 또는
hjkl
(확장) Enter
또는y
(복사 완료)Ctrl + b
→]
(붙여넣기)
Nano 스타일 선택·복사 (추가 팁)
아래처럼 “Nano 스타일”로 키 매핑 예시만 바꿔서 ~/.tmux.conf
에 추가
# Nano 스타일: Ctrl+^ 로 선택 시작, Alt+6 로 복사 완료
unbind-key -T copy-mode-vi v
bind-key -T copy-mode-vi C-^ send -X begin-selection
unbind-key -T copy-mode-vi y
bind-key -T copy-mode-vi M-6 send -X copy-selection-and-cancel
C-^ : Ctrl + Shift + 6
(nano의 마크 시작 Ctrl+^
)
M-6 : Alt + 6
(nano의 복사 Alt+6
)
이제 tmux 복사 모드에서도 nano처럼
Ctrl + b
→[
Ctrl + Shift + 6
(마크 시작)- 방향키로 범위 확장
Alt + 6
(복사 및 모드 종료), 붙여넣기 Ctrl + u
를 그대로 쓰실 수 있습니다.
추가 팁 & 자동화
왜 자동화인가요?
매번 수작업으로 세션 생성→창 나누기→명령 입력 과정을 반복하면 번거롭죠. 스크립트 한 줄로 터미널 레이아웃 전체를 만들고, 명령까지 미리 실행해 놓으면 작업 효율이 쑥 올라갑니다.
스크립트 작성 및 실행하기
스크립트 파일 생성
홈 디렉터리나 프로젝트 폴더 안에 tmux_start.sh
같은 이름으로 만듭니다.
cd ~/projects/myproj
cat > tmux_start.sh << 'EOF'
#!/usr/bin/env bash
SESSION="myproj"
# 1) 기존 세션이 있으면 종료
tmux kill-session -t $SESSION 2>/dev/null
# 2) 백그라운드에서 새 세션 생성 (첫 번째 창 이름: editor)
tmux new-session -d -s $SESSION -n editor
# 3) 첫 번째 창(0번)에서 nano로 README.md 편집
tmux send-keys -t $SESSION:0 'cd ~/projects/myproj && nano README.md' C-m
# 4) 같은 창을 수평 분할하여 두 번째 패인 생성
tmux split-window -h -t $SESSION:0
# 5) 두 번째 패인(0.1)에서 개발 서버 실행
tmux send-keys -t $SESSION:0.1 'cd ~/projects/myproj && npm run dev' C-m
# 6) 좌측 패인에 포커스
tmux select-pane -t $SESSION:0.0
# 7) 세션에 붙기
tmux attach -t $SESSION
EOF
실행 권한 부여
chmod +x tmux_start.sh
스크립트 실행
./tmux_start.sh
- 스크립트가 세션을 초기화하고,
- nano 에디터와 npm dev 서버를 나란히 띄운 뒤,
- 자동으로 tmux 세션에 붙습니다.
한 줄로 실행하기 (Alias 활용)
자주 쓸 거라면 ~/.bashrc
나 ~/.zshrc
에 아래 alias를 추가해 보세요.
# ~/.bashrc 또는 ~/.zshrc 에 추가
alias start-myproj="~/projects/myproj/tmux_start.sh"
터미널에서
start-myproj
만 입력하면 위 스크립트가 실행됩니다.
응용: 세션 여러 개 한꺼번에 띄우기
회사 프로젝트, 블로그, 문서 편집 등 여러 세션을 스크립트 하나로 관리하고 싶다면, 같은 형태로 반복 블록을 추가하세요.
#!/usr/bin/env bash
for proj in myproj blog infra; do
tmux kill-session -t $proj 2>/dev/null
tmux new-session -d -s $proj -n main
tmux send-keys -t $proj:0 "cd ~/projects/$proj && clear" C-m
tmux split-window -v -t $proj:0
tmux send-keys -t $proj:0.1 "cd ~/projects/$proj && clear" C-m
done
# 모든 세션 목록 확인
tmux ls
for
루프 안에 원하는 프로젝트 이름만 추가하면,- 각 세션이
main
창과 두 개의 패인으로 자동 생성됩니다.
요약
- 스크립트 한 번 작성 → chmod +x → alias 등록
tmux new-session
,split-window
,send-keys
,attach
순으로 구성- 반복문 활용해 복수 세션 생성도 간단
이제 매번 창을 쪼개고 명령어를 일일이 입력하는 대신, 단 한 번의 실행으로 단일 명령어만으로도 원하는 tmux 레이아웃과 워크플로우를 즉시 활성화해 보세요!
GNU Screen vs tmux 비교
항목 | GNU Screen | tmux |
---|---|---|
개발 상태 | 레거시, 업데이트 빈도 낮음 | 활발한 개발, 기능 지속 추가 |
복사·붙여넣기 | 기본 터미널 클립보드와 자연 연동 | 자체 버퍼 사용, 설정 필요 |
분할창 지원 | 수평(Ctrl+a → S ) / 수직( Ctrl+a → |) | 수평(Ctrl + b → ") / 수직 (Ctrl + b → % ) |
스크립팅 | .screenrc 에 제한적 설정 | 세션·창·패인 스크립트로 자유롭게 구성 |
설정 파일 | ~/.screenrc | ~/.tmux.conf |
세션 관리 UI | 인덱스만 표시, 이름 표시 미흡 | 창·패인 인덱스와 이름을 깔끔히 보여줌 |
Screen vs tmux 주요 명령어 비교
작업 | GNU Screen | tmux |
---|---|---|
새 세션 시작 | screen -S <name> | tmux new -s <name> |
세션 분리 | Ctrl + a → d | Ctrl + b → d |
세션 목록 | screen -ls | tmux ls |
세션 재접속 | screen -r <PID|세션명> | tmux a -t <섹션명> 또는 tmux attach -t <세션명> |
세션 종료 | screen -X -S <name> quit | tmux kill-session -t <name> |
창 생성 | Ctrl + a → c | Ctrl + b → c |
창 전환 | Ctrl + a → n / p | Ctrl + b → n / p |
패인 분할 | Ctrl + a → S / Ctrl + a → | | Ctrl + b → " / Ctrl + b → % |
패인 전환 | Ctrl + a → Tab | Ctrl + b → 방향키 |
복사 모드 진입 | Ctrl + a → [ | Ctrl + b → [ |
자주 묻는 질문(FAQ)
Q1. tmux에서 스페이스를 눌러도 선택되지 않고 커서만 내려가요.
Emacs 모드일 때는 Ctrl+Space
로 선택을 시작해야 합니다. Space
만 누르면 일반 공백 입력처럼 동작합니다.
Q2. Emacs 모드에서 Enter 키로 복사가 안 돼요. M-w는 어떻게 누르나요?
M-w
는 Meta-w, 즉 Alt + w 또는 Esc → w 로 입력합니다.
Enter 키로 복사 완료를 원하면 .tmux.conf
에 bind-key -T copy-mode Enter send -X copy-selection-and-cancel
를 추가하세요.
Q3. 왜 tmux는 시스템 클립보드와 자동 연동되지 않나요?
tmux는 자체 버퍼를 사용하는 구조라, OS 클립보드와 연결하려면 set-clipboard on
설정이나 xclip
/xsel
같은 외부 도구를 파이프해 주어야 합니다.
마무리
지금까지 설치부터 세션·창·패인 관리, Screen 비교, 그리고 복사·붙여넣기 문제 해결까지 모두 업데이트했습니다. tmux를 제대로 익히면 터미널 활용도가 눈에 띄게 올라가니, 꼭 한 번 설정을 손봐 보시길 추천드려요. Happy tmuxing!