你終究會用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
安裝
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-b
或 prefix
或bind-key
相關字眼,
請記得,這些指的其實只是 CTRL + b
這個組合鍵而已。
在執行任何tmux指令前,一定都是要先打 C-b
就對了。
Server, Session, Window, Pane
四大重要觀念一定要知道,我用使用者、桌面、瀏覽器和分頁的關係來類比,雖然不是非常精確,但是應該比較容易理解。
- Server
可以把Server想成一個登入的使用者。一台電腦可以有很多的使用者,同一個使用者也可以重複登入同一台電腦,一台電腦上當然也可以開啟多個tmux server。
- Session
開啟一個虛擬桌面,就等同於建立一個session。
- Window
一個session下面可以有很多個window,就像一個桌面下可以開啟很多個瀏覽器。至於可以開幾個window,端看你電腦資源有多少。
像我的電腦上隨便開到200多個window不是問題 。
- Pane
一個window下面可以有很多個pane,就很像一個桌面下,你在瀏覽器下面可以很多個分頁。至於究竟可以開幾個pane,端看你的視力有多好。
簡言之,如果我們把他們用資料夾的層級概念來呈現,它們的關係會像下圖:
└── 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的確有點難,但人生更難,反正指令都記了這麼多,那就再記一下吧!
基本操作
建立session(看到下方出現tmux的狀態列,就代表成功)
tmux
列出所有window
tmux ls
detach session(不是關掉,只是離開)
C-b + d
attach session (回到剛剛關掉的session)
tmux attach
刪除所有tmux window
C-b + : + kill-server
關於以上,請參考這張圖
以下是我個人覺得最常用到的指令:
移動
按下 C-b
後,再利用方向鍵選取
C-b + ↑ ↓ ← →
或是按下 C-b
後,再按下 q
,再按數字鍵來選取
C-b + q + 0/1/2/3/4/5
按下
C-b + q
後,每個pane相對應的數字會短暫出現1秒,要在這段時間內按下數字鍵才有效喔!如果覺得時間太短,可以把它改長一點。
分割
水平分割
C-b + "
垂直分割
C-b + %
佈局
分割多個視窗以後,可以透過以下指令佈局(預設只有5個)
Alt + 1/2/3/4/5
調整
C-b + ESC + ↑ ↓ ← →
縮放
把某一個選取的pane放大或縮小
C-b + z