tmux는 많은 pseudoterminal을 window와 session 단위로 관리하는 도구이다. 하나의 tmux 서버가 세션을 관리하고, tmux 클라이언트는 tmux 서버와 소켓으로 통신하며 그 세션의 pseudoterminal들을 사용자가 원하는 방식대로 보여준다고 한다. 지식의 한계로 더 자세하게 설명할 수 없기 때문에, man tmuxman pty를 남겨두고 본론으로 넘어가겠다.

긴 추석 연휴를 맞이하야 Vim 스터디를 하다보니 Vim 플러그인을 이것 저것 둘러보다 보니 vim-dispatch 플러그인을 보다 보니 tmux 환경 하에서 비동기적으로 수행된다는 말을 보다 보니 이러다 저러다 보니 tmux에 첫 발걸음을 내밀게 되었다. 그래서 이번 포스트를 통해 첫 걸음을 걸은 과정을 기록하려 한다.

Ubuntu 16.04 Desktop을 기준으로 tmux의 가장 간단한 사용법을 정리한다.


설치

Ubuntu/Debian의 경우, 간단하게 시스템 repository에서 설치 가능하다.

$ sudo apt install tmux


무작정 따라하기

터미널의 소속을 명확하게 하기 위해서 일반적인 터미널은 $, tmux가 관리하는 터미널은 tmux $로 표기함을 미리 알려드린다.

$ tmux

tmux initialized


음, 뭔가 똑같은데 달라진 느낌이 든다. 오빠 나 달라진 거 없어? 달라진 점은 아래에 상태 표시줄이 생겼다는 점이다. tmux client가 새로운 session을 열었고 하나의 기본 window가 켜져 있는 것이다. 기본값으로 <CTRL-B>가 tmux의 기능을 발동시키는 trigger의 역할을 한다. 다음 키가 이상해 보일 수 있지만 그래도 입력해보자.

tmux $ <CTRL-B> %

tmux vertically split via <CTRL-B> %


Enter 키를 입력할 필요 없이 바로 창이 나눠진다. 이렇게 나눠진 창들을 pane이라고 한다.

tmux $ <CTRL-B> "

tmux horizontally split again via <CTRL-B>


창이 또 나눠진다. 이번엔 세로로 나눠졌다. 자연스럽게 나는 나눠진 pane 사이로 이동하고 싶어진다.

tmux $ <CTRL-B> 화살표키

오 pane을 왔다 갔다 할 수 있어졌다. 그럼 여기 저기에 이것 저것 실행해보자.


tmux working example열심히 일하는 척


pane을 추가하기보다는 한 판이 더 있으면 좋겠다면? window를 추가해야 한다.

tmux $ <CTRL-B> c

tmux add a new window via <CTRL-B> c


아래 상태 표시줄에 탭 하나가 추가된 것을 알아채자. 그럼 이제 window 레벨에서 다음 명령어를 통해 왔다 갔다 해보자.

tmux $ <CTRL-B> 0
tmux $ <CTRL-B> 1

사실 나는 tmux라는 방에 들어와서 할만큼 했고, 그만 나가고 싶다. 그런데 아직 굴러가고 있는 작업이 있으므로 프로세스를 보존하면서 방만 나갈 수 있다.

tmux $ <CTRL-B> d

tmux detached via <CTRL-B> d


방을 나갔다는게 느껴지는가? detached라는 메세지를 받으며 기존 환경으로 돌아왔다. 이 메세지에서 작업이 떨어져 나가서 어딘가에서 돌고 있다는 느낌을 받을 수 있는데, 실제로 남아있는지 확인해보자.

$ tmux ls

tmux list-sessions이 스크린샷에서는 세션이 2개인데, 예제대로 실행했다면 세션은 하나만 있을 것이다.


내가 쓰던 세션이 남아있다. 그 세션에서 2개의 window가 열려있다는 정보도 알려준다. 다시 저 세션을 불러오자.

$ tmux attach

다시 tmux 세션 안으로 들어간 것을 확인할 수 있다. 그만 끝내자. exit 등의 일반적인 명령어를 통해 일일이 하나씩 닫아봐도 되고, <CTRL-B> x (pane 종료) <CTRL-B> & (window 종료)를 사용해보기도 하고, detach한 후

$ tmux kill-session -t 0
라고 하면 세션 통째로 종료할 수 있다.


반 걸음 더

무작정 따라하면서 tmux가 대충 뭔 일을 하는 지는 알겠다. 한 가지 불만은 tmux가 세션을 시작할 때, 0이라는 성의없는 이름을 세션에 붙여준다는 것이다. tmux를 스스로 통제할 수 있으려면 세션의 이름을 관리하는 것이 좋아 보인다. 이와 관련된 명령어를 정리한다. 이 부분은 man tmux의 일부분을 정리한 것이니, 자세한 내용이 필요하다면 man tmux 전문을 보시길 추천한다.

tmux new-session -s SESSION_NAME: SESSION_NAME이라는 이름의 새로운 세션을 시작한다.

tmux list-sessions: 현재 열려있는 세션 목록을 보여준다.

tmux has-session -t TARGET_SESSION: TARGET_SESSION이라는 이름의 세션이 열려있는지 확인해본다.

tmux attach-session -t TARGET_SESSION: TARGET_SESSION이라는 이름의 세션으로 들어간다.



참조 링크

https://tmux.github.io

https://www.sitepoint.com/tmux-a-simple-start/

tmuxifier: tmux의 window, session 설정을 세팅해서 바로 사용할 수 있게 해주는 쉘스크립트 기반의 wrapper
https://github.com/jimeh/tmuxifier

  • 신으뜸 2019.07.16 09:28

    크으....개쩝니다!!!! TMUX 잘 쓰겟습니다!!!!!

    BlogIcon 동건 2019.07.23 21:42 신고

    오왓 댓글 감사합니다!!!

  • BlogIcon Blue_parr0t 2019.07.25 01:11 신고

    옛날에 screen 명령어를 본 적 있는데 tmux 는 훨씬 직관적이고 사용하기 편해보이네요. 잘 보고 갑니다.

  • BlogIcon Awesometic 2019.08.19 10:40 신고

    깔끔한 정리 잘 보고 갑니다 ㅎㅎ