2014年7月19日 星期六

tmux 操作初上手

tmux 為 Terminal Multiplexer 之縮寫,從原文我們可以了解使用 tmux 的目的,即是為了達到終端機介面的多工執行。

在以往較為被 Unix, Linux 使用者熟悉的多工終端機是由 GNU Project 所推出的 GNU Screen,作為多工終端機使用的 GNU Screen 擁有許多傑出的功能,故常被作為多工終端機的首要選項,但近來 tmux 也逐漸成為另一支異軍突起的多工終端機,讓多工終端機有其他不一樣的選擇。

與 GNU Screen 相較之下,tmux 在多工輸入、畫面的切割以及調整、多人共用 Session 等方面,都能夠與 GNU Screen 互別苗頭,因此也是值得使用的一款多工終端機。

以下筆者將針對 tmux 中幾個重要的元素做個詳細的介紹,如有任何不足的地方歡迎大家討論與指教。


tmux 中的大五行


tmux 是由許多的元素所組成,其中筆者列出 tmux 之中最常見也最重要的五項元素,並且針對每項元素在 tmux 中的用途盡可能的做些簡單介紹。( tmux 所有元素詳細的解釋可以參考官方文件)
  1. Server
  2. Clients
  3. Sessions
  4. Windows
  5. Panes
以上所列的即是我們使用 tmux 時會遇到的五項重要的元素。其中我們可以注意到單單只有 Server 這項元素使用單數型態名詞,tmux 的說明文件用以下的說明對 Server 進行簡單的描述:
In tmux, a session is displayed on screen by a client and all sessions are managed by a single server. The server and each client are separate processes which communicate through a socket in /tmp.

簡而言之,tmux 透過一個 Server 來管理不同的 Session 以及 Client 連線。其中 Session 表示 tmux 管理的虛擬終端機集合,而每一個 Session 至少會有一個 Window 連結。

每個 Window 則可以連結一至多個 Pane ,tmux 之中最強大的畫面分割與調整功能便是由 Window 以及 Pane 所構成的各式各樣組合 (Screen 只能做到不同 Pane 的大小調整,並沒有調整分割方式的功能)。

下圖我們直接引用 tmux 官方的 tmux 執行畫面展示 tmux 強大的畫面分割與調整功能。

tmux 強大的畫面分割與調整功能
(reference http://tmux.sourceforge.net/) 

接著,我們再用下圖示意 WindowPane 在畫面中扮演的角色,以讓各位能夠較為深刻了解 WindowPane 之功用。

Window 與 Pane

Window 與 Pane 操作


接下來筆者將簡單介紹 Window 以及 Pane 的一些基本操作:
  • 分割 Window
  • 顯示 Pane 編號
  • 切換 Pane
  • 開啟新 Window
  • 切換 Window
  • 搬移 Pane
  • Pane 同步輸入
  • tmux Session 操作

首先,我們輸入以下指令啟動 tmux server,以進入 tmux 多工終端機環境內:
tmux

* 分割 Window


在 tmux 多工終端機環境只要直接於命令列輸入以下指令即可分割視窗,執行畫面如下圖所示:
tmux split-window

tmux 分割 Window

* 顯示 Pane 編號

在切割 Window 之後,游標會自動移至新的 Pane,如果我們需要移至別的 Pane 就需要知道 Pane 的編號,此時可以用以下指令顯示 Pane 編號,執行畫面如下圖所示:
tmux display-panes
tmux 顯示 Pane 編號
如上圖所示,tmux 很貼心地用顯眼的數字顯示 Pane 編號,有了 Pane 編號之後,我們就能夠切換 Pane。

* 切換 Pane

切換 Pane 指令如下:
tmux select-pane -t <Pane編號>
例如:
tmux select-pane -t 0

* 開啟新 Window

除了多個 Pane 之外,tmux 也允許同時開啟多個 Window,只要輸入以下指令,tmux 就會開啟一個新的視窗供你使用,同時左下會顯示 Window 編號供人識別與切換之用(詳見下圖):
tmux new-window
Window 編號示意圖
如上圖所示,目前共有兩個 Window 在 tmux 中,分別為 Window 0 與 Window 1。

此外,也可以在 Pane 中輸入以下指令,直接將 Pane 獨立成一個 Window:
tmux break-pane
注意:若是 Window 中僅有一個 Pane 則無法獨立

* 切換 Window

有了 Window 編號之後,我們就能夠利用以下指令進行 Window 的切換:
tmux select-window -t <Window編號>

* 搬移 Pane

學會了 Window 與 Pane 的切換之後,我們將進一步學習如何搬移 Pane,將 Pane 隨心所欲地在視窗間搬移,搬移 Pane 的指令如下:
tmux join-pane -s <session:window> -t <session:window>
上述指令意即將選定的 Window 中最後被使用的 Pane 搬去指定 Session 中的 Window,目標 Window 必須已經存在否則會提示無法移動。

例如我們將 Session 0 中的 Window 1 最後使用過的 Pane 搬來 Session 0 中的 Window 2,如下圖:
tmux 搬移 Pane

* Pane 同步輸入

如果當前 Window 內有多個 Pane 的話,開啟同步輸入後可以將鍵盤輸入同步到所有 Pane 之中,對於系統管理人員來說是個相當方便的功能,例如同步設定不同伺服器關機時間。

開啟同步輸入的指令如下:
tmux setw synchronize-panes on

關閉同步輸入的指令如下:
tmux setw synchronize-panes off

* tmux Session 操作

最後,筆者將列出操作 Session 之相關指令。

列出所有 Session:
tmux list-sessions

離開 Session 並保留 Window 與 Pane 狀態:
tmux detach

重新附加至最後使用過的 tmux Session 中:
tmux attach

重新附加至特定 tmux Session 中:
tmux attach -t <Session編號>

開啟新的 tmux Session,並且用自定義的名字取代 Session 編號:
tmux new -s session-name


在學會 tmux 基本的操作之後,筆者將在下篇進一步介紹 tmux 設定檔,可以讓平時可以更方便使用。


參考資料:

http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1

沒有留言: