為什么要用tmux
tmux是什么?tmux是linux中一種管理窗口的程序。那么問(wèn)題來(lái)了:Mac自帶的Iterm2很好用啊。既支持多標(biāo)簽,也支持窗體內(nèi)部Panel的分割,為什么還要用tmux?其實(shí),多標(biāo)簽和分割窗體只是tmux的部分功能。用tmux的主要原因是它提供了一個(gè)窗體組隨時(shí)存儲(chǔ)和恢復(fù)的功能??纯匆韵碌氖褂脠?chǎng)景是否適合你:
公司臺(tái)式機(jī)開(kāi)了一堆vim和log打印窗口下班了。到家后靈感突發(fā),想要繼續(xù)coding,登陸VPN,SSH連上臺(tái)式后發(fā)現(xiàn)又要重新打開(kāi)各種窗口,瞬間沒(méi)心情了。。。FML!這個(gè)時(shí)候你就可以在你的公司臺(tái)式機(jī)上裝個(gè)tmux。同一組工作環(huán)境,在多處共享。
公司服務(wù)器上調(diào)試程序,開(kāi)了一堆窗口。出去吃了個(gè)飯,發(fā)現(xiàn)SSH超時(shí)了,broken pipe。重頭開(kāi)始。。。FML!如果你之前使用了tmux就不會(huì)有這樣的問(wèn)題,attach就能找回原來(lái)打開(kāi)的那些窗口。
tmux的基本概念
我們先來(lái)理解下tmux的幾個(gè)元素。tmux的主要元素分為三層:
Session 一組窗口的集合,通常用來(lái)概括同一個(gè)任務(wù)。session可以有自己的名字便于任務(wù)之間的切換。
Window 單個(gè)可見(jiàn)窗口。Windows有自己的編號(hào),也可以認(rèn)為和ITerm2中的Tab類似。
Pane 窗格,被劃分成小塊的窗口,類似于Vim中 C-w +v 后的效果。
為了更好的理解,下面是三個(gè)元素在tmux中的具體展現(xiàn)。
可以看到Session總在tmux的左下角顯示,通常會(huì)為他命名。例如我正在寫(xiě)博客,開(kāi)了很多窗口那么我就會(huì)把這組窗口命名為blog方便之后的重連和切換。而Window也會(huì)在最下方以一種Tab的形式展現(xiàn)。每個(gè)window都有自己的需要,也會(huì)以當(dāng)前活動(dòng)進(jìn)程的名字命名。而Pane就比較好理解,即把單個(gè)窗口分割成若干個(gè)小塊后的元素。
CentOS下安裝
首先我是用yum install tmux嘗試安裝的。估計(jì)沒(méi)有源,沒(méi)有找到tmux。所以習(xí)慣性直接找源代碼安裝。
但是其中有依賴,需要先安裝libevent。
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xzvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure make
make install
然后再下載源碼安裝tmux
git clone git://git.code.sf.net/p/tmux/tmux-code tmux
cd tmux
sh autogen.sh
./configure make
make install
過(guò)程中遇到了兩個(gè)報(bào)錯(cuò),解決都比較簡(jiǎn)單,當(dāng)然是查閱資料后。
問(wèn)題1:
期間我遇到了執(zhí)行autogen.sh 報(bào)錯(cuò),原因是我沒(méi)有安裝automake。這個(gè)直接yum install automake就簡(jiǎn)單解決了。
問(wèn)題2:
執(zhí)行的時(shí)候遇到
libevent-2.0.so.5: cannot open shared object file: No such file or directory
的報(bào)錯(cuò),解決辦法也比較簡(jiǎn)單,既然找不到,那就換個(gè)找得到的地方唄。
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5 # 32位系統(tǒng)
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5 # 64位系統(tǒng)
使用和快捷鍵
直接在命令行輸入tmux即可進(jìn)入tmux的模式。
tmux主要有windows窗體操作和Pane操作,個(gè)人覺(jué)得windows對(duì)于我來(lái)說(shuō),意義不大(并不是說(shuō)windows模式?jīng)]適用場(chǎng)景),所以這里主要講下Pane的相關(guān)操作。
快捷鍵
tmux的快捷鍵都要先按C-b(Ctrl-b)。然后再按下面表格內(nèi)容,才能達(dá)到相應(yīng)的效果。
session和其他相關(guān)快捷鍵
快捷鍵 |
功能 |
C-z |
關(guān)閉tmux. |
: |
進(jìn)入tmux命令行模式. |
? |
列出所有快捷鍵. |
t |
顯示時(shí)間. |
d |
退出當(dāng)前tmux客戶端,tmux后臺(tái)運(yùn)行. |
$ |
重命名當(dāng)前session. |
s |
切換session 顯示所有session并切換到某一個(gè)session. |
( |
切換session 切換到上一個(gè)session. |
) |
切換session 切換到下一個(gè)session. |
L |
切換session 到前一個(gè)活躍的session. |
window相關(guān)快捷鍵
快捷鍵 |
功能 |
c |
新增一個(gè)window. |
|
退出當(dāng)前window. |
, |
重命名當(dāng)前window. |
l |
跳轉(zhuǎn)到上一個(gè)所在window. |
i |
顯示當(dāng)前window的信息. |
w |
切換window 顯示所有window并切換window. |
0 to 9 |
切換window 到相應(yīng)編號(hào)的window. |
p |
切換window 上一個(gè)window. |
n |
切換window 下一個(gè)window. |
’ |
切換window 到輸入編號(hào)的window. |
f |
切換window 到搜索到的window. |
Space |
改變當(dāng)前window下的pane布局. |
pane相關(guān)快捷鍵
快捷鍵 |
功能 |
! |
從window移除當(dāng)前pane. |
" |
將當(dāng)前pane變成上下兩個(gè)pane. |
% |
將當(dāng)前pane變成左右兩個(gè)pane. |
x |
關(guān)閉當(dāng)前pane. |
q |
顯示pane的索引. |
z |
最大化或者恢復(fù)當(dāng)前pane. |
{ |
跟前一個(gè)pane交換位置. |
} |
跟后一個(gè)pane交換位置. |
o |
切換Pane 到下一個(gè)pane. |
; |
切換Pane 進(jìn)入到前一個(gè)操作過(guò)的pane. |
Up, Down Left, Right |
切換Pane 使用方向鍵切換到相應(yīng)方向的pane.
|
可能有些快捷鍵有些出入,可以的話提醒下。另外有些快捷鍵沒(méi)有搞懂,而且快捷鍵比較多,個(gè)人覺(jué)得記得主要的幾個(gè)切換快捷鍵就足夠用來(lái)。比較tmux只是一個(gè)協(xié)助工具,沒(méi)有必要在其上面那么用心。加粗的是個(gè)人覺(jué)得比較實(shí)用的。
tmux不中斷session的模式確實(shí)很666666,每次連回去就可以快速接上上次結(jié)束的環(huán)境。而且多個(gè)pane也非常適合要開(kāi)啟并監(jiān)控多個(gè)服務(wù)的情況。