在 iTerm2 中使用 tmux

coding01發表於2019-12-05

作為開發者,不斷和伺服器打交道,最煩躁的是,每次用 ssh 連線伺服器時,總擔心網路不穩定導致在伺服器端執行耗時的任務會被中斷。有時候伺服器一邊在執行命令,一邊又想看看伺服器記憶體、CPU 等執行情況,這時候不得不再開啟一個終端執行 ssh 連線操作。

最近發現一個好工具:「tmux」,恰好能解決這些問題,今天分享出來。

首先說一說 tmux 的好處。

tmux 優點

  • 分屏

在 Mac 上,iterm2 也是可以做到分屏,但如果結合 iterm2 與 ssh 的話,iterm2 分屏需要不斷地 ssh ,導致的後果就是有多個使用者連線,使用 who 命令檢視登入使用者數。

舉個例子,如果是 iterm2 分屏三個,則使用者連線數為:3

在 iTerm2 中使用 tmux

但,如果是用 tmux 的話,相同的目標,使用者連線數為:1

在 iTerm2 中使用 tmux

  • attach

attach 可以起到保護現場的作用,不至於因 ssh 超時或者異常退出,而喪失了工作環境。

我做了一個測試,先在 tmux 環境下 git clone 程式碼。

在 iTerm2 中使用 tmux

接著關閉 ssh 環境一段時間,然後我重新連線伺服器,這時候發現工作環境保持狀態,並且持續下載中:

在 iTerm2 中使用 tmux

其中原理我覺得可以這麼理解:tmux 執行在遠端主機上,充當中介的作用。本地終端應首先 ssh 到遠端主機,然後執行一個 tmux 會話,在會話內的 shell 中執行任務。當本地切斷 ssh 連線時,應當先結束 tmux 會話。由於 tmux 在遠端主機上執行,它可以裝作 ssh 連線從未中斷過。等本地終端再次登入時,又能重新裝載會話,恢復至連線切斷前的狀態,以達到下載從未中斷的目標。

以後我們可以放心的把耗時的任務放在 tmux 下執行了,再也不用擔心本地 ssh 斷連的問題了!

安裝 tmux

在 Mac 下,直接使用 brew

brew install tmux
複製程式碼

在 Centos 7,可以直接用 yum 安裝 tmux:

yum install tmux -y
複製程式碼

在 iTerm2 中使用 tmux

但版本會比較低,這裡我們也可以直接用原始碼編譯安裝最新版本:

# 安裝 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: 未找到命令

在 iTerm2 中使用 tmux

則需要下載安裝 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"
複製程式碼

在 iTerm2 中使用 tmux

這個的含義是:如果遠端伺服器已經有 coding01 session,則直接 tmux attach 載入 coding01 session;如果不存在,則會建立一個 coding01 session。

我們可以看看一共有幾個 session:

在 iTerm2 中使用 tmux

總結

有了 tmux,我們可以做的還有很多,包括 tmux 的配置、快捷鍵的學習等等,市面上還有人把 tmux 當成藝術來學習。

最後來看看我 tmux 皮膚,我喜歡分成三個 pane,左邊用於常規使用,右上角可以放一些實時性或者有意思的操作 (比如:顯示⏲️);右下角執行 top 命令可以時刻關注伺服器執行情況。

在 iTerm2 中使用 tmux

用好工具,提高我們的效率。

未完待續

參考

  1. gitlab.com/gnachman/it…
  2. blogs.technet.microsoft.com/jessicadeen…
  3. github.com/tmux/tmux
  4. medium.com/@gveloper/u…
  5. fedoramagazine.org/4-tips-bett…