宅吉便


你終究會用tmux的,那為何不一開始就學 (基礎篇)

Linux tmux

Tmux,光是聽名子就感覺很難了,平常各種終端機軟體用得好好的,為什麼還要再多學一個東西增加自己負擔?
相信我,不論你再怎麼逃避,即便你不去找它,它也有一天會來找你。
既然如此,為何不一開始就學?

或許你已經聽過Screen,對,他跟tmux基本上是一樣的東西,不過量級差太多了,關於他們的比較,詳情可以參考superuser的文章

很多人或許使用過tmux,但是對於它的印象就是那個可以把程式run在server上,然後螢幕關掉程式還可以繼續跑的工具。說真的,如果你只要這樣的需求,內建的Screen就可以辦到了,不用特地安裝tmux來做這一件事。

關於tmux的教學文網路上已經滿多了,所以這系列我會比較著重在使用情境,還有我個人使用經驗上去做分享。

廢話不多說,馬上進入正題!


以下節錄我跟我幻想朋友的對話:

小白:「為什麼我要用tmux?我 iTerm用的好好的啊!」
我:「如果你連到遠端伺服器的話,程式跑到一半斷線,tmux可以救你一命~」
小白:「好,那我在自己電腦上跑程式的話,就不需要tmux了吧?」
我:「iTerm如果當掉的話,tmux可以救你一命~」
小白:「喔喔好啊,那如果我電腦爆炸了,tmux還有辦法救我一命嗎?」
我:「沒有辦法,但是電腦爆炸了誰都救不了你...」

由以上對話,我們可以看出,小白,是一個很負面的人。
不是!是tmux有很多好處,比如說:

要跑一隻很會跑很久的程式,但又趕著下班

打開tmux,把程式跑在裡面,打包走人!

同事請假了了,但是需要他輸入密碼

開個tmux請他連進來,請他自己輸入密碼,方便又安全!

在不安裝Teamviewer的情況之下,連入同事的電腦

同事可以不必告訴你他的電腦密碼,也可以全程觀看你操作的指令!

去Stuidio A裝B

idiot-fin


安裝

tmux3.0a 在2019年12月已經正式釋出,有更多功能以及bug修正,還沒裝的快來裝,已經裝過的趕快升級升一波。

OS X

brew install tmux

Linux

由於透過 apt-get 安裝的方式不會裝到最新版(本文截稿時為2019年12月),這邊提供直接下載原始碼安裝的方式(以Ubuntu為例):

安裝相依套件

sudo apt-get install libevent-dev ncurses-dev

下載並安裝tmux

wget https://github.com/tmux/tmux/releases/download/3.0a/tmux-3.0a.tar.gz
tar xzvf tmux-3.0a.tar.gz
cd tmux-3.0a
./configure && make && sudo make install

基本觀念

C-b?Prefix?bind-key?

如果你在查詢一些相關資料,可能會看到 C-bprefixbind-key 相關字眼,
請記得,這些指的其實只是 CTRL + b 這個組合鍵而已。
在執行任何tmux指令前,一定都是要先打 C-b 就對了。

Server, Session, Window, Pane

四大重要觀念一定要知道,我用使用者桌面瀏覽器分頁的關係來類比,雖然不是非常精確,但是應該比較容易理解。

  • Server

可以把Server想成一個登入的使用者。一台電腦可以有很多的使用者,同一個使用者也可以重複登入同一台電腦,一台電腦上當然也可以開啟多個tmux server

  • Session

開啟一個虛擬桌面,就等同於建立一個session

  • Window

一個session下面可以有很多個window,就像一個桌面下可以開啟很多個瀏覽器。至於可以開幾個window,端看你電腦資源有多少
像我的電腦上隨便開到200多個window不是問題 。

lots windows

  • Pane

一個window下面可以有很多個pane,就很像一個桌面下,你在瀏覽器下面可以很多個分頁。至於究竟可以開幾個pane,端看你的視力有多好

eyetest

簡言之,如果我們把他們用資料夾的層級概念來呈現,它們的關係會像下圖:

└── server1
    └── session1
        ├── window1
        │   ├── pane1
        │   ├── pane2
        │   └── pane3
        └── window2

Detach and Attach

Detach的概念,就很像你把電腦螢幕關上,但沒有關機,你只是人離開而已,所有的東西還是繼續執行或待命中,而Attach則是正好完全相反的意思,也就是你把螢幕打開,要繼續工作了。

我這邊對於粗心者初心者,有一些建議:

鍵盤好朋友

如果今天使用了tmux,所有的動作都可以由鍵盤操作,請忘記滑鼠這件事情。
初學者最常碰到問題之一,就是想用滑鼠把畫面往上捲,卻沒有反應。

你也是金魚腦嗎?

一開始不熟悉的話,開法就是一個session一個window很多個pane,不然一次開太多,一定會記不住。

你是忘了按,還是害怕再按一次?

你是不是有時候覺得在tmux裡面打一些指令「好像沒反應」,你很有可能不小心按到C-b了?常常忘記自己是不是按過 C-b 了嗎?還是怕按太多次 C-b
沒關係,ESC給他多敲幾下就對了。按下ESC就是取消所有正在輸入tmux指令的意思

我家的電腦很乖,一定是tmux帶壞它的

用了tmux以後,電腦愈跑愈慢?
請記得,不再使用的tmux session請記得關閉, 不然最後開了一大堆的tmux session,電腦資源會愈來愈少。
如果不小心開了非常多的session,你可以重開機(何必呢)在該tmux session裡面執行:

C-b tmux kill-server

找指令?cheatsheet!

Github 上有人已經把指令都整理好了,忘記就打開參考吧!
你也可以在tmux session裡面執行以下指令,也可以看到所有tmux指令:

C-b ?

tmux help


常用指令

對,不得不說,要上手tmux的確有點難,但人生更難,反正指令都記了這麼多,那就再記一下吧!

基本操作

建立session(看到下方出現tmux的狀態列,就代表成功)

tmux

列出所有window

tmux ls

detach session(不是關掉,只是離開)

C-b + d

attach session (回到剛剛關掉的session)

tmux attach

刪除所有tmux window

C-b + : + kill-server

關於以上,請參考這張圖

basic

以下是我個人覺得最常用到的指令:

移動

按下 C-b 後,再利用方向鍵選取

C-b + ↑ ↓ ← →

nav1

或是按下 C-b 後,再按下 q ,再按數字鍵來選取

C-b + q + 0/1/2/3/4/5

按下 C-b + q 後,每個pane相對應的數字會短暫出現1秒,要在這段時間內按下數字鍵才有效喔!如果覺得時間太短,可以把它改長一點

nav2

分割

水平分割

C-b + "

垂直分割

C-b + %

split

佈局

分割多個視窗以後,可以透過以下指令佈局(預設只有5個)

Alt + 1/2/3/4/5

split

調整

C-b + ESC + ↑ ↓ ← →

adjust

縮放

把某一個選取的pane放大或縮小

C-b + z

zoom



覺得文章不錯的話,抖內就給它抖起來!