你从未用过如此锋利的命令行操作神器 - tmax

1,595 阅读5分钟

你有要经常操作命令行的需求吗?

你是否觉得有些命令用过好几次,等再次使用的时候提笔忘字,忘了该怎么写?

或者是记得命令中的大部分内容,具但体是什么就记不清了?

亦或是工作中常用的命令特别长,每次输入都会浪费很多时间?你可以说我把常用的命令都配了 alias,那如果换了电脑,这些辛苦配置的 alias 该怎样方便地携带呢?

上面一连串提出了这么多问题,是不是戳中了你内心深处的需求?那么 tmax 来了,为解决上面的痛点而来,带着闪电⚡️般的速度而来,接下来就跟我一起了解下关于 tmax 的内容,相信看完后你就会想试用一下。

tmax 是什么?

tmax 是一个命令行工具,能够帮助你以闪电般⚡️的速度执行命令以提高效率,同时能够在你记不清具体的内容时,快速地给出提示帮助你完成任务。

The design idea of tmax

  • 拥有一个基础 k8s cmd 知识库,可以不断丰富它
  • 高效的查询算法以及流畅的命令行交互
  • 把你常用的的超长命令行变短

tmax 会给你带来什么?

tmax 拥有 3 中交互模式,direct mode、search mode、interactive mode。下面以动图的方式介绍这几种模式的用法以及使用场景。

在使用之前,我们需要执行 tmax generate 生成一份基础的配置文件,文件内容及格式如下:

截屏2021-01-11 20.50.53

custom:
- check: curl 127.0.0.1:8080/health
k8s:
- filternodecpu: kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.capacity.cpu}{'\t'}{.status.capacity.memory}{'\n'}{end}"
- filternodetaint: kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.spec.taints[*].key}{'\n'}{end}"
- corednsedit: kubectl edit cm coredns -nkube-system
- allnode: kubectl get no
- alldeploy: kubectl get deploy
- allpod: kubectl get pod -A
- busyboxrun: kubectl run busybox --rm -ti --image=busybox /bin/sh
- allnodeip: kubectl get node -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.addresses[0].address}{'\n'}{end}"
- podResource: kubectl get pod -o custom-columns=NAME:metadata.name,podIP:status.podIP,hostIp:spec.containers[0].resources
- getns: kubectl get ns
- createdemo: kubectl create deployment nginx --image=nginx
- exposedemo: kubectl expose deployment nginx --port=80
- getnetwork: kubectl get networkpolicy
- runbox: kubectl run busybox --rm -ti --image=busybox /bin/sh
unix:
- "tar": "tar -xjvf test.tar.bz2"

可以看到我们是以 group:[key:value] 的形式存储内容,举个栗子,k8s 就是一个 group,该 group 下拥有很多跟 k8s 相关的命令行,命令行的缩写就是 key, 真正执行的内容就是 value,同理你可以自定义或者新增内容。

direct mode

顾名思义,direct mode 就是直接执行配置文件中的某个 key 所对应的 value 。例如,执行 tmax check 就相当于执行了 curl 127.0.0.1:8080/health,执行 tmax runbox 就相当于执行了 kubectl run busybox --rm -ti --image=busybox /bin/sh ,如果你在日常工作中经常需要启动一些调试的临时容器,tmax 可以大大提高操作的效率。

search mode

很明显,direct mode 是在你对某些命令非常熟悉的情况下使用的,那假如有些命令不是很常用,但是你又记得命令中的某些关键字,这时候使用搜索模式是非常适合的。比如,你记得在配置文件中有个快速运行临时 busybox 容器的命令,但是记不清具体该怎么写或者你想用更快的方式呼出该命令,就可以 tmax s box 回车后使用 ↓ ↑ → ← 或者你是 vim 的死忠也可以用 j k 上下移动来选中想要执行的命令,再次回车即可执行。

当你不想执行该命令,仅用作查询功能也是可以的,tmax 默认配置文件内置了很多常用的 kubectl 命令模板,按照功能划分成 getcreaterunlabel 等,命令模板之间使用 */* 分割,这部分就不能直接回车执行了,仅作为查询使用,当然你可以继续丰富这些模板。

interactive mode

交互模式使用场景主要有以下几个:

  • 当你想要去执行一组动作,或者是比较长时间内会停留在命令行中;

  • 所要执行的命令记不清关键字,要多查询几次;

  • 较频繁的查询动作。

    直接输入 tmax 回车后即可进入交互模式,让我们看一段演示:

交互模式提供很快的查询速度和动态的执行方式,配合 tab 键的补全方式,可以说是闪电般的速度了。

以上就是目前 tmax 具备的三种使用模式,能够满足不同场景的使用。此外,tmax 还提供了 以下功能:

  • tmax regen 重新生成配置文件
  • tmax add group:key:value ,新增命令,example: tmax add k8s:getns:kubectl get ns -A
  • tmax clear 删除配置文件

具体可以执行 tmax --help 查看。

编译与安装

tmax 目前仅在 LinuxMac OS 上测试通过,win 平台应该可以使用,但是没有测试。

  • 编译:在 tmax 工程目录下,执行 make build, 会得到可执行文件 tmax
  • chmod +x tmax && cp tmax /usr/local/bin 即可使用

后续会提供更快捷的安装方式。

一些想法

开发 tmax 最初的动力来自于自己平时工作的需求,在大量应用使用 k8s 集群容器化后,经常需要对集群进行管理、排障、查询等操作,在某段时间内会频繁执行一些 kubectl 的命令,或者有些命令又特别长,或者 kubectl 的高级查询语法太难记忆,比如 jsonpathcustome-column 查询,举个🌰,leader 想要你快速导出集群中所有节点的名称以及其资源配置,就要用到 jsonpath 来循环查询:

kubectl get nodes -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.capacity.cpu}{'\t'}{.status.capacity.memory}{'\n'}{end}"

像这种命令,就可以加到 tmax 配置文件中,忘记语法格式或者想再次使用的时候就可以很方便地找出来。

集中开发 tmax 大概只有几天的时间,现在的 beta 版本仅能满足基本的使用(笔者在工作中已经在开始使用),有很多不完善的地方,后面会不断丰富和加强,也欢迎贡献创意与代码,附 GitHub 仓库:github.com/hantmac/tma…