快轉到主要內容

"Tmux" 指令,建立多個終端 Sessions,登出也能保留背景運作

·2398 字
Computer-Science Tmux SSH
目錄

在伺服器建立多個程序時,該如何有效率的管理及切換每個程序的終端界面呢?Tmux 不僅能做到這點,還能在使用者登出後,使程序於背景繼續運作。


Screen
#

先前有介紹過指令「Screen」(在「"Screen" Command 讓程式在背景執行,並隨意切換,即便登出也不會中斷!」這篇文章中),但比起該指令,接下來要介紹的「Tmux」相對更多人使用,也更為出名。


Tmux
#

Tmux」由「Nicholas Marriott」開發,於 2009 年 9 月 22 日釋出第一版本。
該指令類似於先前介紹過的「Screen」,可以建立多個終端 Session,並方便的將程序於背景及前台間切換。

可以透過以下方法安裝(具體選擇請依照不同平台決定):

  • apt install tmux
  • yum install tmux
  • brew install tmux

或是於 Github 下載原始檔自行編譯:https://github.com/tmux/tmux


Create a session
#

要創建一個 tmux session,你只需要輸入指令「tmux」,便會創建並進入一個 tmux session。

乍看與一般終端無異,只是多了底下的綠色區域
乍看與一般終端無異,只是多了底下的綠色區域

如果要退出 session 則像一般的終端一樣直接輸入「exit」即可(部份情況支援使用 ctrl+d 的快捷鍵)。

其預設的 session 名稱是以數字 0、1、2 以此類推命名創建,例如上述的範例,圖中可見左下角顯示著「[0]」,那便是該 session 的名稱(ID)。
如果要自訂 session 名稱,可以透過指令「tmux new -s <name>」來指定,e.g.

1# 創建名為「hello」的 tmux session
2tmux new -s hello

可以看見左下角 session 名稱變成指定的「hello」了
可以看見左下角 session 名稱變成指定的「hello」了

如果要透過一行指令創建 tmux session 並執行指令,只需要在後方加上指令即可:

1tmux new -s hello 'cd ~/scripts/; bash script.sh; bash'

例如以上範例,用「'」包圍是為了怕一些如「;」等特殊符號跳脫,最後加上「bash」則是希望在腳本執行完後,卡住 tmux session,而不是直接結束。


Background Session & Show Sessions list
#

補充說明一下,
如果要創建一個一開始就在背景執行的 session,則在創建時加入參數「-d」,e.g.

1# 創建一個名為 "bg" 的背景 tmux session
2tmux new -d -s bg

p.s. 「-d」指的是「detach」。
p.s. 切記「-d」不能緊跟在「-s」後方,會被當成是 session id 處理。(但tmux new -s bg -d這麼寫是可以的)

如果要使當前的 session 於背景執行,可以透過 tmux 特殊的組合鍵來完成。
tmux 的組合鍵為 ctrl+b 然後釋放按鍵後,接著按下其他功能按鍵。

例如要使當前 session 於背景處理,則是使用功能「d (detach)」。
因此組合按鍵為 ctrl+b, d,即同時按下 ctrl+b 後釋放,接著按下 d
沒意外應該就會退回原本所在的終端了。

要查看當前背景正在運作的 tmux sessions,則可以透過指令「tmux ls」來查看:

可以看見目前背景有兩個 tmux sessions:「alpaca」、「hello」
可以看見目前背景有兩個 tmux sessions:「alpaca」、「hello」


Attach Background Session
#

要 attach 回背景的 tmux session,則需要使用指令「tmux a -t <session-id>」,e.g.

1# attach 上名為「alpaca」的 session
2tmux a -t alpaca

p.s. 其中「a」指的是「attach」;「-t」指的是「target」。

並且當你在 tmux 的 session 當中時,tmux 也提供一個有趣的切換方式。
使用組合鍵 ctrl+b, w,接著便可以用方向鍵在不同的 sessions 間切換(按enter即可快速 attach session):

按下方向鍵「=> (Right)」來展開 session 的程序:

p.s. 方向鍵「<= (Left)」可以收回展開。


Kill Session
#

要刪除 session 則使用「tmux kill-session -t <session-id>」,e.g.

1# 刪除名為 "hello" 的 tmux session
2tmux kill-session -t hello

另外也有一個參數,可以用來刪除「除了指定的 session 外的所有 sessions」,e.g.

1# 刪除除了 "alpaca" 外的所有 tmux sessions
2tmux kill-session -a -t alpaca

要刪除所有 tmux sessions,則使用「tmux kill-server」。
p.s. 這會刪除所有 tmux 程序


Split Windows
#

而 tmux 最廣為人知的用法則是可以將一個終端劃分多個 windows。
分割視窗的組合鍵有兩種,分別是用於垂直分割的「ctrl+b, "」;及水平分割的「ctrl+b, %」。
(p.s. 注意英文雙引號「"」及百分號「%」,通常需要按住shift來觸發)

水平分割效果如下:

垂直分割:

並且可以多次切割:

要在不同的 windows 間切換,則可以使用組合鍵 ctrl+b, <方向鍵>
(如果你不喜歡這種方式,可以看看最後補充的滑鼠操作方式)


Others
#

tmux session 指令
#

tmux 提供一系列的指令可做使用(詳細不多做介紹,請自行搜索相關資料)。
其指令輸入方式為組合鍵「ctrl+b, :」,接著輸入指令並按下 enter。

舉例前面介紹的刪除 tmux session 的方式,使用 tmux 內部指令也可以辦到:

1# attach 上一個 tmux session (attach "hello")
2tmux a -t hello
3
4# 按下 <ctrl> + <b>, ":",然後輸入「kill-session」
5:kill-session

重新命名 session
#

1# 重新命名 session "old-name" 為 "new-name"
2tmux rename -t old-name new-name

啟用滑鼠操作模式
#

在滑鼠操作模式下,可以直接用滑鼠點擊 tmux windows 來切換,支援滾輪滑動終端,並且選取文字時可以自動複製。

該功能通常預設是關閉的,可以透過上述的 tmux session 指令輸入方法來啟用。
使用組合鍵 ctrl+b, : 後,便可以開始輸入 tmux 內部指令「set -g mouse on」,即可使用滑鼠操作模式。

如果需要 tmux 記住該設定,每次開啟都自動啟用,則可以在 tmux config 檔案中設定。
tmux config 檔案通常位於「~/.tmux.conf」,如果不存在則自行創建即可。
並在檔案中寫上「set -g mouse on」。

這裡有一些需要特別注意的部份:

  • ~/.tmux.conf 的檔名前方有個.
  • tmux config 當中寫的 set -g mouse on 前方並沒有冒號「:
  • 若有其他指令要寫入 tmux config,請記得要空行(別寫在同一行)

並且,當更改完設定後,tmux 並不會馬上生效,有幾種方式讓 tmux 讀取新的設定:

  • 最暴力的方式就是直接重開 tmux,使用先前提到的「tmux kill-server」。
  • 或者於終端輸入 tmux source-file ~/.tmux.conf 來強制 tmux 讀取設定檔。
  • 於 tmux session 當中也可以使用 tmux session 內部指令「:source-file ~/.tmux.conf

豐富 tmux 終端顏色
#

如果 tmux 終端顯示的文字顏色不像平常使用的終端來的豐富,
可以試試使用 tmux 設定「set -g default-terminal "screen-256color"」來使用更多顏色。

與滑鼠操作的部份一樣,可以直接使用 tmux 內部指令,或者加入 tmux config 當中。

Alpaca
作者
Alpaca
No one can stop my feet.

相關文章

"Screen" Command 讓程式在背景執行,並隨意切換,即便登出也不會中斷!
·939 字
Computer-Science SSH
Simply setting up a Proxy Server with SSH
·344 字
Computer-Science SSH

Did you know that SSH can make your host as a proxy server?

Change username and home folder in ubuntu
·189 字
Computer-Science Ubuntu
Set nginx access password
·353 字
Computer-Science Nginx

How to make nginx website require password to access ?

Linux 常見壓縮指令整理
·279 字
Computer-Science

How to use compress file commands in linux ?

《Pwn - 0x03》Tools - GDB, Pwntools
·2054 字
Computer-Science Pwn