tmux的使用

tmux的使用

 

1: tmux的介紹
    tmux是一個優秀的終端多路複用軟件,相似GNU Screen,但來自於OpenBSD,採用BSD受權。使用它最直觀的好處就是,經過一個終端登陸遠程主機並運行tmux後,在其中能夠開啓多個控制檯而無需再「浪費」多餘的終端來鏈接這臺遠程主機;固然其功能遠不止於此。
 
tmux的架構圖:
 
tmux使用C/S模型構建,主要包括如下單元模塊:
一個tmux命令執行後啓動一個tmux服務
一個tmux服務能夠擁有多個session,一個session能夠看做是tmux管理下的僞終端的一個集合
一個session可能會有多個window與之關聯,每一個window都是一個僞終端,會佔據整個屏幕
一個window能夠被分割成多個pane
 
kill-window能夠關閉當前窗口,kill-session能夠結束當前會話,kill-server能夠中止服務器.
 
$ tmux   # 運行 tmux -2 以256終端運行
$ C-b d  # 返回主 shell , tmux 依舊在後臺運行,裏面的命令也保持運行狀態
$ tmux ls # 顯示已有tmux會話(C-b s)
$ tmux attach-session -t 數字 # 選擇tmux
$ tmux new-session -s session-name #創建會話
$ tmux new -s session -d #在後臺創建會話
$ tmux kill-session -t session-name # 結束會話
 
一鍵啓動遠程主機上的 tmux
$ ssh -t username@server.com tmux 
若是你以前在遠程主機上已經開啓了 tmux 的話,用如下命令。
$ ssh -t username@server.com tmux att
$ ssh -t username@server.com tmux attach-session -t 數字
除此以外,你能夠結合第二條命令來綁定快捷鍵,這樣咱們只需一鍵就能夠快速登陸並開啓 tmux 了。
 
爲何使用tmux: 
tmux比screen有更多的功能,可以保持你的工做環境連續性。例如tmux解決以下的問題:
1)下班後,你須要斷開ssh或關閉電腦,你的ssh鏈接將丟失;
2)在公司打開的ssh,在家裏也須要訪問;
 
2. tmux的安裝
可使用Ports安裝tmux,位置在/usr/ports/sysutils/tmux/;tmux僅有一個依賴包libevent,位於/usr/ports/devel/libevent/。
安裝完成後輸入命令tmux便可打開軟件,界面十分簡單,相似一個下方帶有狀態欄的終端控制檯;但根據tmux的定義,在開啓了tmux服務器後,會首先建立一個會話,而這個會話則會首先建立一個窗口,其中僅包含一個面板;也就是說,這裏看到的所謂終端控制檯應該稱做tmux的一個面板,雖然其使用方法與終端控制檯徹底相同。
tmux使用C/S模型構建,主要包括如下單元模塊:
server 服務器。輸入tmux命令時就開啓了一個服務器。
session 會話。一個服務器能夠包含多個會話。
window 窗口。一個會話能夠包含多個窗口。
pane 面板。一個窗口能夠包含多個面板。
 
ubuntu系統下的安裝
$ sudo aptitude install tmux
 
3. tmux的配置
tmux徹底使用鍵盤控制窗口,實現窗口的切換,像是Chrome的方式管理shell,使用起來很方便。 
tmux命令都具備一個前綴命令(PREFIX),默認的是CTRL+b,能夠本身修改,改成CTRL+a。
tmux的系統級配置文件爲/etc/tmux.conf,用戶級配置文件爲~/.tmux.conf。配置文件實際上就是tmux的命令集合,也就是說每行配置都可在進入命令行模式後輸入生效。
下面是一個~/.tmux.conf的示例,其中包括了一些經常使用的配置:
lsgx@lsgx-ubuntu:work$ cat ~/.tmux.conf 
########################################
#
# author   : lsgx <lsgxthink@gmail.com>
# modified : 2014-11-12
#
 
#-- base settings --#
set -g default-terminal "screen-256color"  # 設置終端缺省的支持顏色爲256色
set -g display-time 3000     # 提示信息的持續時間;設置足夠的時間以免看不清提示,單位爲毫秒
set -g escape-time 0    # 等待時間的持續時間;設置越小越好
set -g history-limit 65535    # 歷史記錄條數的最大限制值
#set -g base-index 1    # 窗口的初始序號;默認爲0,這裏設置爲1
#set -g pane-base-index 1    # 面板的初始序號;默認爲0,這裏設置爲1
#set -sg repeat-time 600    # 控制檯激活後的持續時間;設置合適的時間以免每次操做都要先激活控制檯,單位爲毫秒
#set -s quiet on
#setw -g xterm-keys on
 
#-- bindkeys --#
 
# prefix key (Ctrl+a)    # 將激活控制檯的快捷鍵由Ctrl+b修改成Ctrl+a
set -g prefix ^a
unbind ^b
bind a send-prefix
 
# split window    # 窗口分割
unbind '"'
bind - splitw -v # vertical split (prefix -)    # 上下分割窗口
unbind %
bind | splitw -h # horizontal split (prefix |)    # 左右分割窗口
 
# select pane    # 選擇面板
bind k selectp -U # above (prefix k)    # 選擇上面板
bind j selectp -D # below (prefix j)    # 選擇下面板
bind h selectp -L # left (prefix h)    # 選擇左面板
bind l selectp -R # right (prefix l)    # 選擇右面板
 
# resize pane
bind -r ^k resizep -U 2 # upward (prefix Ctrl+k)    # 當前面板上移2
bind -r ^j resizep -D 2 # downward (prefix Ctrl+j)    # 當前面板下移2
bind -r ^h resizep -L 2 # to the left (prefix Ctrl+h)    # 當前面板左移2
bind -r ^l resizep -R 2 # to the right (prefix Ctrl+l)    # 當前面板右移2
 
# swap pane
bind ^u swapp -U # swap with the previous pane (prefix Ctrl+u)    # 與上面板交換
bind ^d swapp -D # swap with the next pane (prefix Ctrl+d)    # 與下面板交換
 
# create new session
bind C-c new-session    # 建立一個新的會話
 
# control sessions
bind z kill-session    # 結束一個會話
 
# find session
bind C-f command-prompt -p find-session 'switch-client -t %%'    # 查找會話
 
# clear both screen and history
#bind -n C-l send-keys C-l \; run 'tmux clear-history'    # 清空屏幕內容和歷史記錄
 
# reload config (prefix r)
bind r source ~/.tmux.conf \; display "Configuration reloaded!"    # 從新加載配置文件
 
# misc
bind e lastp  # select the last pane (prefix e)    # 選擇最後一個面板
bind ^e last  # select the last window (prefix Ctrl+e)    # 選擇最後一個窗口
bind q killp  # kill pane (prefix q)    # 關閉當前面板
bind ^q killw # kill window (prefix Ctrl+q)    # 關閉當前窗口
 
 
# app
bind ! splitw htop                                     # htop (prefix !)
bind m command-prompt "splitw 'exec man %%'"           # man (prefix m)
bind @ command-prompt "splitw 'exec perldoc -t -f %%'" # perl func (prefix @)
bind * command-prompt "splitw 'exec perldoc -t -v %%'" # perl var (prefix *)
bind % command-prompt "splitw 'exec perldoc -t %%'"    # perl doc (prefix %)
bind / command-prompt "splitw 'exec ri %%'"            # ruby doc (prefix /)
 
 
#-- statusbar --#
set -g status-utf8 on    # 開啓狀態欄的UTF-8支持
set -g status-interval 1    # 狀態欄的分辨時間間隔
set -g status-keys vi    # 操做狀態欄時的默認鍵盤佈局;能夠設置爲vi或emacs
set -g visual-activity on    # 開啓窗口操做的可視
set -g set-clipboard on    # 開啓剪切板
set -g display-panes-time 800 # slightly longer pane indicators display time    # 稍長的窗格中顯示的時間指標
set -g display-time 1000      # slightly longer status messages display time    # 稍長的狀態消息的顯示時間
set -g renumber-windows on    # renumber windows when a window is closed    # 關閉窗口後從新編號
 
setw -g automatic-rename on    # rename window to reflect current program    # 重命名窗口,以反映當前的程序
setw -g utf8 on    # 開啓窗口的UTF-8支持
setw -g monitor-activity on    # 開啓窗口活動監視
setw -g mode-keys vi    # 複製模式中的默認鍵盤佈局;能夠設置爲vi或emacs
setw -g clock-mode-style 24 # 24 hour clock    # 24小時顯示方式
#setw -g mode-mouse on    # 開啓鼠標模式
 
# copy mode
bind Enter copy-mode # enter copy mode    # 按Enter進入複製模式
bind b list-buffers  # list paster buffers    # 複製緩衝區列表
bind p paste-buffer  # paste from the top pate buffer    # 粘貼最後複製的緩衝區內容
bind P choose-buffer # choose which buffer to paste from    # 選擇粘貼緩衝區
 
# the following vi-copy bindings match my vim settings
# see https://github.com/gpakosz/.vim.git
bind -t vi-copy v begin-selection    # 複製模式下開始選取
bind -t vi-copy C-v rectangle-toggle    # 複製模式下矩形選取
bind -t vi-copy y copy-selection    # 複製模式下複製選取的內容
bind -t vi-copy Escape cancel    # 複製模式下退出複製模式
bind -t vi-copy H start-of-line    # 複製模式下開始行選取
bind -t vi-copy L end-of-line    # 複製模式下結束行選取
 
# mouse resize selcet
#setw -g mouse-resize-pane on    # 鼠標調整面板大小
#setw -g mouse-select-pane on    # 鼠標選擇面板
#setw -g mouse-select-window on    # 鼠標選擇窗口
 
# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o -sel clipbaord)\"; tmux paste-buffer" 
# move tmux copy buffer into x clipboard
bind C-y run "tmux show-buffer | xclip -i -sel clipbaord"
 
 
#-- colorscheme --#
# see also: https://github.com/daethorian/conf-tmux/blob/master/colors/zenburn.conf
 
# modes
setw -g clock-mode-colour colour223
setw -g mode-attr bold
setw -g mode-fg colour223
setw -g mode-bg colour235
 
# panes
set -g pane-border-bg colour234
set -g pane-border-fg colour234
set -g pane-active-border-bg colour232
set -g pane-active-border-fg colour232
 
 
# statusbar
set -g status-justify centre
set -g status-bg colour235
set -g status-fg colour248
set -g status-attr dim
 
set -g status-left "#[fg=green,bright]Session: #S #[fg=yellow,bright]Window: #I #[fg=cyan,bright]Pane: #P"
set -g status-left-attr bright
set -g status-left-length 30
set -g status-right "#[fg=yellow,bright][ #[fg=cyan,bright]#W #[fg=yellow,bright]]#[default] #[fg=yellow,bright]- %Y.%m.%d #[fg=green,bright]%H:%M #[default]"
set -g status-right-attr bright
set-option -g status-right-length 30
 
setw -g window-status-current-fg colour223
setw -g window-status-current-bg colour237
setw -g window-status-current-attr bold
#setw -g window-status-current-format "#I:#W#F"
 
#setw -g window-status-alert-attr bold
#setw -g window-status-alert-fg colour255
#setw -g window-status-alert-bg colour160
 
# messages
set -g message-attr bold
set -g message-fg colour223
set -g message-bg colour235
 
#######################################
 
啓動後的界面效果

 

4. tmux的使用
基本操做使用
$ tmux #運行tmux -2 以256色終端運行
$ C-a d # 返回主shell,tmux依舊在後臺運行,裏面的命令也保持運行狀態
$ tmux new -s session-name  # 創建名字爲session-name的會話
$ tmux new -s  session-name -d # 在後臺創建名字爲session-name的會話
$ tmux ls # 顯示已有的tmux會話(C-a s)
$ tmux attach-session -t session-name # 鏈接已經存在的名爲session-name的會話
$ tmux kill-session -t session-name # 結束已經存在的名爲session-name的會話
 
  *** 控制檯-操做說明 ***
$  Ctrl+a  // 激活控制檯
$
$  ** 系統操做   
$      ?   // 列出全部快捷鍵;按q返回   
$      d   // 脫離當前會話;
$      D   // 選擇要脫離的會話;在同時開啓了多個會話時使用   
$      Ctrl+z  // 掛起當前會話
$      z // 結束當前會話
$      r   // 從新加載配置文件
$      s   // 選擇並切換會話;在同時開啓了多個會話時使用   
$      :   // 進入命令行模式;
$            :new-session         // 建立新會話
$      Enter   // 進入複製模式;此時的操做與vi/emacs相同,按q/Esc退出   (必須先進入複製模式才能夠滾屏)
$      ~   // 列出提示信息緩存;其中包含了以前tmux返回的各類提示信息   
$
$  ** 會話操做
$      (   preview session
$      )   next session
$      s   list session
$      $   rename seesion
$      Ctrl+c // 建立一個會話
$      c     // 建立一個窗口
$      z    // 結束一個會話
$      Ctrl+z  // 掛起一個會話
$      Ctrl+f  // 查找一個會話
$      f  // 查找一個窗口
$      [0~9]  // 跳到指定的窗口
$      e // 最後一個面板
$      Ctrl+e   // 最後一個窗口
$      q    // 關閉當前面板
$      Ctrl+q  // 關閉窗口
$
$
$  ** 窗口操做
$      c   // 建立新窗口   
$      &   // 關閉當前窗口   
$      [0-9] // 切換至指定窗口   
$      w   // 經過窗口列表切換窗口   
$      ,   // 重命名當前窗口;這樣便於識別   
$      .   // 修改當前窗口編號;至關於窗口從新排序   
$      i   // 顯示tmux當前信息
$
$  ** 面板操做   
$      -   // 將當前面板平分爲上下兩塊|橫向切割 --> 分割成面板
$      |   // 將當前面板平分爲左右兩塊|豎向切割 --> 分割成面板
$      k   // 選擇上面板
$      j    // 選擇下面板
$      h   // 選擇左面板
$      l   // 選擇右面板
$      Ctrl+k    // 當前面板上移2
$      Ctrl+j    // 當前面板下移2
$      Ctrl+h    // 當前面板左移2
$      Ctrl+l    // 當前面板右移2
$      x   // 關閉當前面板   
$      ;   // 切換到最後的pane
$      Space        // 在預置的面板佈局中循環切換;依次包括:
$                       even-horizontal、
$                       even-vertical、
$                       main-horizontal、
$                       main-vertical、
$                       tiled   
$      o   // 在當前窗口中選擇下一面板   
$      {   // 向前置換當前面板   
$      }   // 向後置換當前面板   
$      Ctrl+u)    // 與上面板交換
$      Ctrl+d)    // 與下面板交換
$      方向鍵   // 移動光標以選擇面板   
$      Alt+o    // 逆時針旋轉當前窗口的面板   
$      Ctrl+o   // 順時針旋轉當前窗口的面板   
$
 
使用命令提示:
1 爲 man 手冊建立 pdf 版本
     man -t manpage | ps2pdf - filename.pdf 
好比製做 ls 命令的 man 手冊 pdf 文件
     man -t ls | ps2pdf - ls.pdf
2 爲命令綁定快捷鍵
     bind -x '"\C-l":ls -l'
這樣直接按 CTRL+L 就列出目錄了,你能夠把這條命令加入到 ~/.bashrc 中,這樣沒必要每次重複設定。
3 一鍵啓動遠程主機上的 tmux
tmux 是一個 GNU Screen 的替代品,一個能夠在終端裏開啓多窗口的工具,能夠說是很好用的遠程服務維護工具,經過如下命令就能夠在終端中一條命令直接開啓遠程服務器上的 tmux 。
     ssh -t username@server.com tmux 
若是你以前在遠程主機上已經開啓了 tmux 的話,用如下命令。
     ssh -t username@server.com tmux att
除此以外,你能夠結合第二條命令來綁定快捷鍵,這樣咱們只需一鍵就能夠快速登陸並開啓 tmux 了。
4 用 file 命令查看設備信息
     file -s /dev/sd*
5 用 md5 值對比兩個文件是否一致
     cmp file1 file2
一致的話不會出現提示,不一致的話就會有提示信息
6 一條命令把 CD/DVD 做成 ISO 文件
     dd if=/dev/cdrom of=file.iso 
7 經過 ssh 複製整個硬盤到遠程目錄(帶壓縮)
     dd if=/dev/sda | gzip -c | ssh user@ip 'dd of=/mnt/backups/sda.dd'
8 不浪費磁盤的狀況下測試網絡速度
     dd if=/dev/zero bs=4096 count=1048576 | ssh user@ip 'cat > /dev/null'
以上命令經過 ssh 發送 4 GB 數據到遠程主機,但不會佔用任何磁盤空間。
 
 
 

靜態編譯 Tmux

 

最近開始使用 Tmux 以後,感受仍是在服務器上才能發揮出 Tmux 的價值。惋惜的是公司的服務器上沒有安裝 Tmux,跳板機上我也只有普通用戶權限,無法安裝軟件,因而我琢磨着從源碼編譯一個。git

Tmux 惟一的依賴是 libevent,因此我須要先把它編譯出來。以前我編譯軟件以後都是直接使用 root 權限,現在沒有了 root 權限,安裝軟件都成了讓我拙計的事情。github

先從最近聲名狼藉的 sourceforge 把 libevent 的源碼包抓下來,而後從 Github 把 tmux 的源碼包也抓下來。shell

wget -c https://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz wget -c https://github.com/tmux/tmux/releases/download/2.0/tmux-2.0.tar.gz 

解壓以後開始配置編譯過程。當咱們沒有 root 權限的時候,編譯以前就要設置軟件的安裝目錄了。ubuntu

./configure --prefix=~/libevent make make install 

不一樣的軟件編譯配置不盡相同,可是做爲一個約定, configire -h 老是能給出當前命令的幫助文檔。vim

安裝 libevent 到指定目錄以後,能夠開始編譯 tmux。由於要讓 tmux 的 configure 腳本找到 libevent,tmux 的安裝命令稍顯複雜。windows

./configure --prefix=~/tmux --enable-static CFLAGS=-I~/libevent/include LDFLAGS=-L~/libevent/lib make make install 

CFLAGS 是 C 編譯器參數,-I 後面帶着須要引用的頭文件的路徑。LDFLAGS 是連接器的參數,-L後面帶着庫文件的路徑。緩存

與 libevent 的默認開啓靜態連接不一樣,配置 tmux 編譯過程時須要顯示開啓靜態連接,不然之後運行 tmux 的時候都須要在動態庫目錄中包含 libevent 的動態庫。固然,靜態連接以後的二進制文件會相應的大一些。ruby

 

=================== Endbash

相關文章
相關標籤/搜索