原作者:coding01,原文鏈接:https://juejin.im/post/5de8fe196fb9a0161e591dcb
作為開發(fā)者,不斷和服務(wù)器打交道,最煩躁的是,每次用 ssh 連接服務(wù)器時(shí),總擔(dān)心網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致在服務(wù)器端執(zhí)行耗時(shí)的任務(wù)會(huì)被中斷。有時(shí)候服務(wù)器一邊在執(zhí)行命令,一邊又想看看服務(wù)器內(nèi)存、CPU 等運(yùn)行情況,這時(shí)候不得不再打開一個(gè)終端執(zhí)行 ssh 連接操作。
最近發(fā)現(xiàn)一個(gè)好工具:「tmux」,恰好能解決這些問題,今天分享出來。
首先說一說 tmux 的好處。
tmux 優(yōu)點(diǎn)
[if !supportLists]·????????[endif]分屏
在 Mac 上,iterm2 也是可以做到分屏,但如果結(jié)合 iterm2 與 ssh 的話,iterm2 分屏需要不斷地 ssh ,導(dǎo)致的后果就是有多個(gè)用戶連接,使用 who 命令查看登錄用戶數(shù)。
舉個(gè)例子,如果是 iterm2 分屏三個(gè),則用戶連接數(shù)為:3
但,如果是用 tmux 的話,相同的目標(biāo),用戶連接數(shù)為:1
[if !supportLists]·????????[endif]attach
attach 可以起到保護(hù)現(xiàn)場的作用,不至于因 ssh 超時(shí)或者異常退出,而喪失了工作環(huán)境。
我做了一個(gè)測試,先在 tmux 環(huán)境下git clone 代碼。
接著關(guān)閉 ssh 環(huán)境一段時(shí)間,然后我重新連接服務(wù)器,這時(shí)候發(fā)現(xiàn)工作環(huán)境保持狀態(tài),并且持續(xù)下載中:
其中原理我覺得可以這么理解:tmux 運(yùn)行在遠(yuǎn)程主機(jī)上,充當(dāng)中介的作用。本地終端應(yīng)首先 ssh 到遠(yuǎn)程主機(jī),然后運(yùn)行一個(gè) tmux 會(huì)話,在會(huì)話內(nèi)的 shell 中運(yùn)行任務(wù)。當(dāng)本地切斷 ssh 連接時(shí),應(yīng)當(dāng)先結(jié)束 tmux 會(huì)話。由于 tmux 在遠(yuǎn)程主機(jī)上運(yùn)行,它可以裝作 ssh 連接從未中斷過。等本地終端再次登錄時(shí),又能重新裝載會(huì)話,恢復(fù)至連接切斷前的狀態(tài),以達(dá)到下載從未中斷的目標(biāo)。
以后我們可以放心的把耗時(shí)的任務(wù)放在 tmux 下執(zhí)行了,再也不用擔(dān)心本地 ssh 斷連的問題了!
安裝 tmux
在 Mac 下,直接使用brew
brew install tmux
復(fù)制代碼
在 Centos 7,可以直接用yum 安裝 tmux:
yum install tmux -y
復(fù)制代碼
但版本會(huì)比較低,這里我們也可以直接用源代碼編譯安裝最新版本:
# 安裝 ncurses-devel 和 libevent-devel
yum -y install ncurses-devel
yum -y install libevent-devel
# 下載源代碼
git clone https://github.com/tmux/tmux.git
# 編譯
cd tmux && sh
autogen.sh
./configure && make
# 驗(yàn)證版本
tmux -V
tmux next-3.1
復(fù)制代碼
注:
[if !supportLists]·????????[endif]如果出現(xiàn) aclocal: 未找到命令
則需要下載安裝 automake 后再執(zhí)行 autogen.sh
yum install automake -y
復(fù)制代碼
[if !supportLists]·????????[endif]如果出現(xiàn) make: yacc:命令未找到
則需要安裝 bison:
yum install bison -y
復(fù)制代碼
[if !supportLists]·????????[endif]如果 make 安裝不了,可以試試 make install
連接
首先將遠(yuǎn)程連接 key 證書加入 ssh-key 中,以后訪問方便。
ssh-add -k key.pem
復(fù)制代碼
然后,我們在 iterm2 增加一個(gè)「Profile」,在「General」加入 「Command」命令:
ssh -t username@remote_host "tmux attach -t coding01 || tmux?new -s coding01"
復(fù)制代碼
這個(gè)的含義是:如果遠(yuǎn)程服務(wù)器已經(jīng)有 coding01 session,則直接 tmux attach 載入 coding01 session;如果不存在,則會(huì)創(chuàng)建一個(gè) coding01 session。
我們可以看看一共有幾個(gè) session:
總結(jié)
有了 tmux,我們可以做的還有很多,包括 tmux 的配置、快捷鍵的學(xué)習(xí)等等,市面上還有人把 tmux 當(dāng)成藝術(shù)來學(xué)習(xí)。
最后來看看我 tmux 面板,我喜歡分成三個(gè) pane,左邊用于常規(guī)使用,右上角可以放一些實(shí)時(shí)性或者有意思的操作 (比如:顯示??);右下角執(zhí)行 top 命令可以時(shí)刻關(guān)注服務(wù)器運(yùn)行情況。
用好工具,提高我們的效率。
未完待續(xù)