作爲開發者,不斷和服務器打交道,最煩躁的是,每次用 ssh 連接服務器時,總擔心網絡不穩定導致在服務器端執行耗時的任務會被中斷。有時候服務器一邊在執行命令,一邊又想看看服務器內存、CPU 等運行情況,這時候不得不再打開一個終端執行 ssh 連接操作。
最近發現一個好工具:「tmux」,恰好能解決這些問題,今天分享出來。
首先說一說 tmux 的好處。
tmux 優點
- 分屏
在 Mac 上,iterm2 也是可以做到分屏,但如果結合 iterm2 與 ssh 的話,iterm2 分屏需要不斷地 ssh ,導致的後果就是有多個用戶連接,使用 who 命令查看登錄用戶數。
舉個例子,如果是 iterm2 分屏三個,則用戶連接數爲:3
但,如果是用 tmux 的話,相同的目標,用戶連接數爲:1
- attach
attach 可以起到保護現場的作用,不至於因 ssh 超時或者異常退出,而喪失了工作環境。
我做了一個測試,先在 tmux 環境下 git clone
代碼。
接着關閉 ssh 環境一段時間,然後我重新連接服務器,這時候發現工作環境保持狀態,並且持續下載中:
其中原理我覺得可以這麼理解:tmux 運行在遠程主機上,充當中介的作用。本地終端應首先 ssh 到遠程主機,然後運行一個 tmux 會話,在會話內的 shell 中運行任務。當本地切斷 ssh 連接時,應當先結束 tmux 會話。由於 tmux 在遠程主機上運行,它可以裝作 ssh 連接從未中斷過。等本地終端再次登錄時,又能重新裝載會話,恢復至連接切斷前的狀態,以達到下載從未中斷的目標。
以後我們可以放心的把耗時的任務放在 tmux 下執行了,再也不用擔心本地 ssh 斷連的問題了!
安裝 tmux
在 Mac 下,直接使用 brew
brew install tmux
在 Centos 7,可以直接用 yum
安裝 tmux:
yum install tmux -y
但版本會比較低,這裏我們也可以直接用源代碼編譯安裝最新版本:
# 安裝 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
# 驗證版本
tmux -V
tmux next-3.1
注:
- 如果出現
aclocal: 未找到命令
則需要下載安裝 automake 後再執行 autogen.sh
yum install automake -y
- 如果出現
make: yacc:命令未找到
則需要安裝 bison:
yum install bison -y
- 如果
make
安裝不了,可以試試make install
連接
首先將遠程連接 key 證書加入 ssh-key 中,以後訪問方便。
ssh-add -k key.pem
然後,我們在 iterm2 增加一個「Profile」,在「General」加入 「Command」命令:
ssh -t username@remote_host "tmux attach -t coding01 || tmux new -s coding01"
這個的含義是:如果遠程服務器已經有 coding01
session,則直接 tmux attach
載入 coding01
session;如果不存在,則會創建一個 coding01
session。
我們可以看看一共有幾個 session:
總結
有了 tmux,我們可以做的還有很多,包括 tmux 的配置、快捷鍵的學習等等,市面上還有人把 tmux 當成藝術來學習。
最後來看看我 tmux 面板,我喜歡分成三個 pane,左邊用於常規使用,右上角可以放一些實時性或者有意思的操作 (比如:顯示⏲️);右下角執行 top
命令可以時刻關注服務器運行情況。
用好工具,提高我們的效率。
未完待續
參考
- https://gitlab.com/gnachman/iterm2/wikis/tmux-Integration-Best-Practices
- https://blogs.technet.microsoft.com/jessicadeen/linux/macos-ohmyzsh-tmux-vim-iterm2-powerlevel9k-badass-terminal/
- https://github.com/tmux/tmux
- https://medium.com/@gveloper/using-iterm2s-built-in-integration-with-tmux-d5d0ef55ec30
- https://fedoramagazine.org/4-tips-better-tmux-sessions/