ํฌ์ŠคํŠธ

๐Ÿงท tmux ์ •๋ฆฌ๋ณธ (Cheat Sheet + ์‚ฌ์šฉ ๊ฐ€์ด๋“œ)

ํ„ฐ๋ฏธ๋„ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ tmux์˜ ์„ธ์…˜ยท์œˆ๋„์šฐยทํŒจ๋„ ๊ตฌ์กฐ์™€ ์„ค์น˜, ~/.tmux.conf ์„ค์ •, ์ž์ฃผ ์“ฐ๋Š” ๋‹จ์ถ•ํ‚ค๋ฅผ ํ•œ ๋ฒˆ์— ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” Cheat Sheet ํ˜•์‹์œผ๋กœ ์ •๋ฆฌํ•œ๋‹ค.

๐Ÿงท tmux ์ •๋ฆฌ๋ณธ (Cheat Sheet + ์‚ฌ์šฉ ๊ฐ€์ด๋“œ)

tmux๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ„ฐ๋ฏธ๋„ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ์ด๋‹ค. ํ•œ ์„ธ์…˜ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์œˆ๋„์šฐ(window) โ†’ ํŒจ๋„(pane) ์„ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ์กฐ: ์„ธ์…˜(Session) > ์œˆ๋„์šฐ(Window) > ํŒจ๋„(Pane)

์ด ๊ธ€์€ tmux ๋กœ๋“œ๋งต์˜ ์ž…๋ฌธ ๋‹จ๊ณ„๋‹ค. ์„ค์ •ยทํ”Œ๋Ÿฌ๊ทธ์ธยท์ž๋™ํ™”๋กœ ์ด์–ด์ง€๋Š” ์ „์ฒด ํ•™์Šต ๊ฒฝ๋กœ๋Š” ๋กœ๋“œ๋งต์—์„œ.


1. ์„ค์น˜

1
2
3
brew install tmux         # macOS
sudo apt-get install tmux # Ubuntu
sudo yum install tmux     # CentOS

2. ์„ค์ • ํŒŒ์ผ

tmux ์„ค์ •์€ ~/.tmux.conf ์— ์ž‘์„ฑํ•œ๋‹ค. tmux ์‹คํ–‰ ์‹œ ์ž๋™ ๋กœ๋“œ๋˜๋ฉฐ, ์žฌ๋กœ๋“œ๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๊ฐ€๋Šฅ:

1
tmux source-file ~/.tmux.conf

3. ์„ธ์…˜(Session)

โ— ์„ธ์…˜ ์ƒ์„ฑ

1
2
3
4
tmux
tmux new
tmux new-session
tmux new -s sessionname

โ— ์„ธ์…˜ ์ ‘์†

1
2
3
4
tmux attach
tmux attach-session
tmux a
tmux a -t sessionname

โ— ์„ธ์…˜ ์ข…๋ฃŒ

1
2
tmux kill-session
tmux kill-session -t sessionname

โ— ์ž์ฃผ ์“ฐ๋Š” ๋‹จ์ถ•ํ‚ค

๋‹จ์ถ•ํ‚ค์„ค๋ช…
Ctrl+b + $์„ธ์…˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ
Ctrl+b + d์„ธ์…˜ detach
Ctrl+b + )๋‹ค์Œ ์„ธ์…˜
Ctrl+b + (์ด์ „ ์„ธ์…˜
Ctrl+b + w์„ธ์…˜/์ฐฝ ๋ฆฌ์ŠคํŠธ ๋ณด๊ธฐ

4. ์œˆ๋„์šฐ(Window)

๋ธŒ๋ผ์šฐ์ € ํƒญ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ์„ธ์…˜ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์ฐฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ— ๋‹จ์ถ•ํ‚ค

๋‹จ์ถ•ํ‚ค์„ค๋ช…
Ctrl+b + c์ƒˆ ์œˆ๋„์šฐ ์ƒ์„ฑ
Ctrl+b + n๋‹ค์Œ ์œˆ๋„์šฐ
Ctrl+b + p์ด์ „ ์œˆ๋„์šฐ
Ctrl+b + l๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ•œ ์œˆ๋„์šฐ
Ctrl+b + ์ˆซ์ž๋ฒˆํ˜ธ๋กœ ์ด๋™
Ctrl+b + '์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ด๋™
Ctrl+b + ,์œˆ๋„์šฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ
Ctrl+b + .์œˆ๋„์šฐ ๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
Ctrl+b + &์œˆ๋„์šฐ ์ข…๋ฃŒ
Ctrl+b + f์œˆ๋„์šฐ ๊ฒ€์ƒ‰
Ctrl+b + zํŒจ๋„ ํ™•๋Œ€/์ถ•์†Œ(toggle zoom)

โ— ์œˆ๋„์šฐ ํ•ฉ์น˜๊ธฐ/๋ถ„๋ฆฌ ๋“ฑ

(Ctrl+b + : ๋กœ ๋ช…๋ น์ฐฝ ์—ด๊ธฐ)

1
2
3
4
5
6
7
8
join-pane -s 2 -t 1      # 2๋ฒˆ์„ ์ง‘์–ด์„œ โ†’ 1๋ฒˆ ์˜†์— ํ•ฉ์น˜๊ธฐ (2๊ฐ€ ์ด๋™)
join-pane -h -s 2 -t 1   # ์˜ค๋ฅธ์ชฝ์— ๋ถ™์ด๊ธฐ(-h) / -v๋ฉด ์•„๋ž˜์— ๋ถ™์ด๊ธฐ
join-pane -b -s 2 -t 1   # -b(before): ๋ฐ˜๋Œ€์ชฝ(์™ผ์ชฝ/์œ„)์— ๋ถ™์ด๊ธฐ
break-pane -s 1 -t 2     # 1๋ฒˆ ์œˆ๋„์šฐ๋ฅผ 2๋ฒˆ ์œˆ๋„์šฐ๋กœ ๋ถ„๋ฆฌ
swap-pane -s 1 -t 2      # ๋‘ ํŒจ๋„ ์ž๋ฆฌ ๊ตํ™˜
swap-window -s 1 -t 2    # ๋‘ ์œˆ๋„์šฐ ์ž๋ฆฌ ๊ตํ™˜
move-window -s 1 -t 5    # ์œˆ๋„์šฐ 1์„ ๋นˆ ๋ฒˆํ˜ธ 5๋กœ ์˜ฎ๊ธฐ๊ธฐ(๊ตํ™˜ ์•„๋‹˜)
move-window -r           # ์œˆ๋„์šฐ ๋ฒˆํ˜ธ ๋นˆ์นธ ์—†์ด ์žฌ์ •๋ ฌ(0,3,7 โ†’ 0,1,2)

-s/-t๊ฐ€ ๋งค๋ฒˆ ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด โ€” ์ด๊ฒŒ join/swap์˜ ํ•ต์‹ฌ์ด์ž tmux ๋ช…๋ น ์ „๋ฐ˜์˜ ๊ณตํ†ต ๋ฌธ๋ฒ•์ด๋‹ค.

  • -s(source)๋Š” ์›€์ง์ด๋Š” ๊ฒƒ, -t(target)๋Š” ๋„์ฐฉ์ง€. source๊ฐ€ target ์ชฝ์œผ๋กœ ๊ฐ„๋‹ค. (swap์€ ์ž๋ฆฌ ๊ตํ™˜์ด๋ผ ๋ฐฉํ–ฅ์ด ๋Œ€์นญ)
  • ๊ฐ’์€ ๊ทธ๋ƒฅ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์ฃผ์†Œ๋‹ค. ํ˜•์‹์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ํฐ ๋‹จ์œ„ โ†’ ์„ธ์…˜:์œˆ๋„์šฐ.ํŒจ๋„ (work:2.1). ์ƒ๋žตํ•œ ์ž๋ฆฌ๋Š” โ€œํ˜„์žฌโ€๋กœ ์ฑ„์›Œ์ง„๋‹ค: -t 1=ํ˜„์žฌ ์„ธ์…˜์˜ ์œˆ๋„์šฐ 1, -t .1=ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ํŒจ๋„ 1. ์ (.)์ด ์žˆ์œผ๋ฉด ํŒจ๋„, ์—†์œผ๋ฉด ์œˆ๋„์šฐ.
  • ๊ฐ ์ž๋ฆฌ์—” ์ด๋ฆ„ยท๋ฒˆํ˜ธ ๋‘˜ ๋‹ค ๋˜์ง€๋งŒ, ์‹ค๋ฌด ์กฐํ•ฉ์€ ์ •ํ•ด์ ธ ์žˆ๋‹ค โ€” ๊ฐ•์ œ ๊ทœ์น™์ด ์•„๋‹ˆ๋ผ โ€œ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๊ณ  ํ™”๋ฉด์— ๋ณด์ด๋А๋ƒโ€์˜ ์ฐจ์ด๋‹ค:
    • ์„ธ์…˜: ์• ์ดˆ์— ๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋‹ˆ ์ด๋ฆ„ (tmux new -s work๋กœ ๋ถ™์ธ ๊ทธ ์ด๋ฆ„).
    • ์œˆ๋„์šฐ: ์ƒํƒœ ๋ฐ”์— 2:logs๋กœ ๋ฒˆํ˜ธยท์ด๋ฆ„ ๋‹ค ๋ณด์ด๋‹ˆ ์•„๋ฌด๊ฑฐ๋‚˜. -t 2๋„ -t logs๋„ ๋™์ž‘ (์งง์€ ๋ฒˆํ˜ธ๊ฐ€ ํŽธํ•จ).
    • ํŒจ๋„: ์ด๋ฆ„์ด ์—†๊ณ  ๋ฒˆํ˜ธ๋„ ์•ˆ ๋ณด์ด๋‹ˆ, Ctrl+b + q๋กœ ํ™•์ธ ํ›„ ๋ฒˆํ˜ธ. โ†’ ๊ทธ๋ž˜์„œ work:2.1(์ด๋ฆ„:๋ฒˆํ˜ธ.๋ฒˆํ˜ธ)์ด ๊ฐ€์žฅ ํ”ํ•œ ๊ผด.
  • -s๋ฅผ ์ƒ๋žตํ•˜๋ฉด ํ˜„์žฌ(๋˜๋Š” ๋งˆํฌ๋œ) ํŒจ๋„์ด source๋‹ค. ์˜๋„์น˜ ์•Š๊ฒŒ ๋”ธ๋ ค๊ฐ€๋‹ˆ ์Šคํฌ๋ฆฝํŠธยท๋ฐ”์ธ๋”ฉ์—์„  -s๋ฅผ ๋ช…์‹œ.
  • join-pane์—์„œ ํ˜„์žฌ ์œˆ๋„์šฐ๋ฅผ source๋กœ ์ง€์ •ํ•˜๋ฉด ์—๋Ÿฌ. source๋Š” ๋‹ค๋ฅธ ์œˆ๋„์šฐ์—ฌ์•ผ ํ•œ๋‹ค.
  • ์„ธ์…˜ ๊ฒฝ๊ณ„๋„ ๋„˜๋Š”๋‹ค. ์ฃผ์†Œ ์•ž์— ์„ธ์…˜:์„ ๋ถ™์ด๋ฉด join-paneยทswap-window๊ฐ€ ๋‹ค๋ฅธ ์„ธ์…˜์œผ๋กœ๋„ ๋™์ž‘ํ•œ๋‹ค: join-pane -s work:2 -t home:1.
  • ๋ฒˆํ˜ธ๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๋ฉด Ctrl+b + q๋กœ ํŒจ๋„ ๋ฒˆํ˜ธ๋ฅผ ํ™”๋ฉด์— ๋„์›Œ ํ™•์ธ.

5. ํŒจ๋„(Pane)

์œˆ๋„์šฐ ๋‚ด๋ถ€๋ฅผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ— ํŒจ๋„ ๋ถ„๋ฆฌ(split)

๋‹จ์ถ•ํ‚ค์„ค๋ช…
Ctrl+b + %์„ธ๋กœ ๋ถ„ํ•  (vertical)
Ctrl+b + "๊ฐ€๋กœ ๋ถ„ํ•  (horizontal)

โ— ํŒจ๋„ ์ด๋™

๋‹จ์ถ•ํ‚ค์„ค๋ช…
Ctrl+b + โ† / โ†’ / โ†‘ / โ†“๋ฐฉํ–ฅํ‚ค๋กœ ์ด๋™
Ctrl+b + o๋‹ค์Œ ํŒจ๋„
Ctrl+b + ;์ด์ „ ํŒจ๋„
Ctrl+b + { / }ํŒจ๋„ ์œ„์น˜ ์ด๋™
Ctrl+b + !ํŒจ๋„์„ ์ƒˆ ์œˆ๋„์šฐ๋กœ ๋ถ„๋ฆฌ
Ctrl+b + xํŒจ๋„ ์ข…๋ฃŒ
Ctrl+b + Ctrl+oํŒจ๋„ ์ˆœํ™˜(swap)

โ— ํŒจ๋„ ํฌ๊ธฐ ์กฐ์ ˆ

(Ctrl+b + : ๋ช…๋ น์ฐฝ์—์„œ ์‹คํ–‰)

1
2
3
4
5
6
7
8
9
10
11
resize-pane -D
resize-pane -U
resize-pane -L
resize-pane -R

resize-pane -D 10  # 10์นธ ๋ณ€๊ฒฝ
resize-pane -U 10
resize-pane -L 10
resize-pane -R 10

ctrl + b ๋ฅผ ๋ˆ„๋ฅด๊ณ  option + ๋ฐฉํ–ฅํ‚ค๋กœ ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ (macOS)

6. ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ(Copy Mode)

โ— ์ง„์ž…/์ข…๋ฃŒ

  • Ctrl+b + [ : ๋ณต์‚ฌ๋ชจ๋“œ ์ง„์ž…
  • Ctrl+b + ] : ๋ถ™์—ฌ๋„ฃ๊ธฐ

โ— ๋ณต์‚ฌ๋ชจ๋“œ ๋‹จ์ถ•ํ‚ค

์•„๋ž˜ ํ‘œ๋Š” vi ํ‚ค ๊ธฐ์ค€์ด๋‹ค. tmux ๊ธฐ๋ณธ์€ emacs ํ‚ค๋งต์ด๋ฏ€๋กœ, h/j/k/lยทg/G ๊ฐ™์€ vi ์ด๋™์„ ์“ฐ๋ ค๋ฉด ~/.tmux.conf์— ํ•œ ์ค„์ด ํ•„์š”ํ•˜๋‹ค.

setw -g mode-keys vi
ํ‚ค์„ค๋ช…
Space์„ ํƒ ์‹œ์ž‘
Enter์„ ํƒ ๋ณต์‚ฌ
Esc์„ ํƒ ์ทจ์†Œ
g / G์œ„/์•„๋ž˜ ๋ ์ด๋™
h/j/k/l๋ฐฉํ–ฅ ์ด๋™
/๊ฒ€์ƒ‰
#paste buffer ๋ชฉ๋ก
q์ข…๋ฃŒ

7. ์Šคํฌ๋กค

  • ํ‚ค๋ณด๋“œ๋กœ: Ctrl+b + [ โ†’ โ†‘/โ†“
  • ๋งˆ์šฐ์Šค๋กœ ์Šคํฌ๋กคํ•˜๋ ค๋ฉด .tmux.conf์— ์ถ”๊ฐ€:
1
set -g mouse on

8. Tmux Plugin Manager (TPM)

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ยท๊ตฌ์„ฑ๊ณผ ๋Œ€ํ‘œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋ณ„ ์„ค๋ช…, ๋ณต๋ถ™์šฉ .tmux.conf ๋ธ”๋ก์€ ๋ณ„๋„ ๊ธ€์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค: Tmux ์„ค์ • & ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค๋ช…


9. Resurrect/Continuum ํŒ

์„ธ์…˜์„ killํ–ˆ๋Š”๋ฐ๋„ ๋‹ค์‹œ ์‚ด์•„๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด tmux-resurrect + tmux-continuum์˜ ์ž๋™ ๋ณต์› ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์ด๋‹ค. @continuum-restore 'on' ์ƒํƒœ์—์„œ๋Š” tmux ์‹œ์ž‘ ์‹œ์ ์— ๋งˆ์ง€๋ง‰ ์ €์žฅ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ๋ณต์›ํ•œ๋‹ค.

โ— ๋ณต์› ๋ฐ์ดํ„ฐ ์ €์žฅ ์œ„์น˜

1
~/.local/share/tmux/resurrect/

โ— ๋ณต์› ๋ฐ์ดํ„ฐ ์‚ญ์ œ(์ดˆ๊ธฐํ™”)

1
2
tmux kill-server
rm -rf ~/.local/share/tmux/resurrect/*

โ— ์ž๋™ ๋ณต์› ๋„๊ธฐ

1
set -g @continuum-restore 'off'
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.