노트

tmux 기초

tmux (Terminal Multiplexer)

인프라#tooling#linux · 연결된 개념 3개

쉽게 말하면

tmux는 불을 켜 둔 채 나왔다가 다시 들어가면 그대로 이어지는 작업실 같아요. 터미널을 닫거나 SSH가 끊겨도 서버의 작업은 계속 돌고, 한 화면을 여러 칸으로 나눠 셸을 동시에 띄울 수도 있어요.

비유가 깨지는 곳 tmux는 사람이 다시 붙어 보는 작업실이지 프로세스 관리자가 아니에요. 그래서 오래 도는 서버를 잠깐 띄워 두기엔 좋지만, 운영 환경의 상주 프로세스는 launchd나 systemd에 맡겨요.

tmux는 터미널 하나 안에서 여러 셸을 띄우고 나누는 터미널 멀티플렉서(terminal multiplexer)다. 가장 큰 장점은 세션이 터미널과 분리돼 계속 살아 있다는 것이다. SSH가 끊겨도 서버의 작업은 계속 돌고, 다시 붙으면 그대로 이어진다.

구조

세션(session) 안에 윈도우(window, 탭)가 있고, 윈도우를 패인(pane)으로 나눈다. 모든 단축키는 프리픽스 Ctrl+b를 먼저 누른 뒤 입력한다.

키동작
% / "세로 / 가로 분할
방향키패인 이동
z현재 패인 확대·복귀
x현재 패인 닫기
c / n / p / 숫자새 윈도우 / 다음 / 이전 / 번호로 이동
,윈도우 이름 변경
d세션에서 분리(detach)
s세션 목록
[복사 모드(나갈 때 q)
!패인을 새 윈도우로 떼어내기
tmux new -s api          # 이름 붙여 새 세션
tmux ls                  # 세션 목록
tmux attach -t api       # 다시 붙기
tmux rename-session -t 0 api

설정 예

# ~/.tmux.conf  (적용: tmux source-file ~/.tmux.conf)
set -g mouse on
setw -g mode-keys vi
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"

떼어낸 패인을 다시 붙일 때는 명령 모드(Ctrl+b :)에서 join-pane -h -s <윈도우번호>를 쓴다. 프리픽스를 Ctrl+a로 바꾸는 사람도 많다. vi 키 바인딩에 익숙하다면 IDE에서 Vim 쓰기, 셸 설정은 zsh·oh-my-zsh 터미널 환경과 함께 보면 좋다. 오래 도는 서버 프로세스를 띄워 둘 때 쓰기 좋지만, 운영 환경의 상주 프로세스는 macOS launchd로 상주 프로세스 띄우기나 systemd 같은 프로세스 매니저에 맡긴다.

출처: tmux 위키: Getting Started

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 머지와 리베이스

    두 브랜치의 작업을 합치는 두 방법이다. 머지는 히스토리를 그대로 두고 합치는 커밋을 하나 더 만들고, 리베이스는 내 커밋들을 상대 브랜치 끝 위로 다시 적용해 일직선 히스토리를 만든다.

  • 환경변수 스코프와 source

    셸에서 만든 변수는 기본적으로 그 셸 안에서만 보이고, export해야 그 셸이 띄우는 자식 프로세스(child process)에 전달된다. 그리고 스크립트를 실행하면 자식 프로세스에서 돌기 때문에, 스크립트가 바꾼 환경은 부모 셸로 돌아오지 않는다.

  • 포트를 쓰는 프로세스 찾아 종료하기

    "address already in use"로 서버가 안 뜰 때, 그 포트를 잡고 있는 프로세스를 lsof로 찾아 끈다. lsof(list open files)는 열린 파일과 소켓을 쓰는 프로세스를 보여준다.

  • 커밋 메시지와 원자적 커밋

    좋은 커밋은 한 가지 변경만 담고(원자적 커밋, atomic commit), 그 변경이 무엇이고 왜 필요했는지를 메시지로 설명한다. 히스토리는 나중의 나와 동료가 읽는 문서다.

  • tsconfig 핵심 옵션

    tsconfig.json은 TypeScript 컴파일러(tsc)에게 어떤 파일을, 어떤 규칙으로 검사하고, 무엇을 출력할지 알려 주는 프로젝트 설정 파일이다. tsc --init으로 만들고, 이 파일이 있으면 tsc만 쳐도 프로젝트 전체를 컴파일한다(-w는 감시 모드, watch mode).

보기 옵션