linux tmux

Tmux (terminal multiplexer)는 하나의 터미널을 다수의 pane(영역)으로 구분하여 프로그램을 실행하고 각 프로그램 사이를 쉽게 이동할 수 있는 툴이다. 보통을 screen 툴을 사용하거나 gui 환경에선 터미널을 여러개의 탭으 생성하여 사용하는데, 한화면에서 여러개의 프로그램으로 돌리며 모니터링할 수 있는데는 tmux 가 좋다.
공식 홈페이지 http://tmux.sourceforge.net/

# Ubuntu 에서 설치
sudo apt-get install tmux

# CentOS 에서 설치
sudo yum install tmux

# MacOS 에서 설치
brew install tmux

#####

# tmux 명령어/단축키
tmux -V # 버전, 버전에 따라 명령이 조금 달라질 수 있다.
tmux # 실행(새로운 세션으로 터미널 열림)
tmux new-session # 실행(새로운 세션으로 터미널 열림)
tmux list-commands # tmux 명령어 보기
tmux ls # 열려 있는 세션 리스트
tmux kill-server # 모든 세션(tabs,pane)종료
tmux list-windows # tab(window) 리스트
tmux list-panes # pane 리스트
tmux a # 세션 붙이기(attach)

# 수직분할 후 수평분할된 3개의 pane 을 가진 세션 시작
tmux new-session \; \
split-window -v \; \
split-window -h \;
attach

# 기본 prefix(ctrl+b) 대신 ctrl+a 사용하기
#set -g prefix C-a
#bind C-a send-prefix
#unbind C-b

ctrl+b ? # 설정된 단축키 보기
ctrl+b : # 명령 프롬프트 사용
ctrl+b t # 현재 시간 보기
ctrl+b s # session 리스트 보기 및 선택(enter), x 는 세션 삭제
ctrl+b c # 새 window(tab) 생성
ctrl+b w # window(tab) 리스트 보기 및 선택(enter), x 는 윈도우 삭제
ctrl+b n # 다음 tab 이동
ctrl+b p # 이전 tab 이동
ctrl+b f # tab 찾기
ctrl+b 번호  # tab 로 이동
ctrl+b , # 현재 tab 이름 변경
ctrl+b & 또는 exit # 현재 tab 종료
ctrl+b d # 세션 떼기(detach)
ctrl+b % # 수직으로 pane 나누기
ctrl+b " # 수평으로 pane 나누기
ctrl+b ! # 현재 pane 떼서 new tab 으로 이동시키기
ctrl+b q 번호선택 # pane 번호 보기 및 번호로 pane 선택
ctrl+b 방향키 # pane 이동(ctrl+b 후 방향키로 계속 이동 가능)
ctrl+b spacebar # pane 레이아웃 변경
ctrl+b alt+방향키 # pane 크기 변경
ctrl+b x 또는 exit # 현재 pane 종료
ctrl+b m 현재 pane mark/unmark
ctrl+b { 현재 선택한 pane 과 위쪽 pane 위치 교환
ctrl+b } 현재 선택한 pane 과 아래쪽 pane 위치 교환

# copy & paste
# setw -g mode-keys vi 로 vi 단축키를 활성화 선행
ctrl+b [ # copy mode 시작
spacebar # 블럭지정 시작, 방향키로 복사할 블럭 지정
enter # 복사
ctrl+b ] # 붙이기

# find
ctrl+b [ # copy mode 시작
/ # 찾을 문자 입력, vi 찾기와 같음

#####

# tmux 시작시 로딩되는 설정파일
# 명령 프롬프트로에서도 사용
vi ~/.tmux.conf
# -g global option
set -g display-panes-time 5000 # 5초 동안 pane 숫자 보이기

# 마우스 사용 활성화
# tmux 1.9 이전
#set -g mode-mouse on
#set -g mouse-resize-pane on
#set -g mouse-select-pane on
#set -g mouse-select-window on
# tmux 1.9 이후
set -g mouse on

# setw -> set window
setw -g mode-keys vi # vi 단축키 사용(디폴트는 emacs)

#setw synchronize-pane on # 모든 panes 에 동시 입력 활성화
#setw synchronize-pane off # 모든 panes 에 동시 입력 해제

# tab_mode 커스텀 모드 생성
bind -n C-t switch-client -T tab_mode \; refresh-client -S
bind -T tab_mode C-t switch-client -T root

# pane_mode 커스텀 모드 생성
bind -n C-p switch-client -T pane_mode \; refresh-client -S
bind -T pane_mode C-p switch-client -T root

# move_mode 커스텀 모드 생성
bind -n C-h switch-client -T move_mode \; refresh-client -S
bind -T move_mode C-h switch-client -T root

# resize_mode 커스텀 모드 생성
bind -n C-n switch-client -T resize_mode \; refresh-client -S
bind -T resize_mode C-n switch-client -T root

# tab_mode 에서 s 동시 입력 활성/비활성화 토글
bind -T tab_mode s setw synchronize-panes \; display "sync-panes: #{?synchronize-panes,ON,OFF}" \; switch-client -T tab_mode

# pane_mode 에서 s 동시 입력 활성/비활성화 토글
bind -T pane_mode s setw synchronize-panes \; display "sync-panes: #{?synchronize-panes,ON,OFF}" \; switch-client -T pane_mode

# 데모 메뉴 (C-p D): 9분할 생성(s), 데모 명령 실행(d)
# 9분할: 현재 창을 계속 split-window 하면 공간이 없다는 에러 발생하므로
# select-pane 으로 활성 창을 옮겨가며 분할해야 한다.
# 데모 명령 실행은 9분할 후 쉘 프롬프트가 뜨고난 뒤 사용.
bind -T pane_mode D display-menu -T "데모" \
"9분할 tiled" s {
    split-window -v
    split-window -v
    split-window -v
    split-window -v
    select-pane -t 1
    split-window -h
    split-window -h
    split-window -h
    split-window -h
    select-layout tiled
} \
"9분할 tiled 에서 명령 실행" d {
    select-pane -t 1
    send-keys 'echo ysoftman1' Enter
    send-keys 'cmatrix' enter
    select-pane -t 2
    send-keys 'echo ysoftman2; fd . /usr | xargs hexdump -C' enter
    select-pane -t 3
    send-keys 'echo ysoftman3; rg -i if /usr' enter
    select-pane -t 4
    send-keys 'echo ysoftman4; \sl -a; wtfutil' enter
    select-pane -t 5
    send-keys 'echo ysoftman5; cacafire' enter
    select-pane -t 6
    send-keys 'echo ysoftman6; htop' enter
    select-pane -t 7
    send-keys 'echo ysoftman7; infinite_cowsay' enter
    select-pane -t 8
    send-keys 'echo ysoftman8; asciiquarium' enter
    select-pane -t 9
    send-keys 'echo ysoftman9; for ((;;)); do imgcat ${myenv_path}/xelloss.jpg; sleep 1; done' enter
}

# 별도 설정 파일 읽기
# source-file ~/workspace/a/a.conf;
# 별도 설정 파일이 존재하면 읽기
if-shell "test -f ~/workspace/a/a.conf" "source ~/workspace/a/a.conf"

# tmux 다시 읽기
# display-message (alias: display) 상태바에 메시지 출력  -p 사용하면 stdout에 출력
bind r source-file ~/.tmux.conf \; display "ysoftman ~/.tmux.conf loaded"

# 현재 바인딩되 있는 모든 단축키 확인
tmux list-keys

#####

iterm2 에서 tmux의 내용을 마우스 드래그해서 copy and paste 가 안될때는
iterm2 -> preferences -> gerneral -> applications in terminal my access clipboard 활성화 (아래 그림 참고)


#####

# .bashrc, .zshrc 에 설정시
# TMUX 변수 값을 확인해 중복 실행을 막는다.
if [ -z "$TMUX" ]; then exec tmux; fi

comments:

댓글 쓰기