# 實用技巧-tmux ###### tags: `tmux` `linux學習筆記` ## 前言 在學習DL這些技術的時候,訓練模型常常會用到實驗室的遠端設備,像筆者的實驗室中就有幾顆V100或GTX3080可以使用 在一次使用中,如果遇到頁面登出、斷線等問題,再登入回去就沒有程式的一些提示訊息跳出(該terminal已經被關掉了),但其實該支程式依然在背景執行,為了避免這樣的問題,故有此篇的誕生 *此篇內容參考[tmux 快速入門筆記](https://andyyou.github.io/2017/11/27/tmux-notes/)感謝該作者的貢獻* ## 關於tmux ### 甚麼是tmux tmux是一個terminal multiplexer,概念上的意思就是在一個終端機(一個console)下開啟多個視窗或是分割視窗區塊(在tmux中會有視窗(window)和視窗區塊(pane)),每個pane會各自獨立執行一個terminal instance(各自輸入輸出的介面)讓我們可以同時使用多個指令,而無須開啟多個終端機視窗。 tmux會在同一個session(連線狀態下的執行環境)保存這些視窗和視窗區塊。*我們可以在任何時間離開這個連線(這被稱作detaching)*。 而tmux會繼續維持這個session,直到把tmux server砍掉或是重開機,且重點是*我們可以隨時重新回到(attaching)上次離開session的狀態*。 * 原本我們打開一個terminal和機器建立一個session,當我們關閉視窗時此session就會關閉,我們剛下的指令就會被終止,使用tmux意味著我們通過tmux server和機器建立session,我們的操作視窗或視窗區塊則是和tmux server溝通。 * seesion概略的說,指的是終端機和主機間建立的一個連線。 當我們ssh斷線時,其實對於tmux來說只是和tmux server中斷,tmux server會在伺服器端背景繼續執行並保存剛剛的session。要繼續回到剛剛的session只要重新ssh連線回去並在和session連線(attach)即可。 總結來說,tmux的最基本兩大功能就是視窗管理和session管理,它的核心概念就像是一個更輕易使用且強大的螢幕替代工具。 ## tmux的實戰 ### tmux的安裝 大部分OS中,安裝tmux都相當簡單。 以Ubuntu為例,只需要一行指令: ``` sudo apt-get install tmux ``` 即可完成安裝 ### 建立新的session 當我們要建立一個session時,只要輸入tmux即可 ``` tmux ``` 這個指令會建立一個新的tmux session,你會看到下面多了一條綠色的狀態列。狀態列是tmux很重要的一個部分。 除了顯示當前的視窗(在左邊)它同時也會顯示一些關於系統的資訊像是時間(在右邊)。當然狀態列也是可以客製化的,像是顯示行事曆、電量等等 (筆者OS:真的就是另一個桌面...) ### 分割視窗區塊(Panes) 現在我們已經建立了第一個session,當我們建立session的時候,tmux預設會開啟一個視窗包含一個單一的視窗區塊。 當我們執行tmux指令時,我們需要先輸入一個前置鍵,tmux的預設是Ctrl+b。 接著要分割區塊使用的指令是Ctrl+b %,這個指令會幫我們把當前畫面切割成垂直左右的兩個視窗區塊。 如果要水平切割則是Ctrl+b "。 * Note: C- 指的是Ctrl+某個鍵一起按,M- 則是Alt或Option和某個鍵一起按。 ### 切換操作的視窗區塊 現在我們的操作會被侷限在剛剛新建立的視窗區塊中。但如果想想回到左邊的那個,這時候可以使用Ctrl+b搭配方向鍵即可。 (但筆者自己在aiForge上使用此指令無法生效) ### 關閉視窗區塊 使用Ctrl+d即可 (補充:想要關閉分割視窗區塊則可使用Ctrl+b x) ### 建立視窗 tmux的視窗類似於Linux中建立一個虛擬桌面,如:KDE,Gnome等 常用的操作指令有: * Ctrl+b c 建立一個新視窗 * Ctrl+b p 上一個視窗 * Ctrl+b n 下一個視窗 * Ctrl+b \<number> 依照編號直接切換 ### Session管理 如果已經完成了工作,要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還有更多神奇的功能,可以參考[此篇](https://www.jianshu.com/p/24a9d8563e1c) ## 為什麼使用tmux? 一些優點: * session的處理:attach和detach協助我們在不同情境和遠端連線的情況下切換,保留session * 跨平台:我們可以在Mac底下也可以在linux底下使用,甚至遠端伺服器或Raspberry Pi, BeagleBones等等都可以使用一樣的東西。 * 客製化:可以自訂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 變成全螢幕,在輸入一次則回到剛剛的尺寸 ```
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.