Featured image of post [Tmux] 06. tmux.conf 기초 - 설정 문법과 reload

[Tmux] 06. tmux.conf 기초 - 설정 문법과 reload

tmux.conf 파일의 위치와 로드 순서, 명령 한 줄·주석·세미콜론 체인 문법, server/session/window/pane 옵션 범위, source-file로 재적용(reload)하는 법을 실전 예제로 다룹니다.

05장에서는 tmux set -g prefix C-a처럼 명령줄로 옵션을 바꿨다. 매번 서버를 새로 띄울 때마다 이 명령을 다시 입력하고 싶지 않다면, 그 명령들을 파일 하나에 모아두고 tmux가 시작할 때 자동으로 읽게 하면 된다. 이 장은 그 파일 — tmux.conf — 이 어디에 있고, 어떤 문법을 따르며, 이미 떠 있는 서버에 변경사항을 어떻게 반영(reload)하는지를 다룬다.

이 장을 읽기 전에

선행 챕터: 이 장은 05장: Prefix 키와 커맨드 모드에서 명령줄로 실행해 본 set -g prefix 같은 옵션 변경을, 파일로 관리하는 법으로 확장한다. 05장 끝에서 예고한 “옵션 범위(global/session/window/pane)“도 이 장에서 다룬다.

이 장의 깊이: 입문에서 중급(설정 파일이 언제 읽히고, 왜 reload가 필요한지 스스로 진단할 수 있는 수준) 사이를 오간다. 다루지 않는 것: 특정 키를 원하는 동작에 새로 연결하는 bind-key 문법 자체는 07장에서, 상태바에 무엇을 표시할지 정하는 포맷 문자열은 08장에서 각각 다룬다. 이 장은 설정 파일의 위치·문법·재적용에 집중한다.

당신의 수준에 맞는 경로

수준읽을 부분핵심 목표
tmux.conf를 아직 만들어 본 적 없는 사람정신 모델, 설정 파일 위치와 문법, 예시첫 tmux.conf를 만들고 reload로 반영할 수 있다
명령줄로 옵션을 바꿔봤지만 파일로 관리하고 싶은 사람옵션 범위, 예시(reload 패턴)-g 유무에 따른 옵션 적용 범위를 이해하고 파일로 옮길 수 있다
설정을 고쳤는데 반영이 안 돼 당황한 적 있는 사람주의사항·함정, 흔한 오개념설정 파일이 언제 읽히는지 알고 reload 누락을 스스로 진단할 수 있다
여러 서버·환경에 같은 설정을 배포하려는 사람설정 파일 위치와 문법(-f, 시스템 전역 파일), 비교/트레이드오프사용자별·시스템 전역 설정 파일의 차이를 활용할 수 있다

정신 모델: 설정 파일은 “서버가 시작할 때 한 번 실행하는 명령 목록”

tmux.conf는 특별한 선언적 형식이 아니라, 지금까지 명령줄에서 tmux <명령>으로 입력해 온 것과 똑같은 tmux 명령을 한 줄에 하나씩 적어 둔 파일이다. tmux 서버는 처음 시작될 때 이 파일을 딱 한 번 읽어 위에서부터 순서대로 실행한다. 이미 떠 있는 서버는 파일이 바뀌어도 스스로 다시 읽지 않으므로, 변경사항을 반영하려면 source-file 명령으로 명시적으로 다시 실행시켜야 한다.

파일 단위와 한 줄(명령 시퀀스) 단위의 오류 처리 방식이 서로 다르다는 점도 알아 두면 유용하다. 한 줄에 세미콜론(;)으로 여러 명령을 이어 쓰면 그 줄은 하나의 명령 시퀀스가 되고, 그 시퀀스 안에서 앞 명령이 실패하면 뒤 명령은 아예 실행되지 않는다. 반면 파일 전체 수준에서는 관용적이다 — 어떤 줄에서 에러가 나도 tmux는 그 줄만 건너뛰고 파일의 나머지 줄은 계속 처리하며, 에러 메시지는 그때 만들어지는 첫 세션에 표시된다.

설정 파일 위치와 문법

tmux는 서버가 시작될 때 아래 순서로 설정 파일을 찾는다.

파일성격
@SYSCONFDIR@/tmux.conf(예: /etc/tmux.conf)시스템 전역 설정(있으면 먼저 로드)
~/.tmux.conf사용자 설정(가장 흔히 쓰는 위치)
$XDG_CONFIG_HOME/tmux/tmux.conf 또는 ~/.config/tmux/tmux.confXDG 규격을 따르는 대안 위치

-f 파일경로 옵션으로 tmux를 실행하면 위 기본 탐색 대신 지정한 파일을 대신 읽는다. 여러 환경(작업용/개인용, 로컬/원격)에 서로 다른 설정을 쓰고 싶을 때 유용하다.

@SYSCONFDIR@의 실제 경로는 고정값이 아니라 tmux를 빌드·패키징할 때 정해지는 값이라, 같은 리눅스 배포판이라도 패키지 관리자마다, 또 macOS의 Homebrew 빌드에서도 서로 다를 수 있다(예: /etc/tmux.conf, /usr/local/etc/tmux.conf 등). 정확한 위치가 궁금하면 추측하지 말고 tmux -V와 함께 패키지 매니저의 파일 목록 조회 기능(예: dpkg -L tmux, brew list tmux)으로 직접 확인하는 것이 안전하다.

문법 규칙은 단순하다. 한 줄에 명령 하나가 기본이고, #로 시작하는 부분은 그 줄 끝까지 주석으로 무시된다. 여러 명령을 한 줄에 세미콜론으로 이어 쓸 수 있고, 줄 끝에 백슬래시(\)를 두면 다음 줄과 이어 붙는다(줄 잇기). 인자에 공백이나 특수문자가 들어가면 작은따옴표·큰따옴표 또는 중괄호({})로 감싼다.

옵션 범위: server / session / window / pane

05장에서 set -g prefix C-a를 실행하며 “전역으로 바뀐다"고만 설명했다. 실제로 tmux의 옵션은 서버 전체에 적용되는 것, 세션마다 다르게 줄 수 있는 것, 윈도우·패널마다 다르게 줄 수 있는 것으로 나뉜다.

플래그범위설명
-s서버(server)서버 전체에 적용되는 옵션(세션 구분 없음)
(생략)세션(session)옵션 이름으로 서버가 스스로 범위를 판단하되, 기본은 현재 세션에만 적용
-w윈도우(window)현재 윈도우에만 적용
-p패널(pane)현재 패널에만 적용
-g전역(global)세션 옵션이면 모든 세션에, 윈도우 옵션이면 모든 윈도우에 공통 기본값으로 적용

-g 없이 set prefix C-a를 실행하면 그 순간 접속해 있는 세션에만 적용되고, 다른 세션이나 앞으로 만들 세션에는 영향을 주지 않는다. tmux.conf에서 prefix처럼 항상 같은 값을 쓰고 싶은 옵션은 거의 항상 -g를 붙인다.

예시

첫 tmux.conf 작성하기

1
2
3
4
5
6
7
8
9
# ~/.tmux.conf
# 이 줄은 주석이다 - 파일 맨 위에 의도를 적어두면 나중에 알아보기 쉽다

set -g prefix C-a       # prefix를 Ctrl+a로
unbind C-b
bind C-a send-prefix

set -g mouse on         # 마우스로 패널 크기 조절·선택 허용
set -g history-limit 10000   # 스크롤백 기록을 늘림

변경사항 반영하기 (reload)

이미 실행 중인 서버는 파일을 다시 읽지 않으므로, 고친 뒤에는 source-file로 명시적으로 다시 실행시켜야 한다.

1
2
# 지금 이 서버에 tmux.conf를 다시 적용한다
tmux source-file ~/.tmux.conf

매번 이렇게 전체 명령을 타이핑하기 번거로우므로, 아래처럼 단축키 하나에 reload 자체를 연결해 두는 것이 관례다(단축키를 새로 연결하는 bind 문법 자체는 07장에서 더 다룬다).

1
2
# tmux.conf 안에 추가: prefix 뒤 r 을 누르면 reload하고 확인 메시지를 띄운다
bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"

반영 전에 문법부터 확인하기

설정이 복잡해지면 reload 전에 문법 오류가 없는지 먼저 확인하는 것이 안전하다.

1
2
3
4
5
# 실행하지 않고 파싱만 해서 문법 오류 여부만 확인 (dry-run)
tmux source-file -n ~/.tmux.conf

# 실제로 어떤 명령이 어느 줄에서 파싱됐는지 자세히 보기
tmux source-file -v ~/.tmux.conf

비교/트레이드오프

명령줄에서 그때그때 옵션을 바꾸는 것과, 파일로 관리하는 것은 서로 다른 상황에 맞는다.

구분명령줄에서 직접 실행tmux.conf 파일로 관리
지속성서버가 재시작되면 사라진다서버를 새로 띄울 때마다 자동으로 적용된다
재현성다른 서버·환경에 옮기려면 명령을 다시 타이핑해야 한다파일 하나만 복사하면 동일한 환경을 재현할 수 있다
실험즉시 효과를 확인하며 빠르게 시험해 볼 수 있다매번 reload를 실행해야 반영을 확인할 수 있다
적합한 상황지금 세션에서만 잠깐 필요한 임시 조정앞으로 계속 쓸 기본 설정

실무에서는 두 방식을 함께 쓴다 — 새 옵션을 명령줄에서 즉시 시험해 마음에 들면 그 명령을 tmux.conf에 옮겨 적고 reload하는 흐름이 흔하다.

주의사항·함정

reload를 잊는 사고: 설정 파일을 고쳤는데 화면이 그대로라면, 가장 먼저 의심할 것은 문법 오류가 아니라 reload를 안 했다는 사실이다. 서버는 파일을 스스로 다시 읽지 않는다.

세미콜론 체인과 파일 전체의 오류 처리 차이: 한 줄 안에서 세미콜론으로 명령을 여러 개 이었다면, 앞 명령이 실패하는 순간 그 줄의 나머지 명령은 실행되지 않는다. 반면 파일의 다른 줄들은 그 오류와 무관하게 계속 처리된다. “설정 일부만 적용된 것 같다"는 증상은 대개 세미콜론으로 묶은 한 줄 안에서 앞부분이 실패했다는 신호다.

여러 위치에 설정 파일이 동시에 존재할 때: ~/.tmux.conf~/.config/tmux/tmux.conf를 둘 다 만들어 두면 어느 쪽이 실제로 읽히는지 헷갈리기 쉽다. -f로 경로를 명시하거나, tmux source-file -v로 지금 어떤 파일이 파싱됐는지 확인하는 습관을 들인다.

흔한 오개념

“설정 파일을 고치면 실행 중인 tmux에 바로 반영된다”는 생각은 틀렸다. 서버는 시작 시점에만 파일을 읽으므로, source-file(또는 이를 연결한 reload 단축키)을 실행해야 변경사항이 지금 떠 있는 서버에도 적용된다.

“설정 파일에 오타가 하나 있으면 전체 설정이 무효가 된다”는 오해도 흔하다. 실제로는 오류가 난 그 줄만 건너뛰고, 파일의 나머지 줄은 계속 처리된다. 다만 오류 메시지는 그때 새로 만들어지는 세션에서만 보이므로, 이미 열려 있던 세션에서는 무엇이 잘못됐는지 바로 알기 어려울 수 있다.

"-g 없이 set을 쓰면 결국 모든 세션에 적용된다”는 생각도 정확하지 않다. -g가 없으면 옵션 종류에 따라 현재 세션·윈도우·패널에만 적용되고, 다른 세션에는 영향을 주지 않는다. 모든 세션에 공통으로 적용하려는 옵션은 명시적으로 -g를 붙여야 한다.

다음 장에서는

07장: 키바인딩 커스터마이징 - bind-key와 vim 스타일 재배치에서는 이 장에서 잠깐 맛본 bind/unbind 문법을 본격적으로 다뤄, 원하는 키에 원하는 동작을 자유롭게 연결하는 법을 배운다.

평가 기준

이 장을 읽은 후 다음을 할 수 있어야 한다.

  • tmux.conf가 언제, 몇 번 읽히는지 설명하고, 그로부터 reload가 왜 필요한지 추론할 수 있다.
  • source-file의 기본 동작과 -n(dry-run)·-v(상세 파싱 결과) 옵션의 용도를 구분할 수 있다.
  • -g의 유무가 옵션 적용 범위(서버/세션/윈도우/패널)를 어떻게 바꾸는지 설명할 수 있다.
  • 세미콜론으로 묶은 한 줄과 파일 전체의 오류 처리 방식이 어떻게 다른지 설명할 수 있다.
  • 사용자 설정 파일과 시스템 전역 설정 파일의 차이, -f 옵션의 용도를 설명할 수 있다.

참고 및 출처

  1. tmux(1) - OpenBSD Manual — 설정 파일 위치(FILES), -f 옵션, PARSING SYNTAX(주석·세미콜론·줄 잇기), source-file·set-option·display-message 공식 설명.
  2. tmux/tmux — tmux 공식 소스 저장소.