黑屏操做利器,多屏批量shell命令發送

web系統常見的開發流程:linux

平常->預發->線上git

平常上一般只有一臺機器用來集成,全部人的開發分支會在這上面作合併部署。github

當一個應用有不少人在上面開發,並被不少應用依賴時,會有個問題。開發在平常環境UI上測試的成功都依賴這個應用提供的服務,但頻繁的發佈形成短暫中斷會阻塞流程。web

爲了避免讓單點集成機阻塞,考慮設置兩臺平常機器按正式分批發布形式保證平常環境每時每刻必會有一臺機器在提供服務。這樣的解決方式有個問題,原來debug看日誌只須要關心一臺機,登上去就好,如今變成了兩臺機。shell

app-|--> vm No.1 -> log
    \--> vm No.2 -> log

這個問題還會繼續膨脹,若是是單元化應用,單元也會有機器,按照以上方式又要乘2, 那麼就變成了共4臺,看到了嗎?這時就頭痛了,一條UI上測試的點擊,到底會落在哪臺機器呢?微信

app -  |-中心-| --> vm No.1 -> log
       |      \--> vm No.2 -> log
       |-單元-| --> vm No.3 -> log
              \--> vm No.4 -> log

咱們先想個簡單的方式解決這個問題,tmux做爲一款linux的多屏工具,最先見到這款工具仍是在一位用HHKB的哥們那。session

tmux基本概念

如下引用http://cenalulu.github.io/lin... 上的圖:app

clipboard.png

session: 會話,咱們能夠把一組邏輯上上要作的事定義爲一個會話,好比此次會話咱們是要作一個應用的平常開發。工具

window: 窗口,就是咱們屏上看到的控制檯界面,能夠跟iTerm2上同樣,有多個tab頁,實際概念上也能夠直接理解爲tab頁。測試

panel:一個大窗口上,爲了能直接看到多個登陸機器的狀況,能夠切分這個窗口,

clipboard.png

經常使用快捷鍵

ctrl+b, %  垂直切割屏幕(window)
ctrl+b, "  水平切割屏幕(window)

切換窗口

ctrl+b + 窗口號
ctrl+b + n 換到下一個窗口
ctrl+b + p 換到前一個窗口

切換panel

ctrl+b + 上下左右, 移動到想要的panel上

調整panel大小

ctrl+b alt+ 左或右調整垂直panel大小
ctrl+b alt+ 上或下調整水平panel大小

下圖,將右邊的panle調大了
clipboard.png

翻頁

tmux不是一個原生GUI支持的,因此咱們無法用iterm2裏面的鼠標翻頁來進行操做,翻頁操做更像vi裏面的純鍵盤操做。

ctrl+b, [  切換到複製模式。而後用ctrl+b後退,  ctrl+f 前進 來翻頁。

看多機器shell屏幕大招,發送命令到多個panel

ctrl+b, :setw synchronize-panes

這個是今天的重點,前面說過了,若是須要登陸的平常機器擴展到4臺怎麼辦?

想象下,咱們計劃連4臺機,這個能夠用切割window獲得多個panel解決,而咱們的目的是看日誌,這個操做在每臺機是如出一轍的:

cd xxx/xxx/xxx
tail -f xxx.log

那麼有沒有一種方式能把咱們打的命令同步發送到全部的panel(全部登陸的機器上)呢?

固然有,經過設置一個模式解決。

ctrl+b, :setw synchronize-panes

clipboard.png

設置成功後,在一個panel內打字,會同步到全部panel上,以下,我只在一個panel裏面輸入了test。

想解除怎麼辦? 一樣的命令(synchronize-panes)再輸入一次就解除這種模式。

clipboard.png

tmux的一些缺省配置功能能夠配置在文件裏,路徑是:
~/.tmux.conf

share一下我目前在用的:

set-option -g default-shell /bin/zsh
setw -g mode-keys vi
set-option -g default-command "reattach-to-user-namespace -l zsh"
set-window-option -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

# Setup 'v' to begin selection as in Vim
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

# bind a reload key
bind R source-file ~/.tmux.conf ; display-message "Config reloaded.."

本文來自微信公衆號「麥芽麪包,id「darkjune_think」
轉載請註明。
微信掃一掃關注公衆號。
圖片描述

相關文章
相關標籤/搜索