tmux = 터미널 멀티플렉서
멀티플렉서가 입력 한 개 받아서 여러 출력 서비스. tmux 가 터미널 연결 한 개 (로컬 터미널, 또는 단일 SSH 세션) 받아서 그 안에 여러 영구 window 와 pane 줘. 서버에 한 번 로그인; 거기 안에 셸 열 개 돌고, 로그아웃 해도 다 살아있어.
일반 영어로 킬러 기능들
- 영구 세션. 세션에서 detach, 터미널 닫고, 이틀 걸어가 — 모든 돌고 있는 프로세스, 모든 열린 파일, 모든 커서 위치가 정확히 그대로. 이게 사람들이 tmux 에 evangelical 해지는 이유.
- SSH 끊겨도 작업 안 죽어. 와이파이 deploy 중간에 끊겨? Tmux 없는 SSH 세션이면 스크립트 죽어. 박스의 tmux 세션이면 스크립트 계속 돌고; 다시 연결되면 reattach.
- Fancy 터미널 없이 split pane. 내장 split 이 macOS Terminal, Linux VPS 에 SSH, 시리얼 통한 Raspberry Pi 어디서든 똑같이 작동.
- 여러 window. 브라우저 탭처럼, 셸용.
- 스크립트 가능한 레이아웃. 워크스페이스 한 번 정의 ("editor + dev 서버 + 로그 tail 세 pane 으로 열기") 하고 한 셸 명령으로 띄움.
- 페어 프로그래밍. 두 사용자가 같은 머신에 SSH 해서 같은 tmux 세션에 attach — 둘 다 서로의 키스트로크를 실시간으로 봐.
"지금 tmux 배우기" 가 옳은 답인 이유
현대 터미널 (iTerm2, Wezterm, Ghostty, Kitty) 이 자체 split 과 tab 을 갖고 있어. 좋아. 근데 로컬에서만 작동. 서버에 SSH 하는 순간 그 기능들 도움 안 돼. tmux 는 리모트 머신에서 돌아가니까, split 과 영속성과 레이아웃이 어떤 터미널 에뮬레이터 앞에 앉아 있든 따라와.
계층
중첩된 세 개념; 단어 지금 익혀, 키는 다음 레슨:
- 세션 — 이름 붙은 워크스페이스. 보통 프로젝트당 한 개. "work", "cwk-pippa", "vim-tmux-quest."
- Window — 세션 안의 브라우저 탭 같은 거. 세션이 여러 window 가질 수 있음.
- Pane — window 안의 split. 여러 셸 동시 표시.
tmux 의 일: 절대 상태 잃지 않기. 에디터는 오고 가지만, tmux 는 그 아래 레이어로 컨텍스트를 살려둬. "와이파이 죽었는데 아무것도 안 잃어버림" 순간 한 번 느끼면, tmux 영원히 박혀.