跳到主要内容

Homebrew 安装清单

提示

这里记录的是我在 MacOS 上通过 Homebrew 安装的软件包清单,包含一些常用的工具软件和开发相关的软件包,方便日后回顾和重新安装,部分工具按照功能分类进行了整理

更多命令行工具整理在CLI Tools

kubectl 插件(增强 kubectl 的输出和功能)

krew

kubectl krew,一个命令行 kubectl 插件管理工具,可以用来安装和管理 kubectl 插件等信息,krew收录了大量的 kubectl 插件,可以通过 kubectl krew search 来搜索插件,通过 kubectl krew install <plugin-name> 来安装插件,通过 kubectl krew list 来列出已安装的插件,通过 kubectl krew upgrade <plugin-name> 来升级插件,通过 kubectl krew uninstall <plugin-name> 来卸载插件等操作,例如

安装krew参考官方文档即可

kustomize

kustomize 是一个 Kubernetes 配置管理工具,可以用来定制和管理 Kubernetes 资源的配置,例如可以用来创建和管理 Kubernetes 资源的 YAML 文件,支持多种配置选项和功能

kubectl 全彩输出

kubecolor,可以用来为 kubectl 的输出添加颜色,使其更易于阅读和理解,最新版本使用brew install kubecolor安装

安装后进行配置

~ echo '# set kubecolor \
alias kubectl="kubecolor" \
# make completion work with kubecolor \
compdef kubecolor=kubectl '>> ~/.zshrc
~ source ~/.zshrc

设置颜色风格,可以去官网找更多预设风格

~ echo 'preset: protanopia-dark' >> ~/.kube/color.yaml

在终端前显示当前的集群和 namespace

kube-ps1,一个命令行 kubectl 插件,可以在终端前显示当前的 Kubernetes 集群和 namespace 等信息

~ brew install kube-ps1 # 安装 kube-ps1
~ vim .zshrc # 在 .zshrc 文件中添加以下内容来启用 kube-ps1
# set kube-ps1
source "/usr/local/opt/kube-ps1/share/kube-ps1.sh"
PROMPT='$(kube_ps1) '$PROMPT
# 启用和禁用
~ kubeoff # 本shell禁用
~ kubeoff -g # 全局禁用
~ kubeon # 本shell启用
~ kubeon -g # 全局启用

多集群切换

kubectx,一个命令行 kubectl 插件,可以用来快速切换 Kubernetes 集群和 namespace 等信息

~ brew install kubectx # 安装 kubectx
~ kubectx # 列出所有集群
~ kubectx <cluster-name> # 切换到指定的集群
~ kubens # 列出所有 namespace
~ kubens <namespace-name> # 切换到指定的 namespace

kubectl debug

kubectl-debug,一个命令行 kubectl 插件,可以用来在 Kubernetes 集群中调试容器和应用等信息,安装方式:brew install aylei/tap/kubectl-debug,现在已经被合并到 Kubernetes 官方的 kubectl 中,可以直接使用 kubectl debug 命令来调试容器和应用等信息,例如

~ kubectl debug -n <namespace> <pod-name> --image=busybox --target=<container-name> -- sleep 3600

此工具运行后会在指定的 pod 中创建一个新的 debug 容器,并将新容器加入到目标容器的 pid, network, user 以及 ipc namespace 中, 这时我们就可以在新容器中直接用 netstat, tcpdump 这些熟悉的工具来解决问题了, 而旧容器可以保持最小化, 不需要预装任何额外的排障工具方便我们进行调试和排查问题等操作

kubeconfig合并

kubecm,一个命令行 kubectl 插件,可以用来合并和管理 Kubernetes 的 kubeconfig 文件等信息

brew install kubecm # 通过 Homebrew 安装 kubecm
kubectl krew install kc # 通过 kubectl krew 安装 kubecm 插件

使用参考,常用命令如下

# list
kubecm list # 列出所有 kubeconfig
# add
kubecm add -f test.yaml # 将 test.yaml 文件中的 kubeconfig 添加到 .kube/config 文件中
# delete
kubecm delete <kubeconfig-name> # 将 .kube/config 文件中指定的 kubeconfig 删除
# merge
kubecm merge 1st.yaml 2nd.yaml 3rd.yaml # 将 1st.yaml、2nd.yaml 和 3rd.yaml 文件中的 kubeconfig 合并到 .kube/config 文件中
# rename
kubecm rename <old-name> <new-name> # 将 .kube/config 文件中指定的 kubeconfig 重命名
# export
kubecm export <kubeconfig-name> -f test.yaml # 将 .kube/config 文件中指定的 kubeconfig 导出到 test.yaml 文件中

集群容量查看

kube-capacity,可以用来查看 Kubernetes 集群的容量和资源使用情况等信息

安装

brew tap robscott/tap
brew install robscott/tap/kube-capacity

使用

kube-capacity # 查看node
kube-capacity --pods # 查看pod
kube-capacity --util # 查看利用率
kube-capacity --pods --util # 查看pod利用率
kube-capacity --util --sort cpu.util # 排序
kube-capacity --pod-count # 显示pod个数
# 过滤
kube-capacity --pod-labels app=nginx
kube-capacity --namespace 默认
kube-capacity --namespace-labels team=api
kube-capacity --node-labels kubernetes.io/role=node
# 格式化输出
kube-capacity --pods --output json
kube-capacity --pods --containers --util --output yaml
# 查看某个node上pod使用的资源
kube-capacity --node-labels kubernetes.io/hostname=cn-beijing.10.245.38.25 --pods --util

k8s yaml校验

kubeconform,安装方式:brew install kubeconform

使用

# 验证单个有效文件
~ kubeconform fixtures/valid.yaml
~ echo $? # 输出0表示验证成功
# 验证单个无效文件,将输出设置为json
~ kubeconform -summary -output json fixtures/invalid.yaml
{
"resources": [
{
"filename": "fixtures/invalid.yaml",
"kind": "ReplicationController",
"version": "v1",
"status": "INVALID",
"msg": "Additional property templates is not allowed - Invalid type. Expected: [integer,null], given: string"
}
],
"summary": {
"valid": 0,
"invalid": 1,
"errors": 0,
"skipped": 0
}
}
~ echo $?
1

除了kubeconform外,也可以使用kubeval

yaml 精简

kubectl-neat,精简 Kubernetes 资源的 YAML 文件等信息,安装方式:kubectl krew install neat,使用方式如下

kubectl get pod mypod -o yaml | kubectl neat

grep 过滤

kubectl-grep,类似于 grep,可以用来在 Kubernetes 资源中进行文本搜索等信息,安装方式:kubectl krew install grep,使用方式如下

# 使用普通的grep
kubectl get pods -n star-lab | grep "flash"
# 使用kubectl-grep
kubectl grep pods -n star-lab flash

查看 pv 使用率

pv,可以用来查看 Kubernetes 集群中 Persistent Volume 的使用率等信息,安装方式:kubectl krew install df-pv

get all

kubectl-get-all,可以用来获取 Kubernetes 集群中所有资源的详细信息等信息,往往使用kubectl get all --all-namespaces只能获取部分资源的信息,而这个插件可以获取所有资源的信息,安装方式:kubectl krew install get-all使用文档参考

列出pod的image列表

kubectl-images,可以用来列出 Kubernetes 集群中 pod 使用的镜像列表等信息,安装方式:kubectl krew install images,使用方式如下

~ kubectl images -n kube-system -oy dns
- pod: coredns-78fcd69978-9pbjh
container: coredns
image: k8s.gcr.io/coredns/coredns:v1.8.4
- pod: coredns-78fcd69978-jh7m2
container: coredns
image: k8s.gcr.io/coredns/coredns:v1.8.4
~ kubectl images -A -c 0,1,3
[Summary]: 2 namespaces, 11 pods, 11 containers and 9 different images
+-------------+----------------------------------------+--------------------------------------------+
| Namespace | Pod | Image |
+-------------+----------------------------------------+--------------------------------------------+
| kube-system | coredns-78fcd69978-9pbjh | k8s.gcr.io/coredns/coredns:v1.8.4 |
+ +----------------------------------------+ +
| | coredns-78fcd69978-jh7m2 | |
+ +----------------------------------------+--------------------------------------------+
| | etcd-docker-desktop | k8s.gcr.io/etcd:3.5.0-0 |
...

同时查看多个pod副本的log

mtail,可以用来同时查看 Kubernetes 集群中多个 pod 副本的日志等信息,安装方式:kubectl krew install mtail,使用方式如下

~ kubectl mtail -l app=flash # 查看标签为 app=flash 的 pod 的日志,启动后会一次性跟踪多个相同标签的pod的日志
+ kubectl logs --follow flash-58f547f95d-8dkjh '' --tail=10
+ kubectl logs --follow flash-58f547f95d-cm2wc '' --tail=10

node-shell

node-shell,可以用来在 Kubernetes 集群中以交互式的方式进入节点的 shell 环境等信息,安装方式:kubectl krew install node-shell,使用方式如下

~ kubectl node-shell <node-name>

这个组件的原理就是在目标节点启动一个 privileged + hostPID 的特权 Pod,然后在容器里执行 nsenter 命令nsenter --target 1 --mount --net --pid ...,nsenter 进入宿主机 PID 1(init)的所有 namespace,于是 shell 就完全运行在宿主机环境里了

网络工具

测网速

使用 speedtest-cli,一个命令行网速测试工具,可以用来测试网络的下载速度、上传速度和延迟等信息

brew tap teamookla/speedtest
brew update
brew install speedtest --force

TCP 连接测试

tcping,一个命令行 TCP 连接测试工具,可以用来测试 TCP 连接的可达性和响应时间等信息

安装方式:brew install tcping,对应安装的是mkirchner/tcping

也可以手动安装,推荐paradiseduo/tcpingcloverstd/tcping,不用安装源安装的使用方式可能不一样

使用

~ tcping -c 3 www.baidu.com 443
www.baidu.com:443 has address: 39.156.70.46:443 - Connected - 8.788ms
www.baidu.com:443 has address: 39.156.70.239:443 - Connected - 10.793ms
www.baidu.com:443 has address: 39.156.70.239:443 - Connected - 10.16ms
Ping statistics www.baidu.com:443
3 probes sent.
3 successful, 0 failed.
Approximate trip times:
Minimum = 8.788ms, Maximum = 10.793ms, Average = 9.914ms

查看 IP 信息

使用ipinfo-cli,通过brew install ipinfo-cli安装

使用

ipinfo myip # 查看自身ip
ipinfo 8.8.8.8 # 查看任意ip

简化版 http 请求

httpie,一个命令行 HTTP 客户端工具,可以用来简化 HTTP 请求的发送和响应的查看等操作,安装方式:brew install httpie使用参考

使用

http https://www.baidu.com # 发送 GET 请求
http POST https://www.baidu.com name=zhangsan age=18 # 发送 POST 请求
http https://www.baidu.com name==zhangsan age>18 # 发送 GET 请求,带查询参数

图形化 ping

gping,一个命令行图形化 ping 工具,可以用来实时监控网络连接的延迟和丢包率等信息 gping

路由追踪

mtr,一个命令行路由追踪工具,可以用来追踪网络路径和诊断网络问题等信息,类似于 traceroute

~ brew install mtr # 安装 mtr
~ brew list mtr # 查看 mtr 的安装路径
/usr/local/Cellar/mtr/0.96/etc/bash_completion.d/mtr
/usr/local/Cellar/mtr/0.96/sbin/mtr
/usr/local/Cellar/mtr/0.96/sbin/mtr-packet
/usr/local/Cellar/mtr/0.96/sbom.spdx.json
/usr/local/Cellar/mtr/0.96/share/man/ (2 files)
# 创建软链接,使 mtr 可以在命令行中直接使用
~ ln -s /usr/local/Cellar/mtr/0.96/sbin/mtr /usr/local/bin/mtr
~ ln -s /usr/local/Cellar/mtr/0.96/sbin/mtr-packet /usr/local/bin/mtr-packet
# 使用 mtr 进行路由追踪,需要sudo权限
~ sudo mtr www.baidu.com

httpstat

httpstat,一个命令行 HTTP 请求统计工具,可以用来统计 HTTP 请求的各个阶段的时间和状态等信息,参考自reorx/httpstat这个项目 httpstat

计算ip地址数量

ipcalc,一个命令行 IP 地址计算工具,可以用来计算 IP 地址的数量、子网掩码和广播地址等信息

使用

~ ipcalc 192.168.20.0/18
Address: 192.168.20.0 11000000.10101000.00 010100.00000000
Netmask: 255.255.192.0 = 18 11111111.11111111.11 000000.00000000
Wildcard: 0.0.63.255 00000000.00000000.00 111111.11111111
=>
Network: 192.168.0.0/18 11000000.10101000.00 000000.00000000
HostMin: 192.168.0.1 11000000.10101000.00 000000.00000001
HostMax: 192.168.63.254 11000000.10101000.00 111111.11111110
Broadcast: 192.168.63.255 11000000.10101000.00 111111.11111111
Hosts/Net: 16382 Class C, Private Internet

效率工具

优化ctrl + r历史记录选择

fzf,一个命令行模糊搜索工具,可以用来优化 ctrl + r 的历史记录选择 安装方式:brew install fzf,安装完成后需要执行 $(brew --prefix)/opt/fzf/install 来启用键盘映射和模糊提示 效果如下图所示: fzf

j + 目录名跳转

autojump,一个命令行目录跳转工具,可以通过 j + 目录名 的方式快速跳转到之前访问过的目录,安装完成后需要在 ~/.zshrc 文件中添加以下内容来启用 autojump:

# plugins 变量中添加 autojump 插件
plugins=(
autojump
.....
)
# set autojump
[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh

文本查找

ag,类似ack,增强版的 grep,一个命令行文本查找工具,可以用来快速查找文件中的文本内容

安装

brew install the_silver_searcher

使用

# 寻找内容包含"小明"的文件,并列出所在的行数:
ag {{小明}}
# 在指定目录中寻找内容包含"foo"的文件:
ag {{小明}} {{指定的目录}}
# 寻找内容包含"foo"的文件,但只列出文件名:
ag -l {{小明}}
# 忽略大小写,寻找内容包含"ABC"的文件,并只输出匹配的内容,而非整行:
ag -i -o {{ABC}}
# 在文件名包含"小红"的文件中寻找"小明":
ag {{小明}} -G {{小红}}
# 使用正则表达式来匹配文件内容:
ag '{{^ba(r|z)$}}'
# 输出文件名包含"小明"的文件名:
ag -g {{小明}}

本地压测工具

可以在 Mac 命令行使用这些工具进行本地压测,模拟高并发请求等场景,具体使用可以看压测工具

  • fortio
  • vegeta
  • wrk
  • hey

coreutils

coreutils,coreutils 是 GNU Core Utilities 的缩写,它是一套标准的 UNIX 命令行工具,通常在 Linux 系统上预安装。而在 Mac 上,默认安装的是 BSD 版本的这些工具,这些工具与 GNU 版本在功能和选项上有所不同

~ brew install coreutils
~ ls /usr/local/opt/coreutils/libexec/gnubin
[ cat comm df env fold join md5sum nice paste ptx seq shred stdbuf tee truncate unlink yes
b2sum chgrp cp dir expand groups link mkdir nl pathchk pwd sha1sum shuf stty test tsort users
base32 chmod csplit dircolors expr head ln mkfifo nohup pinky readlink sha224sum sleep sum timeout tty vdir
base64 chown cut dirname factor hostid logname mknod nproc pr realpath sha256sum sort sync touch uname wc
basename chroot date du false id ls mktemp numfmt printenv rm sha384sum split tac tr unexpand who
basenc cksum dd echo fmt install man mv od printf rmdir sha512sum stat tail true uniq whoami

安装后需要添加补全

# 在 ~/.zshrc 文件中添加以下内容来启用 coreutils 的补全
# set coreutils
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"

终端上传下载

lrzsz,终端文件传输工具,支持 rzsz 命令,可以在终端中方便地上传和下载文件

vim增强

neovimVim 的增强版本,提供了更好的性能和更多的功能

终端显示logo等

  • neofetch,一个命令行系统信息工具,可以在终端显示系统信息和logo等,这个项目原作者已于2024年将其仓库归档并停止维护,且已被 Homebrew 官方仓库移除
  • fastfetch, neofetch 的一个分叉项目,提供了更快的性能和更多的功能,可以用来显示系统信息和logo等
  • cpufetch, 一个命令行CPU信息工具,brew安装不上就直接安装二进制

终端版本 TeamViewer

tmate

Dockerfile 检查

hadolint,一个命令行 Dockerfile 检查工具,可以用来检查 Dockerfile 的语法和最佳实践

查看磁盘空间等信息

类似于Linux上的 dfdu 命令,MacOS上可以使用 duf,一个命令行磁盘使用工具,可以用来查看磁盘空间的使用情况和剩余空间等信息

Ansible

ansible,用于自动化配置管理和应用部署的工具,可以用来管理和配置服务器等资源

在命令行输入 ssh 密码

sshpass,可以用来在命令行中提供密码进行 SSH 连接,适用于一些需要自动化 SSH 连接的场景,例如在脚本中使用 SSH 连接到远程服务器执行命令等,安装方式

wget -c https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb # 这个是一个第三方的 Homebrew 公式,提供了 sshpass 的安装方式,也可以直接使用[官方的安装方式](https://formulae.brew.sh/formula/sshpass)
brew install sshpass.rb

实时监控

glances,类似于 tophtop 的一个命令行系统监控工具,可以用来实时监控系统的 CPU、内存、磁盘、网络等资源的使用情况

代码量统计

cloc,一个命令行代码量统计工具,可以用来统计代码的行数、文件数和语言分布等信息

gRPC 请求客户端

grpcurl,可以在命令行中测试 gRPC 服务的工具,类似于 curl,但专门用于 gRPC 服务,可以用来发送 gRPC 请求、查看响应和调试 gRPC 服务等信息

增强版git

tig,一个命令行 git 增强工具,可以用来查看 git 的提交历史、分支和标签等信息,提供了更好的界面和交互方式,例如

tig log
tig status

命令行超级补全

dmg下载安装或通过brew install fig安装

容器镜像搬运工

skopeo,一个命令行容器镜像工具,可以用来查看、复制和验证容器镜像等信息,常用指令

~ skopeo copy docker://docker.io/busybox:1.37.0 docker://registry.ssgeek.com/busybox:1.37.0 --multi-arch all # 复制镜像并保留所有架构
~ skopeo copy docker://docker.io/busybox:1.36.1 docker://registry.ssgeek.com/busybox:1.36.1 --override-arch=amd64 --override-os=linux # 仅复制amd64架构的镜像

终端操作录制

asciinema,一个命令行终端操作录制工具,可以用来录制终端中的操作并生成可分享的链接等信息,安装方式:brew install asciinema

录制

# 开始录制
~ asciinema rec demo.cast
asciinema: recording asciicast to demo.cast
asciinema: press <ctrl-d> or type "exit" when you're done
~ echo "Hello, World!"
~ ls -l
~
~
# 结束录制,可以通过按下 `ctrl + d` 或输入 `exit` 来结束录制
asciinema: recording finished
asciinema: asciicast saved to demo.cast

回放

# 回放录制的操作
~ asciinema play demo.cast

除此之外,还可以将录制的操作上传到 asciinema 的服务器上,生成一个可分享的链接,例如

~ asciinema auth # 进行登录认证,第一次使用需要先注册账号
# 上传录制的操作
~ asciinema upload demo.cast
asciinema: uploading demo.cast
asciinema: asciicast uploaded
asciinema: view it at https://asciinema.org/a/123456