【轉】tmux入門指南

來源:互聯網
上載者:User

標籤:

按照官方說明,tmux是一個終端複用軟體。我接觸tmux也就是這幾天的事情,但已經發現其強大。作為一個文藝程式員,有必要向大家分享一下,這麼好的東東怎敢藏著掖著。

先用起來再說

假設你已經裝好tmux,那麼在終端中直接輸入tmux並斷行符號,就進入了tmux,退出的話大家都懂的,輸入exitC-d即可。進入tmux後你在終端中愛幹嘛就幹嘛,那就有人會問了,在進入tmux之前已經有終端了,那還折騰這個幹啥?別急,tmux的作用在於終端複用,也就是說可以把一個終端變成多個終端。在tmux中按C-b c,你就會看到開啟了一個新視窗,並在其中開啟了一個新的終端。那又有人問了,這有啥用,Linux的終端軟體本身就支援開啟多個標籤頁,還折騰這個幹啥?額,這個問題問得好,如果你只是在本地開多個終端敲一下ls什麼的,貌似確實沒什麼必要。但想想,你如果要通過SSH登入到遠程伺服器,有了tmux,你只需要SSH一次就行了,否則,如果你想要在編輯檔案的同時到shell中執行某個命令,就得開兩個SSH串連,如果你還要同時用資料庫,或者要tail某個記錄檔的話,那就還得再開幾個了,我這前就是這麼乾的。有了tmux,你只需要一個SSH串連,然後開啟tmux,再多敲幾次C-b c就好了。對了,你開了幾個視窗,怎麼在視窗之間切換呢?C-b p是切換到前一個視窗,C-b n是切換到後一個視窗,C-b w是列出所有的視窗隨你選,關閉視窗的快速鍵是C-b &。你一定發現快速鍵中都帶C-b,這是tmux的預設快速鍵首碼,tmux通過這個首碼才知道你感興趣的是她而不是別人。好了,你已經可以使用tmux了,總結一下學到的幾個快速鍵:

C-b c 建立一個新視窗C-b & 關閉當前視窗C-b p 切換到上一個視窗C-b n 切換到下一個視窗

 

會話,視窗,面板

tmux有三個基本概念:會話,視窗和面板。當你輸入tmux後,tmux實際做的事是首先建立一個會話,然後在這個會話中建立一個視窗,這個視窗只包含一個面板,你在其中看到的終端實際上都屬於tmux的某個面板。關於視窗的操作在上一節中已經說明,面板又是什麼呢?有人說了,你一個視窗就佔滿一屏,要看另外一個視窗得切換過去,我想要的是同時看到多個視窗的內容,好了,面板就是幹這個事兒的。當你在某個視窗中按下C-b %時,你會發現視窗被橫向分成兩個面板,而如果按下C-b ",視窗則被縱向分成兩個面板,按C-b o會跳到下個面板,C-b加方向鍵則會在自由選擇各面板,C-b x會關閉當前面板。

一個會話可以包含多個視窗,我們可以用會話來組織視窗,會話相當於一個工作環境,比如我們可以建立一個work的會話,裡面放我們平時開發需要的視窗,tmux預設會建立一個會話,我們也可以通過參數建立指定名稱的會話,例如

tmux new-session -s work

在控制台中輸入這條命令就可以建立一個名為work的會話並進入它,我們也可以同時指定這個會話中第一個視窗的名字,比如mysql:

tmux new-session -s work -n mysql

關於會話有兩個非常重要的操作,即attach和detach,attach就是讓某個會話到前台來運行,而detach則是將某個會話放到後台。通常,當我們開啟tmux時,tmux在建立一個會話的同時也會attach到這個會話,所以我們會立即看到tmux的視窗。在某個會話中,我們按C-b d會detach這個會話,也就會回到原先的終端控制台,但實際上並沒有退出這個會話,比如你可以通過在終端中輸入下列命令重新attach到work會話:

tmux attach -t work

一個時刻可能存在多個會話,在tmux外面通過下列命令可以列出當前有哪些會話:

tmux ls

在tmux裡面可以按下C-b s來列出會話,然後可以選擇一個切換過去。

在我們建立會話的同時也可以加上-d選項以表示不自動attach到這個新會話:

tmux new-session -s work -d

這樣的話你會通過tmux ls看到新建立的work會話,並可以通過tmux attach -t workattach到該會話中。

在控制台上可以通過下列命令關閉會話work:

tmux kill-session -t work

上面的一些以tmux打頭的命令都是tmux提供的外部介面,是在命令列中供我們直接啟動並執行,事實上,除了對會話的操作之外,在外部也可以直接建立視窗,例如:

tmux new-window -n project -t work

這條命令可以針對work會話建立一個名為project的視窗。

在建立會話和視窗時甚至可以指定要執行的命令:

tmux new-session -s work -n dev -d "ssh [email protected]"

以上命令會在建立work會話後,在其第一個視窗的控制台中執行SSH命令以遠端連線到伺服器中。

建立視窗時也與此類似,可將命令寫在最後。

更為強大的是,tmux可以讓你向某個會話[:視窗:面板]發送任意按鍵:

tmux send-keys -t work:editor ‘emacs‘ C-m

上述命令能夠向work會話的editor視窗發送emacs加斷行符號,即在這個視窗中開啟emacs編輯器。

有了tmux的各種強大的外部命令,我們就可以自訂指令碼,自動化很多事情:

tmux new-session -s work -n mysql -d ‘mysql‘tmux new-window -n editor -t worktmux send-keys -t work:editor ‘emacs‘ C-m

將上述命令寫在一個shell指令碼裡,就可以一鍵完成下述功能:建立一個名為work的會話,第一個視窗命名為mysql,並在其中執行mysql命令進入mysql,第二個視窗名為editor,並在其中開啟emacs。

設定檔

除了強大的外部命令之外,tmux也可以通過自己的設定檔來自訂很多東西,在tmux運行時,會讀取/etc/tmux.conf中的配置作為系統層級的配置,然後會在目前使用者的家目錄裡面讀取.tmux.conf這個設定檔,如果都找不到,就用預設配置。一般情況下,我們只需要在我們家目錄裡面建立.tmux.conf這個檔案來進行自訂配置即可。

在設定檔中,我們可以用到tmux提供的很多命令,可以設定很多變數的值或者給tmux配色等,實際上,很多命令既有外部命令列介面,又可以在設定檔中使用,還可以在tmux內部的命令模式中使用(C-b :命令)。比如上節中用指令碼完成的事情同樣也可以用設定檔完成,在設定檔中不用加tmux:

new-session -s work -n mysql -d ‘mysql‘new-window -n editor -t worksend-keys -t work:editor ‘emacs‘ C-m

按鍵同步發送

我一開始用tmux就是為了向多個終端同步發送一些命令,比如用於多台相同環境的機器上的設定檔同步修改和程式發布。其實這在tmux中只需要一條命令就可搞定,比如有兩台機器,首先在一個視窗中開兩個面板,分別連到這兩台機器,然後按C-b :set synchronize-panes即可開/關面板的同步模式,開啟後,在一個面板中輸入的按鍵也會同步發送到另一個面板中,是不是非常容易?

永不斷線

tmux實際上是server/client模式,當建立第一個會話時,server就會運行,以後的會話都以attach/detach的方式被server服務,當所有會話都退出時,server才會退出。在我們工作中,經常是SSH串連到伺服器上去寫代碼,但由於網路的不穩定性,會偶爾發生SSH串連中斷的情況,這樣我們之前的會話就會丟失,如果是一個nohup的背景工作還好,只要我們重新連上去之後,還是可以找到的(但至少需要回到事發現場,比如重新cd到原來的檔案夾等),而如果我們正在寫代碼,還沒來得及儲存,很可能就杯具了(除非某些編輯器剛好把你最新的代碼自動儲存過)。tmux不會存在這個問題,不信,你可以在終端中開啟tmux,然後關閉這個終端,再開啟一個新的終端,輸入tmux ls看看,你會發現之前的會話仍然還在,你需要做的只是attach它就行!那麼我們平常在SSH串連到伺服器上後,再通過tmux去開啟我們的工作會話,不管你在裡面幹什麼,都不用擔心斷線,因為tmux server會幫你儲存你的會話,你隨時可以attach它,而且你的工作現場一直在那,連目錄都不用切換,除非你真的kill掉它。

結對程式設計

結對程式設計是不是很酷?事實上我也沒試過。很簡單,因為它的會話可以被多個client attach,比如A和B兩人分別在家通過SSH串連到伺服器上,然後都attach到同一個會話中,那麼A和B的操作彼此都可以看到,簡直碉堡了!

參考資料

  1. 關於tmux的命令快速鍵,請在tmux中輸入C-b ?

  2. 請在終端中輸入man tmux

  3. 《tmux: Productive Mouse-Free Development》

好了,其實我才接觸幾天,瞭解得也不是很深,其中的一些理解也可能有誤,再加上時間有限,所以錯誤在所難免,以後可能會根據我的領悟去修改完善這篇入門指南。不過我主要是想拋磚引玉,希望大家都能去用用,去共同發掘這塊寶藏。子曾經曰過:神器在手,天下我有!但願tmux能在你的工作中助你一臂之力。

【轉】tmux入門指南

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.