tmux
linux學習筆記
在學習DL這些技術的時候,訓練模型常常會用到實驗室的遠端設備,像筆者的實驗室中就有幾顆V100或GTX3080可以使用
在一次使用中,如果遇到頁面登出、斷線等問題,再登入回去就沒有程式的一些提示訊息跳出(該terminal已經被關掉了),但其實該支程式依然在背景執行,為了避免這樣的問題,故有此篇的誕生
此篇內容參考tmux 快速入門筆記感謝該作者的貢獻
tmux是一個terminal multiplexer,概念上的意思就是在一個終端機(一個console)下開啟多個視窗或是分割視窗區塊(在tmux中會有視窗(window)和視窗區塊(pane)),每個pane會各自獨立執行一個terminal instance(各自輸入輸出的介面)讓我們可以同時使用多個指令,而無須開啟多個終端機視窗。
tmux會在同一個session(連線狀態下的執行環境)保存這些視窗和視窗區塊。我們可以在任何時間離開這個連線(這被稱作detaching)。
而tmux會繼續維持這個session,直到把tmux server砍掉或是重開機,且重點是我們可以隨時重新回到(attaching)上次離開session的狀態。
當我們ssh斷線時,其實對於tmux來說只是和tmux server中斷,tmux server會在伺服器端背景繼續執行並保存剛剛的session。要繼續回到剛剛的session只要重新ssh連線回去並在和session連線(attach)即可。
總結來說,tmux的最基本兩大功能就是視窗管理和session管理,它的核心概念就像是一個更輕易使用且強大的螢幕替代工具。
大部分OS中,安裝tmux都相當簡單。
以Ubuntu為例,只需要一行指令:
sudo apt-get install tmux
即可完成安裝
當我們要建立一個session時,只要輸入tmux即可
tmux
這個指令會建立一個新的tmux session,你會看到下面多了一條綠色的狀態列。狀態列是tmux很重要的一個部分。
除了顯示當前的視窗(在左邊)它同時也會顯示一些關於系統的資訊像是時間(在右邊)。當然狀態列也是可以客製化的,像是顯示行事曆、電量等等
(筆者OS:真的就是另一個桌面…)
現在我們已經建立了第一個session,當我們建立session的時候,tmux預設會開啟一個視窗包含一個單一的視窗區塊。
當我們執行tmux指令時,我們需要先輸入一個前置鍵,tmux的預設是Ctrl+b。
接著要分割區塊使用的指令是Ctrl+b %,這個指令會幫我們把當前畫面切割成垂直左右的兩個視窗區塊。
如果要水平切割則是Ctrl+b "。
現在我們的操作會被侷限在剛剛新建立的視窗區塊中。但如果想想回到左邊的那個,這時候可以使用Ctrl+b搭配方向鍵即可。
(但筆者自己在aiForge上使用此指令無法生效)
使用Ctrl+d即可
(補充:想要關閉分割視窗區塊則可使用Ctrl+b x)
tmux的視窗類似於Linux中建立一個虛擬桌面,如:KDE,Gnome等
常用的操作指令有:
如果已經完成了工作,要detach只需要Ctrl+b d,又或者Ctrl+b D可以選擇要從那個session離開,但要注意的是,這些session依然在背景執行。
要返回剛剛的session,第一步要先知道要重新連上哪個session,透過下面的指令可以列出在背景執行的session。
tmux ls
要連回session我們需要指定參數,例如要連回編號0的session則輸入
tmux attach -t 0
-t 0 這個參數我們是透過tmux ls來取得的。
若對於名稱有所偏好的話,可以使用
tmux new -s <name>
此時這個新建的session就會被命名為<name>,除此之外,也可以對以存在的session修改名稱
tmux rename-session -t <old name> <new name>
補充:若要刪除不需要的session則使用
tmux kill-session -t <name>
以上是原作者所記錄的一些基本功能和操作,當然tmux還有更多神奇的功能,可以參考此篇
一些優點:
若有興趣想要知道更多關於tmux的其他功能,輸入Ctrl+b ?會看到所有支援的指令,Ctrl+c可以離開Help。
當然網路上還有很多資源,如果有興趣想再更進一步探討tmux,可以上網找尋更多資源,但這已經超出本篇的內容了。
# 新增
$ tmux
# OR
$ tmux new -s <your_session_name>
# session 列表
$ tmux ls
# 重新連線 session
$ tmux a -t 0
# OR
$ tmux a -t <session_name>
# 刪除 session
$ tmux kill-session -t 0
# OR
$ tmux kill-session -t <session_name>
# OR
$ tmux kill-session -a # 全部
# 刪除 tmux server
$ tmux kill-server
# 重新命名 session
$ tmux rename-session -t 0 <new_session_name>
# 快捷鍵/視窗管理
# C-b ? Help
# C-b s 秀出目前所有session
# C-b c 新增視窗
# C-b, 視窗命名
# C-b w 視窗列表
# C-b f 尋找視窗
# C-b & 刪除視窗
# C-b % 垂直分割區塊
# C-b “ 水平分割區塊
# C-b <方向鍵>
# C-b p 上一個視窗
# C-b n 下一個視窗
# C-b <number> 依照編號直接切換(編號顯示於狀態列)
# C-b d 離開 session
# C-b x 關閉 Pane
# C-d 關閉 Pane
# C-b z 讓一個 Pane 變成全螢幕,在輸入一次則回到剛剛的尺寸