DDD tactical components

Terminal Shortcut tmux cut jq screen split

tmux는 원격에서 background에서 작업을 수행할 때 사용하는 command 이다.
이전에 정리했던 linux screen와 유사하다.

나는 요새 screen 보다는 tmux를 사용하려고 한다.
지금 나는 5개 region에서 운영하는 서비스들을 개발하고 있는데, tmux는 여러 batch instance로 들어가서 작업하기가 screen 보다 편리했다.

tmux; terminal multiplexer

man page의 설명을 참고하면, man tmux

DESCRIPTION
tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.

장점

  1. terminal windows가 여러 개가 되지 않도록 관리할 수 있다.
  2. window 하나에 pane들을 여러 개 나누기가 쉽다.
  3. 나누어진 pane들에 동시에 입력하기가 편하다.
  4. shell program이기 때문에 remote server에서도 동작한다. 즉, terminal windows를 새로 따기 위해 다시 접속하지 않아도 된다.
  5. terminal을 project 단위로 organize 할 수 있다.
  6. session이 만료되지 않고 in-state 상태로 저장된다.
  7. session을 공유할 수 있어서 다른 사람이 들어오면 typing 하는 것을 실시간으로 볼 수 있다.
  8. script를 작성해두면 여러 pane이 설정된 tmux session을 바로 생성할 수 있다.

개념

tmux hierarchy

Sessions

완전히 분리된 tmux의 최상위 hierarchy. user는 여러 개의 session 을 만들고, attach, detach 할 수 있다.

프로젝트를 관리하는 단위로 session을 할당하는 편이다.

Windows

각 session은 여러 window를 가질 수 있다. 브라우저의 tab이랑 비슷하다.

프로젝트의 특정 task 들을 관리하는 단위로 쓰이는 편이다.

Panes

각 window는 여러 pane으로 화면이 나뉠 수 있다. 동시에 여러 pane을 보게되는 것이고, 현재 작업에 맞게 화면 배열을 할 수 있다.


자주 사용하는 명령어들

세션 명령어

동작 명령어 설명
새로운 세션 생성 tmux new -s session을 생성하고 들어가기
세션 목록 tmux ls  
세션 attach tmux attach -t  
세션 detach (ctrl + b) d 세션을 종료하지 않고 나가기
세션 kill tmux kill-session -t 세션을 종료하기

윈도우 명령어

동작 명령어 설명
새로운 윈도우 생성 (ctrl + b) + c 윈도우를 새로 추가하기
윈도우 리스트 확인 (ctrl + b) + w 세션에서 생성된 윈도우를 리스트업

pane 명령어

동작 명령어 설명
pane 나누기 (ctrl + b) % Pane을 좌우로 나누기
  (ctrl + b) “ Pane을 상하로 나누기
pane 커서 이동 (ctrl + b) 방향키 현재 작업하는 커서의 Pane을 이동
pane 사이즈 조정 (ctrl + b) 누르고 방향키 현재 커서가 있는 Pane의 사이즈를 변경
pane 지우기 (ctrl + b) x 현재 커서의 pane을 지움
exit으로 나가서 지울 수도 있음
현재 pane이 jumphost를 반복해서 들어간다면 exit을 여러번 해야하는데 이걸 사용하면 좋음
     
pane에서 스크롤 사용하기 (ctrl + b) [ tmux는 기본이 스크롤이 안되는데 이걸로 스크롤 사용 설정
그치만 여기서 스크롤을 써도 편한 스크롤은 아님
     
모든 pane에 입력하기 1. (ctrl + b) :
2. 하단 command에 setw synchronize-panes on
3. 입력
tmux를 사용하는 가장 편리하게 사용하는 방법 중 하나
이렇게 쓰면 지금 열려 있는 모든 pane에 커서가 공유되고 동일한 입력이 가능
나는 여러 region/instance에 동일한 배치 작업을 수행할 때 주로 사용함
모든 pane에 입력끄기 1. (ctrl + b) :
2. 하단 command에 setw synchronize-panes off
쓰고나서 필요할 땐 끄자
모든 pane의 크기 맞추기 (ctrl + b) , (Alt + 2) vertical 하게 모든 pace이 동일한 크기를 갖도록 맞추기
  (ctrl + b) , (Alt + 1) horizontal 하게 모든 pace이 동일한 크기를 갖도록 맞추기
pane 뷰 형상 변경하기 (ctrl + b) , space 위의 horizontal, vertical 등의 뷰 형상을 변경해줌
pane 전체화면으로 변경하기 (ctrl + b) + z 현재 pane을 전체화면으로 변경. 한번 더 수행하면 다시 여러 pane 뷰로 변경
현재 pane을 별도 window로 분리 (ctrl + b) + ! pane이 여러개인 window에서 현재 pane만 새로운 window를 만들어 분리
아래 스크립트와 효율이 좋다

자주 사용하지 않는데 한 번은 쓴 명령어

현재 세션 이름 알기

tmux display-message -p ‘#S’

현재 window 이름 알기

tmux display-message -p ‘#I’

tmux script

내가 만들어서 사용하는 script.
echo라고 입력한 부분에 ssh command를 넣는다.

나는 주로 batch instance를 접속할 수 있도록 command를 꾸려놓고,
위에서 언급한 pane 크기를 맞추고 필요한 경우 동시 입력으로 사용하는 편이다.

#!/bin/bash

#session을 항상 새롭게 만들고 싶다면 date를 사용할 수 있다.
#DATE=`date +%s`
#SESSIONNAME="meansoup_${DATE}"

SESSIONNAME="meansoup"
tmux has-session -t $SESSIONNAME &> /dev/null

if [ $? != 0 ] then
    tmux new-session -d -s $SESSIONNAME \; split-window -v \; split-window -v \; select-pane -t 0 \; split-window -v\; split-window -v \;

    tmux send-keys -t $SESSIONNAME:0.0 C-z 'echo kr' Enter
    tmux send-keys -t $SESSIONNAME:0.1 C-z 'echo uw' Enter
    tmux send-keys -t $SESSIONNAME:0.2 C-z 'echo ew' Enter
    tmux send-keys -t $SESSIONNAME:0.3 C-z 'echo sg' Enter
    tmux send-keys -t $SESSIONNAME:0.4 C-z 'echo cn' Enter
fi

tmux attach -t $SESSIONNAME:0

reference

https://unix.stackexchange.com/questions/32986/how-do-i-equally-balance-tmux1-split-panes
https://github-wiki-see.page/m/dkoes/docs/wiki/Using-tmux
https://protechnotes.com/comprehensive-tmux-tutorial-for-beginners-with-a-cheat-sheet/
https://snipcademy.com/linux-command-line-tmux#pane-management-ex-commands