ssh的最佳伴侶-tmux

tmux可以干什么

  • ssh遠程到服務器后蔚约,執(zhí)行一個費時的操作吃媒,斷開ssh后任務可以繼續(xù)執(zhí)行,不會中斷
  • ssh到遠程服務器爹袁,可以分屏远荠,可以多任務,可以多窗口
tmux

tmux是什么

一般我們遠程在服務其上工作都是通過遠程連接軟件進行操作失息,比如使用item2或者xshell之類的終端工具通過ssh來進行遠程連接譬淳。如果需要進行一個比較耗時的操作档址,比如打包運行JavaWeb應用或者處理大文件,一般情況下我們希望可以在下班的時候進行邻梆,然后第二天上班就可以直接看到結果守伸,這樣可以合理的分配自己的工作時間。但是令人尷尬的是浦妄,正常通過ssh啟動的進程都是ssh進程的子進程含友,如果ssh斷開,ssh進程就會被系統(tǒng)kill校辩,與此同時所有通過ssh啟動的進程也都會被killed窘问。這個時候,正常情況下我們會選擇使用nohup等命令來讓其后臺運行宜咒,切斷和ssh進程的聯(lián)系惠赫。但是這樣做也有很多不便之處,比如多命令運行故黑,合理管控儿咱,工作環(huán)境恢復等等。這個時候就不得不提screen或者tmux等工具了场晶。tmux可以看作是screen的升級版本混埠,可以幫助我們后臺運行任務,同時通過其回話诗轻,創(chuàng)建钳宪,分屏等功能,我們可以在ssh中完成更復雜的工作扳炬。即使工作過程中不慎斷開連接吏颖,也可以在重新連接ssh后直接恢復回話,原來運行和打開的程序也都在正常運行恨樟,十分方便半醉。

tmux是一個linux下面的工具,在使用之前需要安裝劝术,就像安裝linux下的其他工具一樣方便缩多。首先我們通過ssh遠程連接登入linux機器,我們將此時的環(huán)境稱為終端環(huán)境养晋。如果這個機器上并沒有安裝tmux衬吆,我們需要安裝。例如在Cent OS上是yum install tmux匙握,完成之后我們就可以使用tmux命令了咆槽。tmux中有3種概念,會話圈纺,窗口(window)秦忿,窗格(pane)麦射。會話有點像是tmux的服務,在后端運行灯谣,我們可以通過tmux命令創(chuàng)建這種服務潜秋,并且可以通過tmux命令查看,附加到后端運行的會話中胎许。一個會話可以包含多個窗口峻呛,一個窗口可以被分割成多個窗格(pane)。首先我們來看一下tmux的會話辜窑。

tmux的會話

1. tmux new -s session1 新建會話

使用 tmux new -s 命令新建一個會話 -s (其實是session的頭字母)钩述。后面指定會話名即可。運行之后會從shell的終端環(huán)境進入到會話環(huán)境中穆碎,并停留在剛才新建的會話中牙勘。例如:

session

可以看到進入session之后的顯示,在下面有一條綠色的狀態(tài)指示欄所禀,左邊顯示的是當前會話的名字方面,緊接著是會話中的窗口(window)序號以及窗口名字。關于窗口的概念我們后面再說色徘,窗口名字后面有一個星號*表示是我們操作的當前窗口恭金,一個會話中可以有多個窗口。當進入一個會話之后褂策,會自動創(chuàng)建一個窗口横腿。如上圖所示,上面的環(huán)境在本章中稱為會話環(huán)境辙培。這樣我們就已經開始了tmux的使用蔑水,如果此時關閉掉終端,下次在進入扬蕊,該會話仍然在運行工。也就是說我們在剛剛進入的會話環(huán)境中使用wget下載一個超大的文件丹擎,或者是編譯一個非常耗時的項目尾抑,我們關閉掉該終端,下次再進入蒂培,這個會話依然存在再愈,會話里面運行的編譯命令或者wget下載命令仍然在運行,并不會因終端的關閉而終止护戳,這正是我們需要的功能翎冲。

2. ctrl+b d 退出會話,回到shell的終端環(huán)境

我們剛才是通過 tmux new -s 命令創(chuàng)建一個tmux會話并進入該會話的媳荒,如果要退出這個會話環(huán)境回到終端環(huán)境(會話里面的程序不會退出在后臺保持繼續(xù)運行)抗悍。應該如何操作呢驹饺,例如上圖,當前我們在tmux的會話環(huán)境中缴渊,使用一個快捷鍵 ctrl+b d (按ctrl+b 之后再按一個字母d即可赏壹,字母d是detach的縮寫)。操作之后的結果如下:

detach

可以看到綠色的狀態(tài)欄消失了衔沼,而頂部出現一個[detached]蝌借,表示已經脫離tmux會話,現在已經不在tmux的會話環(huán)境中回到shell終端環(huán)境中了指蚁。

這里有必要說一下在tmux會話環(huán)境中菩佑,我們經常會用到tmux的組合鍵,一般的組合鍵中都會加一個前綴也就是 ctrl+b 另外凝化,在后面的描述中擎鸠,我們說的終端環(huán)境是指使用終端軟件進入遠程linux之后但是沒有進入tmux的會話環(huán)境的狀態(tài)。

通過上面的操作 ctrl+b d 之后缘圈,回到終端環(huán)境劣光,實際上現在tmux的會話還在后臺運行,如何查看呢糟把。

3. tmux ls 終端環(huán)境查看會話列表

在終端環(huán)境中绢涡,我們可以通過tmux ls 命令來查看后臺運行中的tmux的會話列表,例如:

tmuxls

可以看到在列出的列表中遣疯,只有1行雄可,說明只有一個session,其中左邊的session1表示該session的名字缠犀,中間2 windows說明該session1會話中有2個window数苫,右邊表示該會話創(chuàng)建的時間。如果該機器中有多個tmux會話在后臺運行辨液,那么這里會列出多行虐急。因為tmux會話在后臺運行,我們猜測實際上肯定是有tmux的進程在后臺運行來維持這些會話滔迈。我們可以ps看一下:

pstmux

可以看到我們之前創(chuàng)建會話的命令還在后端運行止吁。

4. ctrl+b s 會話環(huán)境查看會話列表

上面的命令中我們已經退出了tmux的會話環(huán)境,在終端環(huán)境中通過tmux ls 來列出當前l(fā)inux機器后臺運行的tmux會話列表燎悍。那么假設我們當前環(huán)境已經在tmux的會話環(huán)境中敬惦,我們如何得到當前tmux的會話列表呢,如果每次都要退出當前會話谈山,先回到shell終端環(huán)境再運行tmux ls 來查看就很不方便俄删,那么在tmux的會話環(huán)境中,我們可以通過 ctrl+b s 來獲取當前l(fā)inux機器上tmux所有的后臺會話列表,例如操作之后顯示如下:

sessionls

此時可以通過方向鍵選擇會話并回車畴椰,在會話間進行切換臊诊。

5. tmux a -t session1 從終端環(huán)境進入會話

如果在終端環(huán)境中運行 tmux ls 查看有tmux會話正在后臺運行,如何進入到該正在后臺中運行的會話呢迅矛,通過運行 tmux a -t session1 即可進入到該已存在的會話 session1 中妨猩。其中a字母是attach的頭字母,表示附加秽褒,-t 指定要進入已存在的會話名壶硅,如果不存在則會報告 session not found 錯誤。

6. tmux kill-session -t session1 銷毀會話

我們可以在終端環(huán)境和會話環(huán)境中銷毀會話销斟,例如在終端環(huán)境中運行 tmux kill-session -t session1 結束名字為session1的tmux會話庐椒。

在會話環(huán)境中運行 ctrl+b :(注意按組合鍵之后再按一個冒號鍵),狀態(tài)欄變成黃色之后提示我們可以在會話環(huán)境中輸入命令蚂踊,此時輸入 kill-session -t session1 回車即可约谈。其中session1是要銷毀的會話名。

會話銷毀之后犁钟,在終端環(huán)境中運行tmux ls 或者在會話環(huán)境中運行 ctrl+b s 則被銷毀的會話不會再出現在會話列表中棱诱。

7. tmux rename -t old_session_name new_session_name 重命名會話

我們可以在終端環(huán)境中將會話重命名,如上面的命令涝动,重命名之后通過 tmux ls 命令在終端環(huán)境中看到的列表中會顯示會話的新名稱迈勋。

8. ctrl + b $ 重命名會話 (在會話環(huán)境中)

在會話環(huán)境中,我們可以通過前綴命令加上 $的組合來重命名當前打開的會話的名字

tmux的window

一個tmux的會話中可以有多個窗口(window)醋粟,每個窗口又可以分割成多個pane(窗格)靡菇。我們工作的最小單位其實是窗格。默認情況下在一個window中米愿,只有一個大窗格厦凤,占滿整個窗口區(qū)域。我們在這個區(qū)域工作育苟。

本節(jié)我們講解一下tmux窗口的相關操作较鼓,后面我們再說一下關于窗格(pane)的相關知識。首先在新創(chuàng)建的一個會話里面是會默認創(chuàng)建一個窗口的宙搬。正如我們上面提到過的圖一樣笨腥,如下所示:

session

新創(chuàng)建的會話中會默認創(chuàng)建一個窗口,該窗口名字一般是登陸終端的用戶名@主機名勇垛,我們可以通過 crtl+b ,(組合鍵之后按一個逗號)來修改當前窗口的名字,如上圖所示的窗口名字myserver1就是修改之后的名字士鸥。該名字后面有一個*號闲孤,表示該窗口是活動窗口(鍵盤輸入會輸入到該窗口中)

1. 創(chuàng)建window

可以在當前會話窗口中創(chuàng)建多個窗口,例如 ctrl+b c 創(chuàng)建之后會多出一個窗口如下圖所示:

create_window

默認情況下創(chuàng)建出來的窗口由【窗口序號+窗口名字】組成,窗口名字可以由上面提到的方法修改讼积,可以看到新創(chuàng)建的窗口后面有*號肥照,表示是當前窗口。

2. 切換window

在同一個會話的多個窗口之間可以通過如下快捷鍵進行切換:

ctrl+b p (previous的首字母) 切換到上一個window勤众。

ctrl+b n (next的首字母) 切換到下一個window舆绎。

ctrl+b 0 切換到0號window,依次類推们颜,可換成任意窗口序號

ctrl+b w (windows的首字母) 列出當前session所有window吕朵,通過上、下鍵切換窗口

ctrl+b l (字母L的小寫)相鄰的window切換

3. ctrl+b &關閉window

ctrl+b & 關閉當前window窥突,會給出提示是否關閉當前窗口努溃,按下y確認即可。當然阻问,如果當前窗口的最后一個程序被exit掉后梧税,窗口也會直接關閉。

tmux的pane

tmux的一個窗口可以被分成多個pane(窗格)称近,可以做出分屏的效果第队。

1. ctrl+b % 垂直分屏(組合鍵之后按一個百分號),用一條垂線把當前窗口分成左右兩屏刨秆。

pane_v

2. ctrl+b " 水平分屏(組合鍵之后按一個雙引號)凳谦,用一條水平線把當前窗口分成上下兩屏。

pane_h

分屏之后光標停留在哪個pane上坛善,表示該pane是活動的晾蜘,另外一般情況下當前pane會被綠色的線條圍起來。一般分屏之后當前窗口名字會重置為默認窗口名字眠屎。通過多次分屏操作剔交,我們可以得到各種樣子的分屏效果,例如下圖顯示的是一次垂直分屏之后改衩,在右邊pane中再次水平分屏的效果:

pane_multi

可以看到右下角的分屏是綠色框岖常,說明是當前活動pane

3. 切換pane

ctrl+b o 依次切換當前窗口下的各個pane。

ctrl+b Up|Down|Left|Right根據按箭方向選擇切換到某個pane葫督。

ctrl+b Space (空格鍵) 對當前窗口下的所有pane重新排列布局竭鞍,每按一次,換一種樣式橄镜。

ctrl+b z 最大化當前pane偎快。再按一次后恢復。

4. 關閉pane

ctrl+b x 關閉當前使用中的pane洽胶,操作之后會給出是否關閉的提示晒夹,按y確認即關閉。

tmux window中的歷史輸出查看

在tmux里面,因為每個窗口(tmux window)的歷史內容已經被tmux接管了丐怯,當我們在每個tmux的window之間進行來回切換喷好,來回操作,那么我們沒有辦法看到一個window里面屏幕上的歷史輸出读跷。沒辦法使用鼠標滾動查看之前的內容梗搅,在終端中通過鼠標滾動看到的輸出一定是各個tmux的window的輸出混亂夾雜在一起的,如果要看當前窗口的歷史內容效览,那么應該怎么辦呢无切,通過在當前tmux的window 按 ctrl-b 進入copy mode(可以理解為vim的普通模式),然后就可以用PgUp/PgDn來瀏覽歷史輸出了钦铺,按q退出订雾。

總結

tmux中的最重要的三個概念會話,窗口矛洞,pane的使用方法已經介紹完畢洼哎,其實這是我們操作tmux的最常用功能,如果掌握好沼本,足以應付大多數工作噩峦。另外tmux還有一些高級用法,例如可以個性化的配置其組合鍵(官方默認的ctrl+b組合鍵按起來不太方便可以修改抽兆,UI設置识补,鼠標支持,復制粘貼等)辫红,但是我覺得這些高級功能基本不太用的到凭涂。如有需要大家可以自行查閱相關資料。

常見問題

  1. tmux的自定義配置

tmux可以通過自定義配置文件來覆蓋默認配置贴妻,從從而更改tmux的默認行為切油,配置文件通常為~/.tmux.conf

添加如下兩行名惩,就可以使其支持utf8編碼澎胡,同時開啟vi默認的快捷鍵。詳細vi默認下的快捷鍵可以參考文章:【使用 vi 模式操作tmux 屏幕】

set-window-option -g mode-keys vi #可以設置為vi或emacs
set-window-option -g utf8 on #開啟窗口的UTF-8支持

通過自定義配置娩鹉,你可以更改很多東西攻谁,比如默認的Crtl-b,可以更改為自己感覺更為順手的快捷鍵弯予。比如戚宦,我會設置為:crtl-c,因為vim用習慣了锈嫩,這樣更順手阁苞。

  1. vim配色在tmux中顯示異常

這個問題應該是vimer肯定會遇到的問題了困檩,目前我按照網絡上的教程并未解決我的問題祠挫,后續(xù)解決后會來更新那槽。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市等舔,隨后出現的幾起案子骚灸,更是在濱河造成了極大的恐慌,老刑警劉巖慌植,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甚牲,死亡現場離奇詭異,居然都是意外死亡蝶柿,警方通過查閱死者的電腦和手機丈钙,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來交汤,“玉大人雏赦,你說我怎么就攤上這事≤皆” “怎么了星岗?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長戒洼。 經常有香客問我俏橘,道長,這世上最難降的妖魔是什么圈浇? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任寥掐,我火速辦了婚禮,結果婚禮上磷蜀,老公的妹妹穿的比我還像新娘召耘。我一直安慰自己,他們只是感情好蠕搜,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布怎茫。 她就那樣靜靜地躺著,像睡著了一般妓灌。 火紅的嫁衣襯著肌膚如雪轨蛤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天虫埂,我揣著相機與錄音祥山,去河邊找鬼。 笑死掉伏,一個胖子當著我的面吹牛缝呕,可吹牛的內容都是我干的澳窑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼供常,長吁一口氣:“原來是場噩夢啊……” “哼摊聋!你這毒婦竟也來了?” 一聲冷哼從身側響起栈暇,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤麻裁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后源祈,有當地人在樹林里發(fā)現了一具尸體煎源,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年香缺,在試婚紗的時候發(fā)現自己被綠了手销。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡图张,死狀恐怖锋拖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情埂淮,我是刑警寧澤姑隅,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站倔撞,受9級特大地震影響讲仰,放射性物質發(fā)生泄漏。R本人自食惡果不足惜痪蝇,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一鄙陡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躏啰,春花似錦趁矾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帝际,卻和暖如春蔓同,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹲诀。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工斑粱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脯爪。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓则北,卻偏偏與公主長得像矿微,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尚揣,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • Tmux: Terminal Multiplexer tmux 是什么 tmux 是一個終端復用器(termina...
    mlya閱讀 1,091評論 0 0
  • 資料:https://www.cnblogs.com/wangqiguo/p/8905081.html sudo ...
    只知堅持_d778閱讀 3,097評論 0 0
  • 在 Ubuntu 中安裝Tmux: 在終端輸入如下命令: sudo apt-getinstall tmux Tmu...
    MiracleJQ閱讀 3,358評論 0 1
  • 上面提到服務器的任務不間斷運行涌矢,就是利用了tmux的特性。就是說惑艇,一般ssh是斷開就會停止所有之前連接ssh期間運...
    Solomon_Xie閱讀 3,155評論 0 10
  • 使用 tmux new -s 命令新建一個會話 -s (其實是session的頭字母)蒿辙。后面指定會話名即可。運行之...
    原來是醬紫呀閱讀 393評論 0 0