簡介html
在 Linux 操做環境下,終端操做是發揮 Linux 強大命令功能的重要途徑,但在本地主機操做中,針對不一樣任務開啓不一樣的終端,在使用時進行頻繁的終端切換在某些場合下是一種令人分心和疲憊的操做,而經過遠程登陸使用遠端服務器的功能時, ssh 等遠程登陸服務提供的單一終端時常不能知足正常的使用需求,並且單一終端上執行的任務也會受到 ssh 鏈接斷開等意外情況的影響,如因爲遠程登陸斷開使得終端上執行的任務也直接中止等。本文主要記錄一種 Linux 平臺下進行終端複用的工具 tmux,其能夠在單一的終端上實現多任務管理,經過簡單的操做進行任務之間的切換,且任務的執行不受終端退出等意外狀況的影響。linux
在 tmux 環境下,用戶主要經過會話( session )來管理多個不一樣任務的終端界面控制,其中,每一個會話能夠擁有多個窗口( window )用於相關任務的顯示,每一個窗口則能夠進一步被劃分爲多個面板( pane )每個面板爲一個獨立的僞終端,從而在單一的終端命令中實現終端複用,即便當前終端退出登陸,只要會話不被註銷,會話中相關的任務就會繼續獲得執行。git
本文主要記錄在常規使用過程當中經常使用的 tmux 功能按鍵和操做,以供備忘和參考。github
(另注:通常在服務器環境下,經過源碼編譯安裝 tmux 的過程是比較繁瑣的,故而在服務器端想要使用這樣的工具並不容易,更好的選擇是通常的 linux 服務器會提供的 screen 命令,其簡單用法可見筆者的另外一篇博文。) shell
tmux 安裝bash
在具有 root 或 sudo 權限的我的機器上,用戶可經過系統自帶的包管理工具安裝 tmux ,如 Ubuntu 環境下可經過 apt 安裝。服務器
sudo apt install tmux //Ubuntu 環境下經過 apt 安裝 tmux
在不具有 root 權限的遠端服務器上,通常經過源碼編譯的方式將用戶所需的應用程序、so庫等放置在用戶的主目錄下,在編譯時須要經過編譯指令指定編譯所需的頭文件、so庫文件的存放位置。同時,在使用源碼編譯時,用戶須要自行解決不一樣軟件之間的依賴關係,只有將某一程序所需的全部依賴程序均安裝成功後,最後才能順利安裝該軟件。關於源碼安裝的簡單原理能夠參考筆者的記錄在遠程登錄的主機上經過命令行源碼編譯安裝 GNU M四、autoconf、automake 等程序.網絡
基本按鍵session
在原始的 shell 環境下,通常經過 tmux [ action ][ args ] 的命令行方式啓動和使用 tmux。而在 tmux 的( 會話 )界面中,其主要的功能均經過 <prefix> + 功能鍵 的按鍵操做來實現,從而避免與其餘系統按鍵之間的衝突,默認條件下,tmux 設置的 <prefix> 爲 Ctrl + b,即用戶在使用 tmux 時,可先按 Ctrl + b ,再按對應功能鍵使用對應的功能。ssh
tmux [ action ][ args ] //原始終端中啓動和使用 tmux <prefix> 功能鍵 //經過 <prefix> 功能鍵 的按鍵操做使用 tmux 的功能,tmux 默認 prefix 爲 Ctrl + b
下文關於會話中功能鍵的介紹記錄的是用戶在已經按下 <prefix> 鍵後,使用不一樣功能所需進一步按下的功能鍵。
會話管理
經過 ssh 遠程登陸至遠端服務器或打開本地命令行終端時, 可供用戶使用的操做工具僅爲單一的終端窗口。tmux 使用會話( session )的概念在單一終端窗口上實現終端複用,每一個終端與一個會話對應,用戶可在不一樣會話中管理不一樣的任務,不一樣會話之間相互不產生干擾。用戶可自由的進行會話的建立和銷燬,進入( attach )和脫離( detach )會話等操做。
建立會話
用戶經過 tmux 命令建立一個新的會話。不指定參數時,tmux 建立一個擁有單一窗口(名爲 bash )的默認會話(名爲 1 )。此時即已進入 tmux 建立的會話中,屏幕的左下角標記當前所處的會話和窗口名。
tmux [ new -s session_name -n window_name ] //建立並進入一個名爲 session_name 的會話,其擁有一個名爲 window_name 的窗口
例:用戶可經過如下命令建立一個名爲 yh 的會話,其擁有一個名爲 yh 的窗口,在 tmux 建立的會話環境下,屏幕的左下角提示當前的會話和窗口信息,* 表示當前所在的窗口。
離開會話
在 tmux 提供的會話環境下,用戶可經過 <prefix> + d 脫離 tmux 的會話,回到原始的 shell 終端界面。上述離開過程稱爲 detach ,對應的會話實際上一直在後臺運行,而不受其餘操做( 如遠程登陸斷開 )的影響。
d //在 tmux 會話中,經過 <prefix> + d 返回原始 shell 終端
或者直接在當前會話提供的終端中輸入 tmux detach
tmux detach //退出當前的會話
查詢會話
用戶可經過經過輸入命令 tmux ls 查詢目前存在的會話。
tmux ls //顯示當前存在的全部會話
進入會話
當用戶離開( detach )某個會話後,該會話實際在後臺運行而不是被註銷,可經過 tmux attach 命令從新進入某個會話。在不指定 -t 參數時,默認進入的是用戶最近離開的會話。
tmux attach [ -t session_name ] //進入一個名爲 session_name 的會話中,命令中可以使用 attach、at 或 a
註銷會話
可經過命令行方式即 tmux kill-session 命令刪除某個會話。可經過 kill-server 命令刪除全部的會話。上述命令在 tmux 會話或原始終端中均有效。
tmux kill-session -t session-name //刪除名爲 session-name 的會話 tmux kill-server //刪除全部的會話
基本原理
在 tmux 實現中,會話實際由 tmux 客戶端( client )顯示在屏幕上,而全部的會話均由一個惟一的 tmux 服務器( server )進行管理,當用戶創建第一個 tmux 會話時,tmux server 即啓動,而當全部的會話都被註銷時,tmux server 則自動中止,從而退出 tmux。tmux client 和 server 均爲獨立的進程,它們之間經過一個位於 /tmp 目錄下的 socket 進行交互。當用戶從原始的終端經過 tmux 命令建立一個會話或從新 attach 一個會話時,tmux 即在當前終端下創建一個 tmux client,用於顯示進入的 tmux 會話,當用戶在 tmux 中進行會話切換時,實際是將當前的 tmux client 從新 attach 到新的會話中( 從而顯示新的會話 ),而當用戶選擇 detach 當前會話時,實際是取消 tmux client 與當前會話的綁定( 從而再也不顯示該會話 ),不管是上述哪種狀況,實際上只是 tmux client 再也不顯示某一個會話,而不是關閉會話,會話仍會在後臺運行,由 tmux server 進行管理。當從 tmux 退出至原始的終端時,該終端下創建的 tmux client 即自動退出。
窗口管理
進入 tmux 的會話後,用戶實際處於當前會話的一個窗口中,一個會話( session )能夠擁有多個窗口( window ),一個窗口則能夠進一步被劃分爲更小的面板( pane ).用戶可在窗口下直接進行會話管理,窗口管理以及對窗口的進一步劃分等操做。在 tmux 窗口下的各類功能通常經過 <prefix> + 功能鍵 的按鍵操做方式使用。
會話管理
用戶可在 tmux 提供的界面中經過 < prefix > + 功能鍵 的方式進行會話切換,退出會話從而返回原始的 shell 終端等操做。
d //退出當前會話 s //列出全部會話,經過 j 和 k ( ↑ 和 ↓ )進行上下選擇,經過回車肯定切換至該會話 D //選擇一個會話來 ( //切換 attached client 至前一個 session ) //切換 attached client 至後一個 session $ //重命名當前會話
窗口管理
每一個會話可擁有多個不一樣的窗口,用戶可經過 tmux 進行窗口的建立、銷燬和切換等操做。
c //新建一個窗口 & //刪除當前窗口,會提示經過 y/n 進行確認 n //切換至下一窗口 p //切換至前一窗口 0-9 //切換至數字索引對應的窗口
, //重命名當前窗口
面板管理
在 tmux 提供的會話窗口中,每個窗口能夠被進一步被劃分爲不一樣的面板,每一面板爲一個獨立的僞終端,可進行獨立的操做。進行操做的快捷鍵一樣爲 < prefix > + 功能鍵。
" //將當前窗口(面板)劃分爲上下兩部分 % //將當前窗口(面板)劃分爲左右兩部分 x //關閉當前的面板 ! //將當前窗口(面板)單獨做爲一個窗口獨立顯示出來 o //在當前窗口的不一樣面板間進行切換 Ctrl + o //逆時針旋轉當前的面板佈局,即不一樣的面板逆時針切換至其逆時針相鄰的面板的位置 Ctrl + ↑/↓/←/→ //調整當前面板的大小,每次大小改變1個 cell Alt + ↑/↓/←/→ //調整當前面板的大小,每次大小改變5個 cell
命令操做
在 tmux 中,也能夠經過命令的方式進行會話、窗口和麪板的管理。用戶可經過 < prefix > + : 調出 tmux 的指令提示符,進而能夠直接使用 tmux 支持的命令進行管理。
: //經過 < prefix > + : 調出 tmux 命令提示符,用戶可在其中執行 tmux 支持的指令
下面介紹一些簡單的 tmux 支持的命令,更多的命令用戶可經過 man tmux 查看 tmux 的使用說明。
new [ -s session_name ] //新建一個會話,可經過 -s 指定會話名,完整命令名爲 new-session attach [ -t session_name ] //將當前的 client 與指定的 session 綁定,從而顯示新會話的內容,完整命令名爲 attach-session detach [ -s target_session ][ -t target_client ] //將與 -s 指定的session 綁定的 tmux client 解除綁定,或將 -t 指定的終端解除與會話的綁定,完整的命令名爲 detach-client kill-session [ -t session_name ] //結束某個會話( session ) list-clients //顯示當前全部的 tmux client list-sessions //顯示全部 tmux server 管理的會話( session )
實際上 tmux 提供強大的拓展功能,這裏僅記錄最基本的終端複用時的經常使用操做,更炫酷的效果是使用 tmux 實現將單一終端佈局爲相似集成開發環境的效果,有意者能夠參考本文的參考資料和網絡資料。
參考資料:
Tmux 說明文檔: man tmux
Tmux 快捷鍵 & 速查表:https://gist.github.com/ryerh/14b7c24dfd623ef8edc7
Tmux 速成教程:技巧和調整:https://linux.cn/article-5666-1.html
Tmux使用手冊:http://louiszhai.github.io/2017/09/30/tmux/
Linux下終端利器tmux:http://kumu-linux.github.io/blog/2013/08/06/tmux/
tmux 指南:https://wdxtub.com/2016/03/30/tmux-guide/
優雅地使用命令行:Tmux 終端複用:https://harttle.land/2015/11/06/tmux-startup.html