[OS X, Ubuntu] 터미널에서 tmux 사용해 보기 Computer Tip

이제 2017년 새해가 밝았습니다.
우선 제 블로그를 찾아주시는 모든 분들께 인사드립니다.
"새해 복 많이 받으십시오"



2007년 11월 20일 최초 발표를 하였고 최신 안정판도 몇달 전에 발표되는 등 
유닉스 터미널 프로그램 치고는 상당히 최신의 따끈 따끈한 프로그램이라고 할 수 있겠습니다.

많은 곳에서 screen 대비 좋은 장점을 가지고 있다고 하는데 
실제로 사용해 보니 screen 보다 좋네요.

특히 2.1 버전 이후 부터는 마우스를 지원하기 때문에 창(pane)을 분할해 놓고
창을 선택, 크기 조종, 이전 결과를 스크롤 하는 등의 마우스 지원이 아주 잘 되었습니다.

우선 설치는 무척 간편합니다.

우분투 16.04 LTS 에서는

 $ sudo apt-get install tmux

라고 하고,

macOS 에서는

$ brew install tmux

라고 하면 잘 설치가 됩니다.

우분투는 2.1 버전이, 맥에서는 2.3 버전이 설치되었는데
큰 차이는 없습니다.

설치를 마치고, 자신의 홈 디렉터리에 .tmux.conf 라는 파일에


$ cat ~/.tmux.conf
set-option -g mouse on
set-option -g history-limit 10000

라고 한 줄을 넣고 시스템을 Reboot 하면 (시스템을 다시 시작하여야 마우스가 먹었습니다)
마우스 지원을 잘 했습니다. (위의 설정은 버전 2.1 부터 적용됩니다. 가능하면 그 이후 버전을 사용하십시오)

(참고로 두번째 줄은 디폴트로 스크롤을 하면 디폴트로 1480 라인 정도만 가지고 있는데 
이를 10,000줄로 늘리는 옵션입니다.)

우선 터미널에서

$ tmux 
로 실행하고 나서

창 분할을 시작 합니다.

우선 tmux 에서는 모든 명령이 Ctrl+b 입니다.
(Screeen의 Ctrl+a 와 같은 의미의 명령어 Prefix 입니다)

Ctrl+b "
라고 명령을 내리면 창이 가로로 나뉘고

Ctrl+b %
라고 명령을 내리면 창이 세로로 분할 됩니다.

이 상태는

위와 같이 창이 나뉘어 졌음을 알 수 있습니다.

만약 이 상태에서 

Ctrl+b d
라고 하면 tmux 가 종료되는 것 처럼 보이지만 실제로는 
이전 상태를 유지하고 계속 실행되고 있이며

이를 동일 터미널 또는 다른 터미널에서

$ tmux attach

라고 하여 이전 실행되던 곳으로 돌아갈 수 있습니다.

이때 재미있는 것은 현재 돌아가고 있는 터미널은 그대로 있는 상태에서
다른 사용자가 다른 서버에서 터미널로 들어와서 attach 시키면
동일 창이 동시에 여러 곳에 보일 수 있습니다.

마치 협업을 하는 것처럼 작업을 동시에 보고 작업할 수 있게 됩니다.
(주의. 두 터미널이 동일 가로X세로 크기를 가져야 합니다.)

마우스가 지원되면 창(pane)을 선택하면 해당 창으로 이동하게 되며
창과 창 사이를 드래그 하여 창 크리를 조종할 수 있습니다.

Ctrl+b q 
라는 명령을 내리면,

위와 같이 창의 번호가 나오며 나뉘어진 것을 확인 할 수 있습니다.

만약 마우스 지원이 어렵다면 

Ctrl+b 화살표키
를 이용하여 창을 이동할 수 있습니다.

터미널 창이라 이전 작업 결과를 스크롤을 해서 확인 가능한데,
마우스로는 윌 또는 트랙패드는 두손가락 업다운 재스쳐로 
이전 버퍼링 되어있는 터미널 결과를 각 창(pane) 마다 해 볼 수 있는데
만약 키로 해야한다면

Ctrl+b PgUp
Ctrl+b PgDn
키로 스크롤이 가능합니다.
키로 스크롤을 했을 때는 q 로 끝내줘야 스크롤 모드가 끝납니다.


또한 

Ctrl+b c
라고 하여 현재 작업하던 창 말고 새로운 창(window)을 새롭게 만들어 작업할 수도 있습니다.

종료는 
Ctrl+d
로 종료 됩니다.

tmux 디폴트 명령어로 이전 작업했던 window와 Pane 나누기 크기 등등을 저장했다가
다시 복원하면 좋겠는데, 디폴트 기능은 아니고 다른 참조할 만한 것이 있으나
여기까지 적용하지는 않았습니다.

또한 마우스로 드래그하여 복사한 것을 paste 하는 키는

Ctrl+b ]

입니다. 우분투나 맥 어디서든 잘 되었습니다.

특별히, 맥에서는 마우스로 Drag를 하면 하면 선택되는 것처럼 보이며 이것은
tmux Copy & Paste 모드가 되어 일반 선택처럼 맥의 클립보드에 복사되지 않습니다.
기존 처럼 복사하기 위해서는 "Option(Alt)" 키를 누르고 마우스 Drag를 한 다음
"Command+c" 로 맥의 복사를 하셔야 됩니다.

하지만 창을 Pane으로 나누었을 경우, 위와 같은 선택 방법은 어렵습니다.
그냥 간단히 iTerm2 App 을 이용하고, 
설정에서

위에서와 같이 Preferences > General > Selection 에서
"Applications in terminal may access clipboard" 를 체크하시고 
마우스에서 선택하면 자동으로 맥의 클립보드로 저장됩니다.


그리고 한가지 다른 팁.
처음 터미널을 크게 띄우고 나서 tmux 를 구동시키고나서는
가로 세로 창을 나누어 4개로 나누어 작업을 시작하고는 하는데,
동일한 작업을 반복하게 되어 조금 알아보았더니,

.bashrc 또는 .bash_profile 에 다음과 같이 tm 이라는 alias 를 걸어놓고
터미널에서 tm 명령을 내렸더니 간편하게 시작할 수 있었습니다.

alias tmb='tmux new-session -d && tmux split-window -h && tmux split-window -v && tmux select-pane -L && tmux split-window -v && tmux select-pane -U && tmux attach-session -d'

alias tms='tmux new-session -d && tmux split-window -v && tmux split-window -v && tmux select-pane -U && tmux select-pane -U && tmux split-window -v && tmux select-pane -U && tmux attach-session -d'

그러면 tmb 명령은 2x2의 박스로 표현되고,
tms 명령은 4줄의 창으로 표현됩니다.


암튼 최근 알게된 tmux를 이용하여 screen 명령보다 더 편하게 작업할 수 있을 것 같습니다.

2017년 첫 포스팅 이었습니다.

필요한 부분이 있어 추가분입니다.

OS X 에서 PS1에 컬러로 나오게 하려면,

$ vi ~/.bash_profile
# for terminal ls color
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
alias ls='ls -GFh'

라고 추가시킵니다.

그러면 tmux로 창을 나누어도 잘 나왔습니다.

이제 우분투에서 접속해서 해 보았는데,
tmux로 나눈창은 프람프트(prompt PS1) 이 칼라로 나오지 않는 것이었습니다.

이 경우에는 디폴트 ~/.bashrc에서
#force_color_prompt=yes
부분을
force_color_prompt=yes
로 풀어 주면 팡을 나누어도 컬러로 프람프트가 잘 보였습니다.


이전에 작업하던 것에 대한 작업 내용을 덧 붙입니다.

만약 창을 나누어 작업을 열심히 하고 있었는데 이를 놔두고 그냥 벗어나려면 (detach)

Ctrl+b, d

라고 명령을 내리면 됩니다.

그 다음 다시 attach 하려는데 여러개의 tmux 세션이 있을 수 있으므로
세션을 보기 위하여,

$ tmux ls
0: 1 windows (created Mon Aug 14 14:03:10 2017) [200x54] (attached)
1: 1 windows (created Mon Aug 14 16:38:48 2017) [200x54]

와 같이 결과가 나옵니다.

한개의 세션만 존재한다면 다른 누가 attached 되어 있건간에 상관없이

$ tmux attach
라고 명령을 내려 이전 세션을 그대로 복원할 수 있습니다.

만약 위와 같이 한 개 이상의 세션이 있었다면

$ tmux attach -t 1
과 같이 명령을 내려 해당 세션으로 붙일 수 있습니다.

만약 다른 사용자가 이미 attach 되어 있었을 수가 있습니다.
그런 경우 작은 화면 크기로 맞추어져 있고 큰 쪽에서는 ... 으로 보입니다.

필요에 따라 다른 사람이 attach 되어 있는 것을 끊고 자기가 attach 하려면,

$ tmux a -dt 1

과 같이 명령하면 됩니다.

...

TMUX를 잘 사용하고 있다가 또다른 요구사항이 생겼습니다.
현재 창을 가로 또는 세로로 분할을 하는데 무조건 처음에 들어왔던
디렉터리로 가게 됩니다. 이를 현재 폴더를 그대로 유지하면서 창을 나누려고 합니다.

그러려면, 

$ cat vi ~/.tmux.conf
set-option -g mouse on
set-option -g history-limit 10000
bind \ split-window -h -c '#{pane_current_path}'  # Split panes horizontal
bind - split-window -v -c '#{pane_current_path}'  # Split panes vertically

위에 처럼 마지막 두 줄을 추가해 줍니다.

그러면, 창을 나눌 때,

Control+b " 대신 Control+b - 키로 동일 폴더를 유지하면서 가로 나누기,
Control+b % 대신 Control+b \ 키로 동일 폴더를 유지하면서 세로 나누기가 됩니다.

기존에 동작하고 있던 tmux 세션에는 적용이 안되는데,

$ tmux source-file ~/.tmux.conf

라고 해 주면 적용됩니다.


어느분께는 도움이 되셨기를...


핑백

  • 지훈현서 : [JetBrains]IntelliJ, PyCharm 등을 포함한 JetBrains의 IDE에서 에디터 창을 크게 하려면 2017-02-03 17:30:29 #

    ... 자 이제 3줄 정도 더 넓어 졌습니다.이제는 위에 빨간 줄 처럼 에디터를 여러 개 동시에 열 경우 보이는 에디터 탭이 눈에 거슬립니다. 지난번 tmux 사용법 처럼 약간만 터미널을 네개로 나누어 작업을 하듯이, 익숙해지다 보니 PyCharm에서도 그냥 창을 이렇게 네 개로 나누어 크기 조절만 하면서 사용하고픈 마음이 생긴 것입니다.( ... more

  • 지훈현서 : [ESXi 6.5] Photon OS 설치하여 Docker Host로 운영하기 2018-11-22 21:45:15 #

    ... ias ll='ls -l' 로그아웃 했다가 다시 들어가서, tm 이라고 명령을 쳐 보면, 위와 같이 잘 화면을 나누어 작업할 수 있습니다.(tmux 에 대한 자세한 것은 이곳을 누르셔요) 호스트명을 지정하기 위하여 /etc/hostname 과/etc/hosts의 마지막 127.0.0.1 항목에 호스트명을 넣어주고 r ... more

  • 지훈현서 : [Windows] tmux 와 유사한 ConEmu 2018-11-28 09:56:27 #

    ... 지난번 맥 또는 리눅스에서 tmux 사용해 보기 에서 살펴본 바와 같이,맥이나 리눅스에서 이제 tmux 가 없으면 여간 불편한 것이 아닙니다.가장 큰 것은 창을 가로 세로 분할해서 사용하는 ... more

덧글

  • Heb614 2017/01/02 16:54 # 답글

    터미널은 그저 여러개 열어놓고 일해야 뽀대도 좀 나고 나보다 높으신분들이 보시더라도 그게 뭔지는 몰라도 일하는것 처럼 보임! ㅋㅋㅋ
  • 지훈현서아빠 2017/01/02 17:16 #

    ㅎㅎ 그런가요???
  • 제시아빠 2018/03/14 17:58 # 삭제 답글

    안녕하세요 혹시 티먹스 원격으로 좀 도움좀 받을수 있을까요 맥북 산지 얼마 안되서 알게 되었는데
    도대체 설정을 못하겠네요 ㅜ 저렇게 화면처럼 나오지가 않아요 테마도 적용싶이고 싶은데 색상만 바꿔보고
    혹시 가능하시다면 카톡아뒤좀 알고 싶습니다 ㅠ
  • 지훈현서아빠 2018/03/14 18:30 #

    제가 직접 연결은 힘들 것 같습니다. iTerm2 라는 터미널 앱을 별도 설치하고 차근 차근 시도해 보시지요.
    안된다면 어디서 부터 막혔는지 올려주시면 도움말 드리도록 하겠습니다.
  • 2018/03/16 17:48 # 삭제 답글 비공개

    비공개 덧글입니다.
  • 지훈현서아빠 2018/03/16 17:57 #

    저는 Clean my mac 이라는 앱으로 uninstall 을 시킵니다.
  • 제시아빠 2018/03/18 22:18 # 삭제 답글

    안녕하세요 , tmux 세션 추가시나 다른작업할때 sessions should be nested with care, unset $TMUX to force. 요렇게 뜨네요.ㅎ
    음...재설치만 5번째인데 ..그 분활은 해결되었습니다! 근데 세션 추가 할때 저게 왜저런건지 구글링해봐도.ㅎ 모르겠는데 혹시 아시나요.
    구글링 해보니 unset TMUX 이렇게 치고 하라는것 같은데..음..설정값을 잡아줘야되는거지 어떻게..알수가 없어서 도통
  • 지훈현서아빠 2018/03/19 12:53 #

    메시지만 보면 tmux를 실행시켜 놓은 당태에서 다시 tmux를 기동시키면 나오는 메시지 같습니다.
    tmux 실행 이후에는 해당 세션에서 작업을 실행해야 될 것 같습니다. tmux 가 별도 alias 걸려 있는지도 확인해 보십시오.
    $ alias tmux
    도움이 되셨기를..
댓글 입력 영역

구글애드텍스트