黑屏操做利器,多屏批量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」
转载请注明。
微信扫一扫关注公众号。
图片描述

相关文章
相关标签/搜索