tmux 多終端管理器

ysjxjf發表於2014-06-26



在日常工作中,總是感覺用PUTTY連線Linux一個視窗不夠用,再開新的視窗又比較麻煩,於是想到是否可以在一個SSH會話中可以開啟多個終端,最後我找到了很強大而且使用廣泛的tmux多終端管理器。


tmux是一個優秀的終端複用軟體,類似GNU Screen,但來自於OpenBSD,採用BSD授權。使用它最直觀的好處就是,透過一個終端登入遠端主機並執行tmux後,在其中可以開啟多個控制檯而無需再使用更多的SSH會話來連線這臺遠端主機;其功能遠不止於此。


1、安裝

在freebsd中可以直接使用ports工具安裝,位置在:/usr/ports/sysutils/tmux/,ubuntu系統下預設自帶byou,與tmux很像,甚至快捷鍵都是一樣的。這裡只詳細說明在Centos6.3下如何安裝和使用tmux的。


Centos6.3的軟體庫裡沒有tmux,只有screen,所以要想使用tmux需要自己編譯安裝。


(1) 下載tmux:


wget


(2) 編譯安裝:


tar zxvf tmux-1.6.tar.gz


cd tmux-1.6


./configure


make;make install


2、啟動tmux

安裝完成後輸入命令tmux即可開啟軟體,介面十分簡單,類似一個下方帶有狀態列的終端控制檯;但根據tmux的定義,在開啟了tmux伺服器後,會首先建立一個會話,而這個會話則會首先建立一個視窗,其中僅包含一個皮膚;也就是說,這裡看到的所謂終端控制檯應該稱作tmux的一個皮膚,雖然其使用方法與終端控制檯完全相同。


tmux使用C/S模型構建,主要包括以下單元模組:


一個tmux命令執行後啟動一個tmux服務

一個tmux服務可以擁有多個session,一個session可以看作是tmux管理下的偽終端的一個集合

一個session可能會有多個window與之關聯,每個window都是一個偽終端,會佔據整個螢幕

一個window可以被分割成多個pane

多個pane的編號規則,以3個pane為例:


0


1 | 2


3、tmux快捷鍵

tmux在會話中使用大量的快捷鍵來控制多個視窗、多個會話等。

[cpp] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

Ctrl+b // 啟用控制檯;此時以下按鍵生效

系統操作

tmux ls //列出已有會話(list-sessions)

tmux a -t 1//來連線到第一個會話

c-b t //鐘錶

? // 列出所有快捷鍵;按q返回

d // 脫離當前會話;這樣可以暫時返回Shell介面,輸入tmux attach能夠重新進入之前的會話

D // 選擇要脫離的會話;在同時開啟了多個會話時使用

Ctrl+z // 掛起當前會話

r // 強制重繪未脫離的會話

s // 選擇並切換會話;在同時開啟了多個會話時使用

: // 進入命令列模式;此時可以輸入支援的命令,例如kill-server可以關閉伺服器

[ // 進入複製模式;此時的操作與vi/emacs相同,按q/Esc退出

~ // 列出提示資訊快取;其中包含了之前tmux返回的各種提示資訊

視窗操作

c // 建立新視窗

& // 關閉當前視窗

數字鍵 // 切換至指定視窗

p // 切換至上一視窗

n // 切換至下一視窗

l // 在前後兩個視窗間互相切換

w // 透過視窗列表切換視窗

, // 重新命名當前視窗;這樣便於識別

. // 修改當前視窗編號;相當於視窗重新排序

f // 在所有視窗中查詢指定文字

皮膚操作

” // 將當前皮膚平分為上下兩塊

% // 將當前皮膚平分為左右兩塊

x // 關閉當前皮膚

! // 將當前皮膚置於新視窗;即新建一個視窗,其中僅包含當前皮膚

Ctrl+方向鍵 // 以1個單元格為單位移動邊緣以調整當前皮膚大小

Alt+方向鍵 // 以5個單元格為單位移動邊緣以調整當前皮膚大小

Space // 在預置的皮膚佈局中迴圈切換;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled

q // 顯示皮膚編號

o // 在當前視窗中選擇下一皮膚

方向鍵 // 移動游標以選擇皮膚

{ // 向前置換當前皮膚

} // 向後置換當前皮膚

Alt+o // 逆時針旋轉當前視窗的皮膚

Ctrl+o // 順時針旋轉當前視窗的皮膚

4、配置檔案

tmux配置檔案在~/.tmux.conf和/etc/tmux.conf中,配置檔案中可以修改預設繫結的快捷鍵


配置檔案示例:

[cpp] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

// 此類配置可以在命令列模式中輸入show-options -g查詢

set-option -g base-index 1 // 視窗的初始序號;預設為0,這裡設定為1

set-option -g display-time 5000 // 提示資訊的持續時間;設定足夠的時間以避免看不清提示,單位為毫秒

set-option -g repeat-time 1000 // 控制檯啟用後的持續時間;設定合適的時間以避免每次操作都要先啟用控制檯,單位為毫秒

set-option -g status-keys vi // 操作狀態列時的預設鍵盤佈局;可以設定為vi或emacs

set-option -g status-right “#(date +%H:%M’ ‘)” // 狀態列右方的內容;這裡的設定將得到類似23:59的顯示

set-option -g status-right-length 10 // 狀態列右方的內容長度;建議把更多的空間留給狀態列左方(用於列出當前視窗)

set-option -g status-utf8 on // 開啟狀態列的UTF-8支援


// 此類設定可以在命令列模式中輸入show-window-options -g查詢

set-window-option -g mode-keys vi // 複製模式中的預設鍵盤佈局;可以設定為vi或emacs

set-window-option -g utf8 on // 開啟視窗的UTF-8支援


// 將啟用控制檯的快捷鍵由Ctrl+b修改為Ctrl+a,Ctrl+a是Screen的快捷鍵

set-option -g prefix C-a

unbind-key C-b

bind-key C-a send-prefix


// 新增自定義快捷鍵

bind-key z kill-session // 按z結束當前會話;相當於進入命令列模式後輸入kill-session

bind-key h select-layout even-horizontal // 按h將當前皮膚佈局切換為even-horizontal;相當於進入命令列模式後輸入select-layout even-horizontal

bind-key v select-layout even-vertical // 按v將當前皮膚佈局切換為even-vertical;相當於進入命令列模式後輸入select-layout even-vertical


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66634/viewspace-1193993/,如需轉載,請註明出處,否則將追究法律責任。

相關文章