tmux

Terminal multiplexer

برنامه‌ای برای مدیریت Shell ها. tmux به روی پوسته اجرا می‌شود و با تعریف پنجره (window) و صفحه (pane) به تقسیم بهتر فضا کمک می‌کند.

tmux مثل Screen در ارتباط با سرور از طریق SSH به عنوان پوسته، کاربرد دارد. به این وسیله، مجبور نیستیم چند ارتباط مجزا با سرور برقرار کنیم، در صورت قطع ارتباط، به راحتی می‌توانیم فرآیند در حال اجرا را بازگردانیم (attach) و نیز اگر از طریق ارتباطی کند، در سرور در حال اجرای برنامه‌ای هستیم که خروجی بی اهمیت زیادی تولید می‌کند و انتقال آهسته خروجی برنامه، سرعت پیش‌برد کار را پایین می‌آورد، می‌توانید پنجره را عوض کنیم.

بعضی ویژگی‌ها:

کاربردها

جدا کردن یک نشست و بازگردانی آن

فرض کنید از طریق SSH با رایانه‌ای دیگر ارتباط برقرار کرده‌اید و در آن با فراخوانی tmux مشغول عملیاتی هستید:

local $ ssh user@remote1
remote1 $ tmux
remote1 (tmux) $ <C-b> c # make new window
remote1 (tmux) $ ssh user@remote2 # ssh to another machine
remote2 $ tailf_some_log_path # doing some works
remote2 $ <C-b> n # switch tmux window
remote1 (tmux) $ cd some_path; ./configure; make; # make work on remote1

در این شرایط حوصله‌تان سر می‌رود و می‌خواهید ارتباط خود را با اینترنت قطع کنید.. کافی است این نشست (session) را جدا کنید:

remote1 (tmux) $ <C-b> d # detach session
[detached]
remote1 $ <C-d>
logout
connection to remote1 closed.
local $

عملیاتی که در رایانه‌های دیگر توسط شما شروع شده‌اند، به کار خود ادامه می‌دهند. روز بعد می‌خواهید به همان محیطی که ترک کردید بازگردید:

local $ ssh user@remote1
remote1 $ tmux list-sessions
1: 2 windows (created Fir Jan 4 15:14:15 2013) [158x49]
remote1 $ tmux attach-session -t 1 -d # attach session 1 and detach other references
...
outputs for last compile in remote1
remote1 (tmux) $ <C-b> p # switch tmux window
...
last tailf log
remote2 $ # you're still connected to remote2

احتمالاً کمپایل برنامه تمام شده و ارتباط با remote2 هنوز برقرار است.


نمونه تنظیمات
# screen like
set-option -g prefix C-a

# nested tmux
bind-key a send-prefix

# vi mode
set-window-option -g mode-keys vi
set-option -g status-keys vi

bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R

bind-key -r C-h resize-pane -L
bind-key -r C-j resize-pane -D
bind-key -r C-k resize-pane -U
bind-key -r C-l resize-pane -R

bind-key [ copy-mode
bind-key ] paste-buffer
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-selection
bind-key -t vi-copy C-v rectangle-toggle

# status and title
set-option -g display-time 2001
set-option -g status 0 # I'm always using tmux
set-option -g set-titles on
set-option -g set-titles-string '#W' # make it easy for i3-msg

# visual bell could be handled by xterm
set-option -g visual-bell off

set-window-option -g aggressive-resize on

# copy-paste to X
bind-key Y run "tmux show-buffer | xsel -i -b"
bind-key P run "tmux set-buffer \"$(xsel -o -b)\"; tmux paste-buffer "

bind-key Space choose-buffer
bind-key | split-window -h
terminalunix*

  1. Screenshot

۱۳۹۲/۰۲/۰۳ ۱۳:۵۰:۴۰